가장 큰 차이점은 분기 이름이 기록에 기록되는 방식입니다. 명명 된 분기를 사용하면 분기 이름이 각 변경 집합에 포함 되므로 이력의 불변 부분이됩니다. 복제본을 사용하면 특정 변경 세트의 출처에 대한 영구적 인 기록 이 없습니다 .
즉, 클론은 분기 이름을 기록하지 않으려는 빠른 실험에 적합하며 명명 된 분기는 장기 분기 ( "1.x", "2.x"및 유사)에 적합합니다.
또한 단일 저장소는 Mercurial에서 여러 개의 가벼운 분기를 쉽게 수용 할 수 있습니다. 이러한 저장소 내 브랜치는 책갈피를 지정하여 쉽게 다시 찾을 수 있습니다. 다음과 같이 회사 저장소를 복제했다고 가정 해 보겠습니다.
[a] --- [b]
당신은 멀리 해킹 및 확인 [x]
과 [y]
:
[a] --- [b] --- [x] --- [y]
평균 누군가 풋 동안 [c]
및 [d]
저장소에, 그래서 당신이 당길 때이 같은 역사 그래프를 얻을 :
[x] --- [y]
/
[a] --- [b] --- [c] --- [d]
단일 저장소에는 두 개의 헤드가 있습니다. 작업 사본에는 항상 소위 작업 사본 상위 변경 세트 인 단일 변경 세트가 반영됩니다. 이것을 확인하십시오 :
% hg parents
그것이보고한다고 가정 해 봅시다 [y]
. 당신은 머리를 볼 수 있습니다
% hg heads
이것은보고 [y]
와 [d]
. 리포지토리를의 깔끔한 체크 아웃으로 업데이트하려면 [d]
간단히 ( [d]
의 개정 번호로 대체 [d]
)하십시오.
% hg update --clean [d]
그러면 해당 hg parents
보고서가 나타납니다 [d]
. 이것은 당신의 다음 커밋이 [d]
부모 가 될 것임을 의미합니다 . 따라서 메인 브랜치에서 발견 한 버그를 수정하고 변경 세트를 만들 수 있습니다 [e]
.
[x] --- [y]
/
[에이 비 씨 디이]
변경 세트 [e]
만 푸시하려면 다음을 수행해야합니다.
% hg push -r [e]
[e]
변경 세트 해시는 어디에 있습니까 ? 기본적으로 hg push
단순히 저장소를 비교하고 그 표시됩니다 [x]
, [y]
및 [e]
누락,하지만 당신이 공유하고 싶지 않을 수도 [x]
와 [y]
아직.
버그 수정이 영향을 미치는 경우이를 기능 분기와 병합하려고합니다.
% hg update [y]
% hg merge
그러면 저장소 그래프가 다음과 같이 보입니다.
[x] --- [y] ----------- [z]
/ /
[에이 비 씨 디이]
여기서 [z]
의 병합이다 [y]
하고 [e]
. 분기를 버릴 수도 있습니다.
% hg strip [x]
이 이야기의 주요 요점은 이것입니다. 단일 클론은 여러 개발 과정을 쉽게 나타낼 수 있습니다. 이것은 확장명을 사용하지 않고 "평범한 hg"에 항상 적용되었습니다. 하지만 북마크 확장 은 큰 도움이됩니다. 변경 세트에 이름 (책갈피)을 지정할 수 있습니다. 위의 경우 개발 헤드에 북마크를, 업스트림 헤드에 북마크를 추가해야합니다. Mercurial 1.6을 사용하여 책갈피를 밀고 끌 수 있으며 Mercurial 1.8에서 기본 제공 기능이되었습니다.
두 개의 클론을하기로 선택했다면, 개발 클론 한 후이 닮은 것 [x]
과 [y]
:
[a] --- [b] --- [x] --- [y]
업스트림 클론에는 다음이 포함됩니다.
[a] --- [b] --- [c] --- [d]
이제 버그를 확인하고 수정하십시오. hg update
업스트림 클론을 사용할 준비가되었으므로 여기에 있지 않아도됩니다 . 당신은 커밋하고 만듭니다 [e]
:
[a] --- [b] --- [c] --- [d] --- [e]
개발 복제본에 버그 수정을 포함 시키려면 다음을 수행하십시오.
[a] --- [b] --- [x] --- [y]
\
[c] --- [d] --- [e]
병합 :
[a] --- [b] --- [x] --- [y] --- [z]
\ /
[c] --- [d] --- [e]
그래프는 다르게 보일 수 있지만 구조는 동일하지만 최종 결과는 동일합니다. 클론을 사용하면 약간의 정신 부기를해야했습니다.
명명 된 지점은 실제로 선택 사항이므로 여기 그림에 나오지 않았습니다. 머큐리얼 자체는 몇 년 동안 두 개의 클론을 사용하여 개발되었으며 우리는 명명 된 분기를 사용하기로 전환했습니다. 우리는 'default'브랜치 외에도 'stable'이라는 브랜치를 유지하고 'stable'브랜치를 기반으로 릴리스를 만듭니다. 권장 워크 플로우에 대한 설명은 위키 의 표준 분기 페이지를 참조하십시오 .