2010-01-11 3 views
17

매우 간단한 작업으로 bzr을 사용하고 있습니다 : GNU Emacs 개발 버전을 얻는 중입니다. 처음 bzr branch 이후에, 나는 내 로컬 버전을 최신 상태로 유지하고 싶다. bzr pullbzr merge에 대한 설명서를 읽었지만 이해할 수 없었습니다. 며칠 동안 bzr merge을 시도한 결과 bzr merge은 종종 해결할 수없는 충돌을 일으키는 것으로 나타났습니다. 로컬 변경 작업을 수행하지 않았습니다. bzr pull이 권장되는 방법입니까?bzr pull 대 bzr merge

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (merge) 
      \     \ 
local:  \--> A (no change) \--> why conflicts? 

내가 자식과 darcs을 이해하지만 BZR에 대한 지식이 없다 :

EDIT 1은 (Chris Conway에서 도난 다이어그램을 추가). git 또는 darcs에 대한 유추가 많은 도움이 될 것입니다.

편집 2 : 은 checkout으로 만 작동합니까? branchupdate을 쓰는 것은 아무 것도하지 않는 것 같습니다.

+1

. –

답변

35

변경 사항이 없습니다. 변경 사항에 유의하십시오. 은 으로 권장됩니까?

예, 사용하기에 적합한 명령은 bzr pull입니다. pull은 원격 원본 분기를 가져 와서 이전 개정에서 로컬 대상 분기로 모든 변경 내용을 복사합니다. (I는 "소스"를 의미하는 것으로 여기에 "원격"와 "지역"을 사용하여 "대상을."두 가지 할 것, 심지어 두 지역의 지점을.)

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (pull) 
      \     \ 
local:  \--> A (no change) \--> D 

pull에만 작동하는 경우 두 가지의 천국 ' 즉 대상의 개정판이 원본의 오래된 개정판 인 경우 분기됩니다. push은 반대의 작업입니다. 로컬 브랜치의 변경 사항을 이전 버전의 원격 브랜치에 복사합니다. 원격 지점에서 분기 한 지역 지점에 대한 변경 사항을 복사 할 때

remote: A  (no change)  --> C 
     \     /
     (branch)    (push) 
      \    /
local:  \--> A --> B --> C 

merge

사용됩니다. 여기

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (merge) 
      \     \ 
local:  \--> A --> X --> Y --> Z 

, ZD에서 변경 Y에서의 모든 변경을 포함한다. 이 경우 pull을 사용할 수 없습니다. 새 병합 된 개정판을 저장하려면 merge 뒤에 commit을 입력해야하지만 끌어 오기를 수행하면 저장된 개정판 지점으로 자동으로 분기됩니다.

checkout을 사용하면 CVS/SVN과 유사한 모드에서 bzr을 사용할 수 있습니다. 로컬 브랜치는 원격 브랜치에 "연결"됩니다. commit은 자동으로 push ed가됩니다. 원격 브랜치가 분기되면 커밋이 실패합니다. update은 "attached"원격 브랜치의 merge입니다.

+0

좋은 ascii 예술, 감사합니다. 나에게 불명확 한 점은, 지역 변경이 없다하더라도 '병합'으로 인해 갈등이 발생하는 이유는 무엇입니까? –

+2

첫 번째'merge'에도 충돌이 발생합니까 아니면 두 번 이상 merge 된 후에 만 ​​충돌합니까? 각각의 '합병'후에 '커밋'합니까? 병합 알고리즘은 복잡하며 충돌없이 해결할 수있는 것이 종종 놀라운 것입니다. –

+2

한 번 이상 병합했습니다. 나는 각각의 합병 후에'커밋 '하지 않았다. 이 모든 것이 이제는 의미가 있습니다. –

4

병합은 복사본이 아닌 두 개의 다른 분기를 병합하기위한 것입니다 (로컬 및 원격). 끌어 오기를 사용하십시오.

1

$ bzr help pull

목적 : 다른 분기의 거울이 지점을 돌립니다.

--overwrite 분기 간의 차이를 무시하고 무조건 덮어 씁니다.

로컬 변경 사항을 바꾸고 지사 이 원격 수정본과 일치하도록하려면 pull --overwrite를 사용하십시오. 심지어 두 개의 가지가 분기 된 경우 도 작동합니다.

은 그래서 당신은 사용할 수 있습니다 : 나는 이맥스 태그를 제거하고 그 이맥스 자신과 더는 이후 버전 컨트롤을 추가하고있어 $ bzr pull --overwrite

관련 문제