본문 바로가기
Infrastructure

버전관리 시스템 Version Control Systems, VCS

by PROMISE_YOO 2022. 11. 9.

버전관리 시스템

  1. CVS
  2. SVN
  3. Git

 

 

 

버전관리시스템 Version Control Systems, VCS

  • 여러 팀원이 작업한 코드를 합치고 관리 → 협업 도구
  • 개발 프로세스 단계에서 소프트웨어의 변경 사항을 체계적으로 관리하고 추적

■ CVS - Concurrent Version System

특징

  • 1990년에 출시
  • 개발과정에서 사용하는 파일들의 변경 명세를 관리하기 위한 시스템
  • 중앙에 위치한 Repository에 파일을 저장하고, 모든 사용자가 파일에 접근할 수 있도록 설계
  • 파일의 히스토리를 보존하기 때문에 과거 이력을 확인할 수 있음
  • checkout으로 파일 복사, commit으로 변경사항 저장

장점

  • 오랜 기간 많은 유저가 사용하였고 시스템이 안정적
  • 파일 전체를 저장하지 않고 변경사항만 저장하여 적은 용량 사용

단점

  • 버전 분기가 힘들고, 장기간 분기된 버전 운영에 대해 미설계
  • Commit 중 오류가 발생하면 롤백되지 않음.
  • 상대적으로 속도가 느림.
  • 디렉터리의 이동이나 이름 변경을 허용하지 않는다. 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.

■ SVN - Subversion

특징

  • CVS의 단점을 보완하기 위해 2000년에 출시
  • 개발과정에서 사용하는 파일들을 관리하기 위한 중앙 관리 시스템
  • 최초 1회에 한해 파일 원본을 저장하고 이후에는 실제 파일이 아닌 원본과 차이점을 저장하는 방식
  • 버전 분기 가능

장점

  • CVS와 높은 호환성을 유지
  • commit 실패 시 롤백 지원
  • 언제든지 원하는 버전으로 복구 가능

단점

  • 파일과 디렉토리 변경 관련 버그
  • CVS에 비해 상대적으로 불안정
  • Local Repo가 없기 때문에 자신만의 version history 관리 불가능
  • commit에 실수가 있을 시 다른 개발자에게 바로 영향

■ Git

특징

  • 2005년 리누스 토르발스가 리눅스 커널의 개발을 위해 출시
  • 개발자가 중앙 서버에 접속하지 않은 상태에서도 코딩 작업을 할 수 있도록 지원
  • 로컬에 다수의 독립성이 보장되는 branch를 허용하고 쉽게 생성, 병합, 삭제를 지원
  • Staging Area를 통해 Repository로 업로드
    • Staging Area : 변경사항이 저장소에 커밋되기 전에, 반드시 거쳐야만 하는 중간단계

장점

  • 로컬 우선 작업으로 CVS, SVN 보다 성능 우수
  • 분기 버전의 효율적인 운영
  • 서버 저장소와 개발자 저장소가 독립적이므로 서버 저장소 Repository 장애에도 문제없이 버전 관리 가능
  • commit 실수가 있어도 서버에 바로 영향 없음
  • 팀 개발을 위한 분산 환경 코딩에 최적화

단점

  • 많은 기능 지원으로 높은 진입 장벽

 

 

 

  • push : 로컬 저장소의 데이터를 원격 저장소로 밀어넣기
  • pull : 원격 저장소의 데이터를 로컬 저장소에 가져와 병합하기
  • 브랜치(Branch) : 각자 독립적인 작업 영역(저장소)
  • 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능
  • Merge : 변경 이력 병합하기