Mercurial : 한 repo에서 분기간에 하나의 파일 병합
-
21-08-2019 - |
문제
HG Repo에 두 개의 브랜치가있는 경우 Cheengeet의 다른 모든 파일을 병합하지 않고 하나의 파일 만 다른 브랜치와 병합하는 방법은 무엇입니까?
전체 변경 사항 대신 특정 파일 만 병합 할 수 있습니까?
해결책
경고 : @martin_geisler가 권장하는 바와 같이 이러한 "더미 병합"은 나중에 두 가지를 진정한 병합하고 싶다면 실제로 당신을 엉망으로 만들 수 있습니다. 더미 병합이 기록되어 더미 병합을 한 지점에 합병한다고 말합니다. 변경 사항을 볼 수 없습니다. 또는 다른 지점에 합쳐지면 다른 지점의 변경 사항이 취소됩니다.
원하는 것은 한 분기에서 다른 분기로 전체 파일을 복사하는 것입니다. 간단히 할 수 있습니다.
hg update -r to-branch
hg revert -r from-branch file
hg ci -m 'copied single file from from-branch to to-branch
해당 파일의 다른 부분을 선택하려면 "hg record"
유용합니다.
방금 홈 디렉토리 .hgignore 에서이 작업을 수행했습니다.
두 가지가 모두 보관하고자하는 파일을 변경 한 경우, 더러운 트릭은 HG 병합을 사용하여 두 가지를 병합하여 다른 지점에서 아마도 확인한 다음 단일 파일을 복사하는 것입니다. 병합과 지점 사이 :
hg update -r to-branch
branch merge-branch
hg merge -r from-branch
hg ci -m 'temp merge to be discarded"
hg update -r to-branch
hg revert -r merge-branch single-file
hg ci -m 'merged single-file from from-branch to to-branch"
hg strip merge-branch
언급 할 가치가 있습니다. "분기간에 단일 파일을 복사하는 방법"(또는 개정판 또는 개정에서 Merge로 또는 ....)은 "HG Revert"입니다. 즉
hg update -r Where-you-want-to-copy-to
hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
...
hg ci
어떤 이유로 나와 내 동료들 중 일부는 이것을 찾습니다. 매우 혼란. "리버스"== "복사"... 일부 사용 패턴에 적합하지만 전부는 아닙니다.
다른 팁
아니요. Mercurial은 변경 사항에 따라 작동합니다.
하지만 당신은 "더미 병합"지점 중 하나에서 들어오는 변화를 무시하는 경우. 커밋하기 전에 원하는 상태로 선택한 파일을 되돌릴 수 있습니다.
% HGMERGE=internal:local hg merge # keep my files
% hg revert --rev other-branch a.txt # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'
어쩌면 그것은 당신에게 약간 도움이 될 것입니다.
나는 외부 도구를 사용하는 것만 사용합니다 vimdiff
병합하고 싶은 두 파일을 분해하고 병합합니다. 이것의 장점은 파일의 일부에서 선택적 편집을 할 수 있다는 것입니다. 예 :
hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging
이렇게하려면 .hgrc에서 외부 도구를 활성화해야합니다. 즉,이 라인을 추가하는 것을 의미합니다.
[extensions]
hgext.extdiff =