git 버전관리 (VCS)

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 버전관리(VCS)에 대해 알아보며, 로컬 버전 관리(RCS)와 중앙 집중식 버전관리(CVCS), 분산 버전 관리 (DVCS)에 대해 설명합니다.


버전관리란?

버전관리시스템 (VCS, version control system)은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템을 의미한다.

즉, VCS를 사용하면 각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트를 통째로 이전 상태로 되돌릴 수 있으며, 시간에 따라 수정내용을 비교할 수 있다. 더 나아가 누가 문제를 일으켰는지 추적이 가능하고 누가, 언제, 어떻게 만들어낸 이슈인지도 알 수 있다.

로컬 버전 관리 시스템

RCS(Revision control system)는 기본적으로 Patch set을 관리한다.

Patch set은 파일에서 변경되는 부분으로 이 Patch set은 특별한 형식의 파일을 저장한다. 그리고 일련의 Patch set을 적용해 모든 파일을 특정 시점으로 되돌릴 수 있다.

중앙 집중식 버전 관리 시스템

CVCS(Central VCS)는 프로젝트를 진행하는 중 다른 개발자와 함께 작업하는 경우 생기는 문제를 해결하기 위해 개발됐다. CVCSRCS에 비해 장점이 많다. 모두 누가 무엇을 하고 있는 지 알 수 있으며, 관리자는 누가 무엇을 할 지 꼼꼼하게 관리할 수 있다.

그러나 가장 큰 결점이 있다.

가장 대표적인 것은 중앙 서버에 발생한 문제다. 만약 서버가 한시간동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고 사람들이 하는 일을 백업할 방법도 없다. 그리고 중앙 데이터 베이스가 잇는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는 다.

물론 사람마다 하나씩 가진 스냅샷은 괜찮다.

분산 버전 관리 시스템

DVCS(Distributed VCS)는 단순히 파일의 마지막 스냅샷을 checkout하지 않는다.

그냥 저장소 전부를 복제한다.

서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있고 클라이언트 중 아무거나 골라도 서버를 복원할 수 있다. 모든 checkout은 모든 데이터를 가진 진정한 백업이다.

게다가 대부분의 DVCS환경에서는 리모트 저장소가 존재한다.

그래서 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다.

다음 포스팅에서는 git과 관련된 용어 정리를 할 것이다.