2011-03-03 5 views
30

별도의 저장소에서 분기를 현재로 병합하는 방법을 알아 내려고하고 있습니다.별도의 저장소에서 Mercurial 분기 병합

나는 다음과 같습니다

$ hg fetch -y ../PJT1 -r foodog -m "this is a test" 

을 :

PJT1 - 내가 다음을 수행, 지점 기본을 PJT2에서

을 포함 - 가지 기본 및 foodog

PJT2 을 포함 이제 PJT2를 살펴보면 올바른 파일과 변경 사항을 볼 수 있습니다. 내가 hg branches을 할 경우, 나는, 나는 다음과 같은 얻을 :

[[email protected] pjt2]$ hg branch 
foodog 

어떻게 PJT2의 default 지점에 PJT1의 foodog 지점에서 내용을받을 수 있나요 :

[[email protected] pjt2]$ hg branches 
foodog       1:c1e14fde816b 
default      0:7b1adb938f71 (inactive) 

hg branch 다음과 같은 계시?

답변

55

당신은 병합해야하지만 지점에 대한 변경 사항은 항상 음식점에있을 것이라는 점을 명심하십시오. 가지가 가지 않고 숨길 수 있습니다. 명령이 순서는 당신이 요구하는지 무엇을 얻을 것이다만큼 가까운 : 당신은 단지 그들에 머리가 나뭇 가지를 보여주는 hg branches --active을하지 않는 병합 후

cd PJT2 
hg update default # just in case you were somewhere else 
hg pull ../PJT1 -r foodog # that gets you foodog 
hg merge foodog # that merges the changes into default 
hg commit # commit the merge 
hg update foodog # go to the most recent change in foodog (note: it is not a 'head') 
hg commit --close-branch 

hg branches 여전히 foodog 표시됩니다. commit --close-branch 뒤에 hg branches --closed을 입력하지 않으면 foodog이 표시되지 않습니다.

머큐리얼의 브랜치는 전혀 의도적으로 사라지지 않으므로 (디자인 특징) 평생 쓸만한 것들, 예를 들어 release-1.0 또는 stable에 대해서만 예약되어 있기 때문입니다. 버그 나 기능과 같이 오래 가지 못했던 노력 대신 북마크를 사용하는 것이 좋습니다. 이 두 가지를 비교하면 다음과 같습니다. http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

0

rebase 확장자를 사용해 볼 수도 있습니다. 그것은 다음과 같이 보일 것입니다 :

hg fetch -y ../PJT1 -r foodog -m "this is a test" 
hg rebase --source <sRev> --dest <dRev> 

REBASE 동작이 변경 집합을 sRev 모든 자손을 달린 것을 빼낸 및 DREV을 변경 집합 변경 사항의 그룹을 적용합니다. 기본적으로 변경 내용은 기본 분기에 적용됩니다. 따라서, 귀하의 경우, sRev 당신이 그들을 적용 할 기본 변경 집합이 될 것이다 지점 foodogDREV의 첫 번째 변경 집합이 될 것입니다.

마지막으로 이것을 대체하고 원본 분기 이름을 보존하려면 rebase 옵션 --keepbranches을 사용할 수 있습니다. 귀하의 질문은 이것이 당신이 원하지 않는 것과 정확히 일치 함을 나타내지 만 여전히 주목해야합니다.

관련 문제