문제

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 =  
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top