다른 DVCS에서 Mercurial로 변환하려고합니다. 나는 Mercurial이 다른 DVCS가 완벽하게 합리적인 것을 찾도록 내버려 두지 않는 상황을 발견했다. -> 포크 "병합 할 필요가 없습니다"와 hg 병합
- 포크
- 포크
- 병합 트렁크 작업을 수행합니다
REPO에서 사용자 중 한 명이 같이 작업하는 습관을 것 같다
- 병합 포크 -> 트렁크
모두 완벽하게 reasonab 보인다 르. 단, 트렁크 이 사용자가 테스트하는 동안을 진행하지 않은 경우 hg는 'abort : no merge'라는 최종 병합을 거부합니다. --force
도움이되지 않습니다.
나는 다음 테스트 케이스로이를 복제 할 수 있습니다 :
echo "Test data" > file
hg add file
hg commit file -m "Ancestor"
# rev 0
echo "Trunk" > file
hg commit file -m "Trunk"
# rev 1
hg checkout 0
echo "Branch" > file
hg commit file -m "Branch"
# rev 2
hg merge --tool internal:local 1
hg commit -m "Merge trunk to branch"
# rev 3
hg checkout 1
hg merge --tool internal:local 3 # <--- fails
hg commit -m "Merge branch to trunk"
를 최종 병합 트렁크는 이제 새로운 버전 4와 버전 3에서 그래서 트렁크, 두 병합 사이에 전진 그래서 테스트를 수정하는 경우 그것으로 병합, 다 잘 작동합니다.
이것은 분명히 모든 표준 워크 플로입니다. 저는 직접이 작업을 수행합니다. 그렇다면 왜 이것이 효과가 없습니까?
업데이트 :
이 테스트 케이스가 작동합니다
이echo "Test data" > file
hg add file
hg commit file -m "Ancestor"
hg branch trunk
# rev 0
echo "Trunk" > file
hg commit file -m "Trunk"
# rev 1
hg checkout 0
hg branch branch
echo "Branch" > file
hg commit file -m "Branch"
# rev 2
hg merge --tool internal:local 1
hg commit -m "Merge trunk to branch"
# rev 3
hg checkout 1
hg merge --tool internal:local 3
hg commit -m "Merge branch to trunk"
이 정확하게 첫 번째 테스트의 경우와 동일한 코드이다, 트렁크와 포크를 제외하고 지금은 명시 적으로 단지보다는 지형 ad-hoc 헤드 사용. 모든 병합 및 체크 아웃은 이전과 동일한 수정 버전을 사용합니다. 외관상으로는 분지는 마술이다.
다른 DVCS 은 ad-hoc 헤드를 사용하는이므로 브랜치 정보가 없기 때문에 불행히도 실제 코드에서 브랜치를 사용할 수 없습니다. 나는 모든 포크에 대해 가지를 가짜로 만들고 싶지 않습니다.
명시 적 분기를 사용하지 않고 Mercurial에서 어떻게하도록 할 수 있습니까?
나는 동의하지 않는다. 나는 그것을 병합이라고 생각한다. 나는 그것을 증명할 수있다. 업데이트를 보라. 명시 적 분기에 각 포크를 배치함으로써 Mercurial은 DAG가 정확히 이전과 동일한 형태 임에도 불구하고 병합을 수행하게되어 매우 행복합니다. 불행히도 위에 설명한 이유 때문에 명시 적 분기를 사용할 수 없습니다 ... –
분기 정보를 추가하면 여러 동작이 변경됩니다 (위에서 언급 한 업데이트의 동작 포함). 이 경우 병합은 새로운 분기 정보를 전달하는 새로운 커밋을 만듭니다. 처음에 설명하는 경우 새 커밋은 의미가 없습니다 (파일 변경, 메타 데이터 변경 등 없음) 정확히 여기서 무엇을하려고합니까? – Marmoute