머큐리얼에 대한 이해

머큐리얼은 초보자에게 어려울 수 있는 분산형 개발 모델이다. 이 페이지는 기초적인 개념을 설명한다. 한단계씩 따라해 보려면 KoreanTutorial를 참고하라.

(Translations: Brazilian Portuguese, Chinese, French, German, Italian, Japanese, Korean, Spanish )

Repository에 있는 것들

머큐리얼의 repositories에는 store과 함께 working directory가 있다:

store에는 프로젝트에 대한 완전한 이력이 남아 있다. 이러한 이력을 중앙 한곳에만 가지고 있는 전통적인 SCMs과는 달리 모든 working directory는 이력에 대한 복사본을 쌍으로 가지고 있다. 이것은 병행적으로 개발하는 것을 가능케 한다.

working directory는 편집을 위한 준비로 특정 시점에(예를 들어 rev 2) 프로젝트의 파일의 복사본을 포함하고 있다. 왜냐하면 같이 포함되어 있는 tags와 ignore files는 revision-controlled이기 때문이다.

변경사항 Commit 하기

commit을 할때, working directory의 상태는 새로운 revision으로 기록 되어진 그것의 부모 와 관련이 있다.

revision 4는 working directory에 있는 revision이었던 revision 2의 branch임을 주의하라. 이제 revision 4는 working directory의 parent이다.

Revisions, Changesets, Heads, and Tip

머큐리얼 그룹은 전체 프로젝트의 revision들인 단일 atomic changesets에 여러개의 파일에 대한 변경사항들에 관여한다. 이 각각의 것들은 순차적인 revision number를 받는다. 왜냐하면 머큐리얼은 분산된 병행 개발을 허락하며 이러한 revision numbers는 사용자들 마다 다를 것이기 때문이다. 따라서 머큐리얼은 또한 각각에 대하여 global changeset ID 를 할당할 것이다. Changeset ID는 40자의 16진법 숫자이지만 "e38487"와 같이 명확한 prefix로 요약되어질 수 있다.

revision history에서의 Branches 와merges는 어떤 시점에서도 발생할 수 있다. 각각의 merge되지 않은 branch는 revision 이력의 새로운 head를 만든다. 여기 revision 5와 6는 head들이다. 머큐리얼은 가장 높은 revision number를 가진 revision 6가 repository의 tip으로 여긴다.

Cloning, Making Changes, Merging, and Pulling

다음과 같은 store를 가진 사용자 Alice와 함께 시작해보자.

Bob 은 이 repo와 Alice의 store의 완전한 복사본을 clones 한다.

그리고 Bob은 두개의 changes를 commits한다:

그리고 Alice는 그녀대로 병행적으로 change를 만든다:

그리고 Bob은 동기화(synchronize)를 위해 Alice의 repo를 pulls한다. 이는 Alice의 모든 change를 Bob의 repo에 복사한다:

Alice의 g는 Bob의 repository에 잇는 최신 head이기때문에 지금은 tip으로 되어 있다. Bob은 (f)에서 작업한 최근 change를 tip과 결합시키는 merge하고, 그 결과를 commit하고 끝낸다:

지금 만약 Alice가 Bob으로부터 pulls한다면, 그녀는 Bob의 change인 e,f,h를 받고서 완전히 동기화 될 것이다.:

분산형 시스템

머큐리얼은 완전한 분산형 시스템으로, 중앙저장소의 internal notion을 가지지 않는다. 따라서 사용자는 change들을 공유하기 위한 토폴로지 정의로부터 자유로워진다.(CommunicatingChanges를 참고하라):

실제 머큐리얼에 대한 지시서는 KoreanTutorial를 참고하라.