[형상관리] cvs , svn , git 비교

VCS (형상관리 시스템)

 

버전 관리: VCS는 파일(소스) 변경 내역을 추적하고 버전별로 저장하여 이전 버전으로 복구 이력관리가 되며, 실제 운영 배포 후에 미처 발견하지 못한 치명적인 오류 등을 발견할 경우 원복에 용이함. 또한 다른 개발자가 작업한 내용을 확인하고 비교할 수 있음.

협업: VCS를 이용하면 여러 명의 개발자가 동시에 작업이 가능함. 최종 작업 내역이 중앙 서버에 저장되므로, 모든 개발자는 최신 버전(운영)의 파일을 볼 수 있습니다. 이를 통해 개발자는 서로의 작업 내역을 볼 수 있고, 충돌을 방지하면서 효율적으로 협업이 가능하다.

백업: VCS는 파일을 중앙 서버에 저장하기 때문에, 데이터를 안전하게 백업. 만약 개발자가 로컬 컴퓨터에 저장된 파일을 잃어버리거나 손상된 경우, 중앙 서버에서 파일을 복구할 수 있다.

 

cvs, svn 과 git

 

CVS는 Concurrent Versions System의 약어로, 1980년대에 개발되었고 초기 오픈 소스 프로젝트에서 많이 사용

 

SVN은 Subversion의 약어로, 2000년대 초에 개발되었고, Git 이전에는 가장 많이 사용되는 VCS

SVN은 Git과 달리 중앙 집중식 저장소에 의존하며, 파일의 이력과 변화를 추적하는 데 강점

 

Git은 2005년에 개발된 분산형 VCS로, 현재 가장 인기 있는 VCS 중 하나

 Git은 파일의 이력을 추적하는 것은 물론이고, 브랜치와 병합 기능이 강력하며, 오픈 소스 프로젝트에서 널리 사용

Git은 다양한 클라이언트 도구와 통합이 가능하며, 속도와 유연성면에서 SVN과 CVS에 비해 뛰어나다.

 

CVS

 

오래된 Regacy System 의 형상관리로 자주 보임.

(현재 운영 중인 시스템에서도 사용 중)

 

느낀점 : 

  • 디렉토리 이동이나 파일의 이름변경 또한 불편했다. *cvs에선 허용되지 않아, 제거한 뒤 다시 추가해줘야 함.
  • 커밋 실패 시, 롤백이 지원되지 않는다.
  • CVS는 파일 기반의 VCS로 파일단위의 버전 관리를 수행함.
  • 파일 단위로 관리되어 작은 단위의 변경 내용도 쉽게 추적이 가능하며 변경내역 비교 / 복구도 용이.

관련 명령어

  • Checkout
    새로운 디렉토리 생성 및 소스 코드 다운로드: cvs checkout <module name>
    기존 디렉토리 업데이트: cvs update
  • Commit
    변경 내용 커밋: cvs commit [-m "commit message"] </file or directory name>
  • Add/Delete
    파일 추가: cvs add </file name>
    파일 삭제: cvs remove </file name>
  • Branching/Tagging

    새로운 브랜치 생성: cvs tag -b
    태그 생성: cvs tag  </module name></tag name>
  • Merging
    브랜치 병합: cvs update -j </branch name>
    태그 병합: cvs update -r </tag name>
  • 기타
    로그 확인: cvs log <file name>
    변경 내역 비교: cvs diff [-r <rev1> [-r <rev2>]] <file name>

Tortoisecvs - cvs 형상관리 툴

cvsChangelog - 변경로그

 

SVN

  • CVS와 높은 호환성을 유지
  • 원자적(atomic) 커밋.
    SVN 여러개의 파일을 커밋시에 하나의 커밋이 실패하면 모두 이전 상태로 되돌아 갑니다. 
  • CVS에 비해 빠른 업데이트/브랜칭/태깅 속도
  • 중앙집중형
Checkout: 저장소에서 작업 디렉토리를 복제합니다.
svn checkout [repository_url]
Add: 새 파일이나 디렉토리를 저장소에 추가합니다.
svn add [file/directory_name]
Commit: 작업 디렉토리의 변경 사항을 저장소에 적용합니다.
svn commit -m "commit message"
Update: 저장소에서 작업 디렉토리를 업데이트합니다.
svn update
Revert: 작업 디렉토리의 변경 사항을 취소합니다.
svn revert [file/directory_name]

 

Git

  • 분산 버전 관리 시스템
  • 서버 저장소와 로컬 저장소가 독립적으로 관리
  • 빠른 속도
    Git은 파일의 변경 내역을 저장하는 방식이 다른 VCS에 비해 매우 빠르기 때문에 대용량 프로젝트에서도 빠른 속도를 유지할 수 있습니다.

Git  SVN과 차이 

  • 분산형 vs 중앙집중형
    Git은 모든 개발자가 로컬 저장소를 가지고 있으므로 개발자들 간의 협업이 더 유연합니다. 이는 Git의 브랜치 및 병합 기능으로 인해 가능합니다. SVN은 중앙 서버에 모든 파일이 저장되어 있기 때문에 개발자들이 협업하려면 중앙 서버와 연결이 필요하다.
  • Push 대신 Commit: Git에서 Push는 로컬 저장소의 변경사항을 원격 저장소에 업로드하는 명령어입니다. SVN에서는 이 기능을 Commit 명령어
  • Pull 대신 Update: Git에서 Pull은 원격 저장소의 변경사항을 로컬 저장소로 가져오는 명령어입니다. SVN에서는 이 기능을 Update 명령어
  • SVN은 개별적인 로컬 저장소가 없기 때문에 자신만의 버전 이력 관리가 힘들다.

관련 StackOverflow 글

https://stackoverflow.com/questions/871/why-is-git-better-than-subversion

 

Why is Git better than Subversion?

I've been using Subversion for a few years and after using SourceSafe, I just love Subversion. Combined with TortoiseSVN, I can't really imagine how it could be any better. Yet there's a growing

stackoverflow.com

 

결론

Git은 문법이나 개념적으로 SVN에 비해 진입장벽이 높다.

Git 과 Svn 을 비교해서 서로의 차이가 있으며, CVS는 대체로 사용을 안하는 추세.

다만 여러 개발자가 협업하고 브랜치를 따서 분기를 만들고 하는 등의 협업과 속도 등에서 Git이 더욱 강점이 있음.

개인/혹은 소수인 경우엔 Git의 장점이 퇴색되는 경향이 있다.

 

다만 트렌드에도 알 수 있다시피,

대한민국에선 점점 Git의 사용이나 도입이 더 많은 것으로 고려되어 학습 및 사용을 해보는 것이 좋다.

 

https://trends.google.co.kr/trends/explore?date=today%205-y&geo=KR&q=SVN,CVS,GIT&hl=ko 

 

Google 트렌드

Google 트렌드에서 SVN, CVS, GIT에 관한 검색 관심도를 시간, 위치, 인기도순으로 탐색

trends.google.co.kr

대한민국에서의 vcs 트렌드(5년)