2010-03-05 5 views
3

나는 Bazaar를 사용하며 그것을 좋아합니다. 일반적으로, 나는 다른 지점을 만들고 따로 관리합니다. 나는 모든 지점이 저장소에 저장 될 수 있다는 것을 발견했습니다. 내가 올바르게 이해한다면, 이것은 지사 간의 공통된 조상이 공유되기 때문에 메모리를 절약하고 속도를 증가시켜야합니다. Q1 :이 권리를 이해합니까?BZR 저장소를 이해하려고 시도 중입니다.

또 다른 것은 내가 그것을 사용하려고 할 때 나는 정말로 그것을 얻지 못하는 몇 가지 문제를 발견했다는 것입니다. 여기 내가 시도하는 방법입니다. 내가 bzr pull ../../trunk을 할 경우 지금부터

bzr init-repo --trees TestBzrRepo 
cd TestBzrRepo 
bzr init trunk 
mkdir branches 
cd branches 

bzr branch ../trunk b01-Add-file2-f 
echo 'This is file 2' > file2.f 
bzr add file2.f 
bzr commit -m "Add file 2" 

cd ../../trunk 
echo 'This is file 1' > file1.f 
bzr add file1.f 
bzr commit -m "Add file 1" 

cd ../branches/b01-Add-file2-f

, 내가 가지고 :

bzr: ERROR: Branches have no common ancestor, and no merge base revision was specified.

bzr conflicts 반환 아무것도 나는 여전히 당기거나 병합 할 수 없습니다 :

bzr: ERROR: These branches have diverged. Use the missing command to see how. 
Use the merge command to reconcile them.

내가 bzr merge ../../trunk을 할 경우, 내가 가진 없습니다.

여기서 어떻게됩니까? 그리고 다음에해야 할 일. 도와주세요.

미리 감사드립니다.

답변

3

예, 저장소는 공통 기록에 대해 저장소가 저장소를 공유하도록 허용합니다. 관련 기록이있는 지점이 많으면 큰 도움이됩니다.

+0

주셔서 감사합니다. – NawaMan

5

병합 오류의 이유는 두 번째 분기를 만들기 전에 수정본을 만들지 않았기 때문이라고 생각합니다. bzr qlog TestBzrRepo은 상황을 이해하는 데 도움이 될 수 있습니다.

시도 bzr merge ../../trunk -r 0..-1.

+0

공유 수정 사항이 없다는 것이 맞습니다 (실험을 너무 단순화 함). 그래서 지금 나는 그것을 작동하게하고 나는 그것을 더 잘 이해한다고 생각합니다. 그러나 개정 번호로 병합을 실행하는 것에 대한 제안은 작동하지 않습니다. – NawaMan

+1

명령어는'bzr merge ../../trunk -r 0 ..- 1'이어야합니다. 수정 범위를 지정하는 범위는 0 (히스토리 시작)에서 최신 개정 (-1)까지이며 두 개의 관련없는 분기를 병합 할 수 있습니다. – bialix

+0

수정 bialix 주셔서 감사합니다. 나는 코멘트를 고쳤다. –

5

bzr init-repo공유 저장소을 만듭니다. 공유 저장소에서 모든 수정본은 저장소의 .bzr 디렉토리에 저장되고 분기의 .bzr 디렉토리에는 수정본 자체가 아닌 분기 메타 정보 만 저장됩니다. 이렇게하면 분기 디렉토리가 매우 가벼워지고 분기의 공통된 개정이 중복되지 않습니다. 당신이 공유 사용되지 않은 경우

the-project/.bzr   -- only revisions are stored here, no branch info 
the-project/trunk/.bzr -- only branch info is stored here, no revisions 
the-project/branch1/.bzr -- only branch info is stored here, no revisions 
the-project/branch2/.bzr -- only branch info is stored here, no revisions 

:

bzr init-repo the-project  # create shared repo 
bzr init the-project/trunk # create a branch inside shared repo 
cd the-project/trunk   # cd to branch dir 
cp -r /path/to/files/* .  # copy the project's files into the branch 
bzr add      # tell bazaar to add everything to version control 
bzr commit -m 'added files' # commit the changes (add files) 
bzr branch . ../branch1  # create another branch from the current one 
bzr branch . ../branch2  # create another branch from the current one 

그런 다음 레이아웃의 디렉토리는 다음과 같이 작동합니다 :

의 우리가 이런 식으로 내부 공유 저장소 및 지점을 생성한다고 가정 해 봅시다 저장소는 상황이 매우 다를 수 있습니다. 예를 들면 다음과 같습니다.

bzr init trunk # create a branch inside shared repo 
cd the-project-trunk   # cd to branch dir 
cp -r /path/to/files/* .  # copy the project's files into the branch 
bzr add      # tell bazaar to add everything to version control 
bzr commit -m 'added files' # commit the changes (add files) 
bzr branch . ../branch1  # create another branch from the current one 
bzr branch . ../branch2  # create another branch from the current one 

개정이 3 가지에서 중복됩니다이 경우

trunk/.bzr -- revisions + branch info are stored here 
branch1/.bzr -- revisions + branch info are stored here 
branch2/.bzr -- revisions + branch info are stored here 

: 경우 (NO 공유의 repo) 레이아웃의 디렉토리는 다음과 같이 작동합니다입니다.

bzr pull은 현재 브랜치가 다른 브랜치 뒤에 일부 개정이기 때문에 유용하기 때문에 누락 된 수정 내용을 직접적으로 추가 할 수 있습니다. 현재 브랜치에 다른 브랜치가없는 리비젼이 있다면, 여러분의 예제에서와 같이 pull이 실패합니다.이것은 완벽하게 정상이며 이러한 상황에서의 해결책은 bzr merge과 정상적인 병합을 수행하는 것입니다.

bzr merge 두 개의 분기 (트렁크 및 다른 분기)에 공통된 수정본이 없으므로 예제에서 실패합니다. 이것은 트렁크에서 분기 한 시점에 완전히 비어 있었기 때문에 수정 된 사항이 없었기 때문입니다. 두 가지 지점은 완전히 독립적이며 절대적으로 공통점이 없습니다.

비 관련 분기를 bzr merge ../../trunk -r0..-1의 설명에 설명 된 @bialix로 결합 할 수는 있지만 이것이 귀하의 의도라고 생각하지 않습니다. 적어도 개정이 1 인 브랜치에서 분기하는 현실적인 유스 케이스에서는 개정이없는 트렁크에서 분기하는 것이 의미가 없으므로 그러한 오류가 발생하지 않고 병합이 예상대로 작동합니다.

관련 문제