todolist: git, svn, mercurial

Source Version Control을 소개합니다.


다양한 git, svn, purpose, mercurial등을 하나씩 소개합니다.

Title

SiteUrl

대상

간단 설명

 

 

 

History

작업하는 파일의 version 관리하기 위해 보통 backup 파일을 만든다그러나 이러한 방식으로는 잦은 변경을 관리하기 어려우며 변경에 대한 이력을 관리하기도 어렵게 된다
이런 문제를 해결하기 위해 version control system(VCS or Source Code Control System: SCCS) 등장하게 되었다.

 

VCS 형태

이러한 VCS 초기에는 local system에서 구동되었는데, network 발전과 작업의 편의성등 때문에 아래와 같이 발전하게 되었다.

  1. Local VCS : 초기의 system으로 local system에서 file diff 누적관리 함으로 version control 운영하였다. ex: RCS
  1. Centralized VCS : 공동의 작업을 위해 server client 나누어 서버는 모든 diff 가지고 있고, client tag 그은 순간의 snapshot 가지고 작업을 하게 된다
    따라서 서버가 불안정하면 작업이 중단되거나 data소실의 위험이 많아진다. ex: CVS, SVN, Perforce, Clearcase
  2. Distributed VCS : 분산 버전관리 시스템으로 client server 동일한 수준으로 모든 diff 가지게 된다따라서 locally 작업  server 새로 발생한 diff들을 synchronize하는 방식으로 동작한다. data소실시에도 client diff history 복구가 가능하다. ex: Git, Mecurial, Bazaar, Darcs

 

VCS 구조

file 수정시 before/after간에 diff 발생하게 된다이런 차이를 diff 관리할지 full file(snapshot)으로 관리할지 차이가 발생하게 된다.

  1. diff 관리 : before/after difference diff patch 관리 ex: CVS, Subversion, Perforce, Bazaar
     

 

 

  1. snapshot관리 : before/after difference full file snapshot으로 관리

 

 

장단점 정리

비교대상이 다양함으로 기존 centralized VCS 대비 장점/단점만 정리하면 다음과 같다.

  1. 속도 : server 통한 query 아닌 local query이므로 빠르다그러나 초기 파일 sync속도는 느릴 수도 있으며 빠를 수도 있다이는 git 대한 특정 version snapshot 아닌 history 모두 가져오기 때문이다그러나 git 특성상 특정 snapshot 가져오는 속도가 매우 빠르다다른 시스템은 특정 snapshot 가져오기 위해 diff merge하여 해당 snapshot 만들어내지만, git  version마다 snapshot 이미 만들어져 있으므로 따로 만들 필요가 없다.
  2. 용량 : 다른 VCS 비해 용량을 많이 잡아 먹는다이는 local system 모든 history 가지고 있기 때문이다.
  3. 안정성: server client 모두 git history존재하므로 data loss확율이 거의 없다
    그러나 local에서 history관리(git rebase등으로 history 변경시)까지 해줘야 함으로 server단과 conflict확율이 높다.
  4. 편의성: local에서 작업하므로 network 항상 연결되어 있을 필요가 없다또한 구성이 자유롭다. repo 합쳐서 multi-site git 하나의 repository 구성할  있다.
    이러한 특징 때문에 대용량 project 관리가 가능하다.
  5. 비용: open source 운영되고여러 가지 tool들이 지원되므로 저렴하다그러나 학습곡선이 가파른 단점(어렵다) 존재한다.