11 자동화된 버전 관리
누군가 무엇을 했는지, 언제 했는지를 추적하기 위해서 버전 관리를 어떻게 사용할 수 있는지 탐색해보자. 다른 사람과 협업을 하지 않더라도, 자동화된 버전 관리가 다음 상황보다 훨씬 더 낫다:
이전에 위와 같은 상황에 처했었다. 같은 문서에 대해서 거의 동일한 다수 버전을 관리하는 것은 우스꽝스러워 보인다. 일부 워드프로세서에는 이런 상황을 좀 더 잘 처리하도록 하는 기능이 있다. 예를 들어, 마이크로소프트 워드 “변경 내용 추적(Track Changes)”이나 구글 문서(Google Docs)의 버전 기록 기능이 그것이다.
버전 관리 시스템은 문서의 기본 버전으로 시작한 후, 각 단계마다 변경한 이력을 저장한다. 테이프로 생각하면 이해하기 쉽다. 테이프를 되감으면 문서를 시작한 지점으로 돌아가고, 각 변경 사항을 다시 적용하면 가장 최신 버전이 된다.
변경 사항을 문서 그 자체와 별개로 생각하면, 동일한 기반 문서에 서로 다른 변경 사항을 적용해보는 식으로 “재생(playback)”할 수 있고, 이를 별도의 문서 버전을 관리하는 것으로 간주할 수 있다. 예를 들어, 두 사용자가 같은 문서에 독립적으로 변경 작업을 수행할 수 있다.
만약 충돌이 발생하지 않는다면, 심지어 동일한 문서에 두 가지 변경 사항을 모두 적용할 수도 있다.
버전 관리 시스템은 사용자를 대신해서 변경 사항을 기록하고, 파일 버전을 생성하며 파일을 병합하는 데 유용한 도구이다. 버전 관리 시스템을 사용하면 어떤 변경 사항을 다음 버전에 반영할지 결정할 수 있는데, 이를 커밋(commit)이라고 부른다. 또한 커밋에 관한 유용한 메타 정보도 보관한다. 특정 프로젝트와 프로젝트 메타 정보에 대한 완전한 커밋 이력은 저장소(repository)에 보관된다. 저장소는 협업하는 여러 동료의 컴퓨터 간에 동기화될 수 있다.
자동화된 버전 관리 시스템은 전혀 새로운 것이 아니다. 1980년대부터 RCS, CVS, Subversion 같은 도구가 존재했고, 많은 대기업에서 사용되어 왔다. 하지만 다양한 기능의 한계로 인해 이들 중 다수는 이제 레거시 시스템(legacy system)으로 간주된다. 최근에 등장한 Git과 Mercurial 같은 도구는 분산(distributed) 기능을 제공한다. 이는 저장소를 반드시 중앙 서버에 둘 필요가 없다는 의미이다. 이러한 최신 시스템에는 동시에 여러 저자가 동일한 파일을 편집하는 것을 가능하게 하는 강력한 병합(merge) 도구도 내장되어 있다.
논문을 작성하면서 정말 멋진 문단을 초안으로 작성했지만, 나중에 망쳐버렸다고 상상해 보자. 어떻게 해야 정말 멋진 결론 부분이 포함된 문서 버전을 되살릴 수 있을까? 과연 가능할까?
공동 저자가 5명 있다고 가정해 보자. 이들이 논문에 반영한 변경 사항과 의견(comment)을 어떻게 관리할 수 있을까? 마이크로소프트 워드나 리브레오피스 Writer를 사용한다면
변경 내용 추적
기능으로 변경 사항을 반영하면 어떻게 될까? 이러한 변경 내역을 계속 보관하고 있을 수 있을까?