CVS에서 이주하기
Tier: Free, Premium, Ultimate
Offering: GitLab.com, Self-managed, GitLab Dedicated
CVS는 SVN과 유사한 오래된 중앙집중식 버전 관리 시스템입니다.
CVS 대 Git
다음 목록은 CVS와 Git의 주요 차이점을 보여줍니다:
- Git은 분산형입니다. 반면에 CVS는 클라이언트-서버 아키텍처를 사용하여 중앙집중식입니다. 이는 Git이 작업 영역이 저장소 전체의 복사본인 데에 반해 더 유연한 워크플로우를 갖고 있다는 것을 의미합니다. 이로 인해 브랜치를 전환하거나 병합할 때의 부하가 감소하는데, 예를 들어, 원격 서버와 통신할 필요가 없기 때문입니다.
- 원자적 연산. Git에서 모든 연산은 원자적입니다. 즉, 연산이 완전히 성공하거나 변경 사항 없이 실패합니다. CVS에서는 커밋(및 다른 연산)이 원자적이 아닙니다. 저장소에서 연산이 중단되면 일관성 없는 상태로 남을 수 있습니다.
- 저장 방식. CVS의 변경 사항은 파일 단위(변경 집합)로 이루어지지만 Git에서는 커밋된 파일이 전체로 저장됩니다(스냅샷). 즉, Git에서는 전체 변경 사항을 되돌리거나 취소하는 것이 매우 쉽습니다.
-
리비전 ID. CVS에서 변경 사항이 파일 단위로 이루어지기 때문에 리비전 ID는 예를 들어
1.4
와 같은 버전 번호로 표현됩니다. Git에서는 각 프로젝트의 각 버전(각 커밋)에 SHA-1으로 지정된 고유한 이름이 있습니다. - 병합 추적. Git은 병합 전 커밋하는 방식을 사용하며, 이는 CVS의 병합 전 커밋(또는 업데이트 후 커밋)과는 다릅니다. 새로운 커밋(새 리비전)을 생성하기 위해 준비 중일 때 동일한 브랜치에서 다른 개발자가 새로운 커밋을 생성하고 중앙 리포지토리에 푸쉬한다면, CVS는 변경을 커밋하기 전에 먼저 작업 디렉토리를 업데이트하고 충돌을 해결해야 한다. 그러나 Git은 아닙니다. 먼저 커밋하고 버전 관리에서 상태를 저장한 후에 다른 개발자의 변경 사항을 병합합니다. 또한, 다른 개발자에게 병합을 수행하고 충돌을 해결할 것을 요청할 수도 있습니다.
- 서명된 커밋. Git은 커밋에 서명을 지원하여 커밋의 원래 작성자에게서 유래한 것임을 추가로 보안 및 인증합니다. GitLab은 서명된 커밋이 올바르게 검증되었는지 표시합니다.
위의 항목 중 일부는 이 훌륭한 스택 오버플로우 게시물에서 가져왔습니다. 더 많은 차이점 목록은 Wikipedia의 다른 버전 관리 소프트웨어 비교 문서를 참고하세요.
왜 이주해야 하는가
CVS는 2008년 이후로 새로운 릴리스가 없는 오래된 시스템입니다. Git은 (git bisect
와 같은) 더 많은 도구를 제공하여 더 생산적인 워크플로우를 가져다 줍니다. Git/GitLab로의 이주는 다음과 같은 장점을 제공합니다:
- 짧은 학습 커브. Git은 큰 커뮤니티를 갖고 있으며 시작하기 위한 방대한 수의 튜토리얼이 있습니다(사용자의 Git 주제를 참조하세요).
- 현대적인 도구와의 통합. Git과 GitLab로의 이주를 통해 내장된 버전 관리, 이슈 추적, 코드 검토, CI/CD 등을 갖춘 오픈 소스 전체 소프트웨어 개발 플랫폼을 갖게 됩니다.
-
많은 네트워크 프로토콜 지원. Git은 SSH, HTTP/HTTPS, rsync 등을 지원하는 반면, CVS는 SSH와 사용자 인증이 없는 자체 불안전한
pserver
프로토콜만을 지원합니다.
어떻게 이주할 것인가
다음은 이주를 시작하는 데 도움이 되는 몇 가지 링크입니다:
cvs-fast-export
도구를 사용하여 이주- CVS 리포지토리 가져오기에 대한 스택 오버플로우 게시물
git-cvsimport
도구의 매뉴얼 페이지reposurgeon
을 사용하여 이주