2011-12-05 3 views
2

저는 Bazaar를 처음 접했습니다. Subversion과 git의 배경에서 Bazaar를 처음 접했습니다. 나는 몇 가지 기본 개념을 잘 알고 있다고 생각했지만 이미 첫 번째 커밋에서 걸림돌을 쳤다.Bazaar : 끌어 오기 - 병합 - 커밋 후 주류에 버블 병합

프로젝트는 Launchpad에서 호스팅됩니다. 나는 bzr branch으로 로컬 지사 ("working")를 만들었습니다. 나는 변경하고 새로운 파일을 추가하고 다른 파일을 개명했다. 잠시 동안 팀의 다른 사람이 변경 사항을 저지르고 푸시했습니다. 내가 로컬 내 변화를 bzr commit

3. Team Member A 
2. Me (trivial commit of .bzrignore) 
1. Original commit 

오늘 아침 :이 시점에서 커밋 역사는 다음과 같이 보였다. 커밋 번호는 3으로보고되었는데 서버와 동기화 할 때 잘못 조정했다고 생각했습니다. 내가 bzr merge했다

Using saved parent location: bzr+ssh://bazaar.launchpad.net/... 
bzr: ERROR: These branches have diverged. Use the missing command to see how. 
Use the merge command to reconcile them. 

: 나는 bzr pull을했을 때 나는이 메시지를 받았습니다. 충돌은 발견되지 않았지만 현지 지사에서 수정 된 파일 3 개가 남았습니다. 나는 그 사람들을 검사하고 저들에게 저에게 커밋 4로보고 된 코멘트를 저지른 바 있습니다. 그렇다면 아무런 오류도보고하지 않은 bzr push을했습니다.

이제 커밋 역사 (bzr log --include-merges)은 다음과 같습니다

4. My merge commit 
2.1.1 Team Member A 
3. My commit this morning 
2. My .bzrignore commit 
1. Original commit 

직렬화 트렁크 라인을 유지하고 이러한 거품을 병합 피하기 위해 여기에 높은 욕망이있다. (놀랍게도, Launchpad는 2.1.1 커밋을 표시하지 않으므로 필자는 그것을 덮어 쓴 것처럼 보입니다.)이 상황에서 가장 좋은 워크 플로는 이러한 거품을 피하기 위해 무엇입니까? 내가 먼저 뽑아야합니까? 다른 사람의 코드를 내 로컬 커밋되지 않은 변경 내용과 병합하지 않아도됩니다.

또한 rebase가 git에서 주로 사용되지만 Bazaar에서 일반적으로 승인되지 않은 것으로 보입니다. bzr-rebase 플러그인 사용을 피할 수 있다면 좋을 것입니다.

+0

아래 답변에 더하여, 해당 분기의 config에 append_revisions_only 옵션을 설정하여이 문제를 막을 수도 있습니다. 이 설정을 사용하면 예제와 같이 수정 순서를 재정렬 할 때 커밋을 진행할 수 없습니다. – dOxxx

+0

그래, 나는 내 게시 후 이것을 제안하는 답변을 보았다. http://stackoverflow.com/questions/5413602/monotonically-increasing-bazaar-trunk-revision-numbers 그러나 Bazaar의 베스트 프랙티스는 "옳은 것"에 대한 우리 자신의 생각에 부합해야합니다. –

+0

기본적으로 append_revisions_only가 켜져 있어야하는지 여부에 대한 논쟁이 실제로 있습니다. 왜냐하면 꺼짐 동작이 거의 항상 사용자를 놀라게하기 때문입니다. 따라서 해킹이나 비표준 동작으로 생각하지 마십시오. 미래에 다시는 놀라지 않을 것 같아요. – dOxxx

답변

1

메인 라인 기록을 깨끗하게 유지하는 한 가지 방법은 메인 라인 브랜치의 미러를 유지하면서 별도의 기능 지점에서 작업하는 것입니다. 여기서 나무가 작동하는 나뭇 가지를 추측하고 있지만 디스크 공간을 절약하기 위해 나무가없는 가지와 체크 아웃을 사용할 수 있습니다.

// setup the mirror branch 
cd <mirror directory> 
bzr pull <mainline> 

// setup a feature branch 
cd <feature directory> 
bzr branch <mirror directory> . 

// work on your feature branch 
bzr commit -m "Did some work" 
... 
bzr commit -m "Did some more work" 

// ready to commit your feature 
cd <mirror directory> 
bzr pull 
bzr merge <feature directory> 

// your integration testing is done 
bzr commit -m "My shiny feature" 
bzr push 
+0

쉬운 방법은 bzr-colo 플러그인을 사용하는 것입니다. bzr-colo 플러그인을 사용하면 같은 작업 트리에 "같은 위치에있는"브랜치가 생깁니다. – dOxxx

+0

간결한 답변 주셔서 감사합니다. 당신은 바자 (Bazaar) 방식을 받아 들일 필요가 있다는 의심을 확인했습니다. 또한, 나는이 웹 페이지를 지적했다.이 웹 페이지는 당신의 대답과 비슷한 것을 제안하고 그것을 이렇게하는 것에 대한 몇 가지 정당성을 제시한다 : http://doc.bazaar.canonical.com/bzr.2.4/en/user-guide/zen. html # hierarchical-history-is-good –