2009-07-03 3 views

답변

50

경고 : @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 merge를 사용하여 두 브랜치의 병합을 생성하는 것입니다 (아마도/다른 브랜치에서도 가능할 것입니다). 병합과에 분기 사이에 하나의 파일을 복사 :

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 

그것은 언급 할 가치가있다 "나뭇 가지 사이에 단일 파일을 복사"하는 방법이 (또는 수정 또는 개정에서 병합, 또는 ... .)은 "hg 되돌리기"입니다. 나는. 어떤 이유로 내가 들어

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 

, 내 동료 몇몇이 아주이 혼란을 찾을 수 있습니다. "revert"== "copy"... 일부 사용 패턴에서는 의미가 있지만 전부는 아닙니다.

+2

마틴 가이슬러 (Martin Geisler)가 준 파일입니다. 실제로 파일을 병합하지는 않지만 복사하는 것이 대부분의 작업을 원하는 것이며 분기를 엉망으로 만들지는 않을 것입니다. – noamik

+2

이것은 하나의 파일을 브랜치에서 그러나 트렁크에 대한 체크인이 파일의 기록에 나타나지 않는 것은 불행한 일입니다. –

+0

안녕하세요, 답변 해 주셔서 감사합니다. 문제가 발생했습니다. 원본 분기에 내 기본 분기에 존재하지 않는 파일이 들어 있지만 분기의 나머지 부분을 병합하지 않고 다시 복사하고 싶습니다. 내가 설명한 내용을 수행하려고하면 '해당 파일이 없습니다'라는 메시지가 나타납니다. 제안 사항이 있으십니까? – propagated

18

아니요. Mercurial은 체인지 세트 방식으로 작동합니다.

그러나 지점 중 하나에서 들어오는 변경 사항을 무시하는 "dummy merge"을 수행 할 수 있습니다. 커밋하기 전에 선택한 파일을 원하는 상태로 되 돌리면됩니다.

% 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.' 

아마도 도움이 될 것입니다.

+2

경고 : 이러한 "더미 병합"할 수있는 정말 엉망 당신에게 최대 , 나중에 두 지점의 진정한 합병을 원한다면. 더미 병합이 기록되며 더미 병합을 수행 한 분기로 병합한다고 말하면 변경 내용을 볼 수 없습니다. 또는 다른 브랜치에 병합하면 다른 브랜치의 변경 사항이 취소됩니다. // 전체 파일을 한 브랜치에서 다른 브랜치로 복사하는 것이 전부라면 단순히 "hg update -r to-branch; hg revert -r file"// 해당 파일의 다른 부분을 선택하려면 , "hg record"가 유용합니다. // 나는 홈 디렉토리의 .hgignore에서이 작업을 수행했다. –

+0

더러운 속임수는 hg merge를 사용하여 두 브랜치의 병합을 만들고이를 확인한 다음 "hg update -t ​​to-branch; branch merge-branch를 사용하여 병합과 브랜치간에 단일 파일을 복사하는 것입니다 ; hg merge -r from-branch; hg ci -m '임시 병합은 무시됩니다. "; hg update -r to-branch; hg revert -r merge-branch 단일 파일 -U-want; hg ci -m '하나의 파일을 브랜치에서 브랜치로 병합했습니다'; hg strip merge-branch –

+1

오, 이런, 내 의견을 진짜 대답으로 쓸 수도 있겠지. –

1

vimdiff과 같은 외부 도구를 사용하여 병합하고 병합하려는 두 파일을 비교하면됩니다. 이 기능의 장점은 파일의 일부분을 선택적으로 편집 할 수 있다는 것입니다. 예 :

hg update -r branch-merging-to 
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging 

방금이 라인을 추가하는 것을 의미하여 .hgrc에서 외부 도구를 사용하도록 설정해야합니다 이렇게하려면 다음을 수행

[extensions] 
hgext.extdiff = 
관련 문제