2010-01-11 15 views
17

Çok basit bir görev için bzr kullanıyorum: GNU Emacs'in geliştirme sürümünü alma. İlk bzr branch'dan sonra, yerel sürümümü güncel tutmak istiyorum. bzr pull ve bzr merge belgelerini okudum, ancak anlamıyorum. Birkaç gün boyunca bzr merge'u denedim ve bzr merge'un genellikle çözümlenemeyen çakışmalarla sonuçlandığını gördüm. Yerel değişiklik yapmadığımı unutmayın. bzr pull önerilen yoldan mı?bzr pull vs bzr birleştirme

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

Ben git ve Darcs anlamak, ancak BZR hakkında hiçbir bilgiye sahip:

DÜZENLEME 1 (Chris Conway çalınan bir diyagram eklenir). Git veya darcs'a olan benzerlikler çok yardımcı olacaktır.

DÜZENLEME 2: update sadece checkout çalışmak gerekiyordu? Birnumaralı telefondan update yapmak hiç bir şey yapmıyor gibi görünüyor.

+1

. –

cevap

35

Yerel değişiklikleri yapmadığımı unutmayın. bzr pull önerilir yolu?

Evet, bzr pull kullanımınız için uygun komut gibidir. pull, uzaktaki bir kaynak dalını alır ve daha eski bir revizyondaki tüm değişiklikleri yerel hedef şubesine kopyalar. (I "kaynak" anlamına gelecek şekilde buraya "Uzak" ve "yerel" kullanmak "Hedefi." Herhangi iki dal yapacak, hatta iki yerel şubesi.)

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

A pull sadece çalışıp çalışmadığını iki şube cenneti' t sapma, yani hedefin revizyonu, kaynağın eski bir revizyonu ise. push tam tersi işlemdir: yerel bir şubedeki değişiklikleri daha eski bir revizyonda uzak şubeye kopyalar. Uzak şubesinden saptığını yerel şubesine değişiklikleri kopyalamak istediğinizde

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

A merge

kullanılır. İşte

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

, ZD gelen değişiklikleri ve Y gelen tüm değişiklikleri kapsar. Bu durumda pull mümkün değildir. Yeni birleştirilmiş revizyonu kaydetmek için merge'dan sonra commit'u kullanmanız gerektiğini unutmayın, oysa dalı otomatik olarak kaydedilmiş bir revizyon noktasına getirir.

A checkout, CVS/SVN'ye benzer bir modda bzr kullanmanıza izin verir: yerel şube uzak bir şubeye "eklenir"; commit s otomatik olarak push ed olacaktır; Uzak şube ayrıldıysa, taahhüt başarısız olur; Bir "update" ekli "uzak daldan sadece bir merge'dur.

+0

Güzel ascii sanat, teşekkürler. Benim için belirsiz olan şey, 'birleştirme', yerel bir değişiklik olmasa bile çakışmalara neden neden oluyor? –

+2

İlk "birleştirme" de, ya da sadece bir kereden fazla birleştirildikten sonra bile çakışmaların var mı? Her 'birleştirme' sonra 'yapar'? Birleştirme algoritması karmaşıktır ve çatışma olmadan neleri çözebileceği ve çözemediği çoğu zaman şaşırtıcıdır. –

+2

Bir kereden fazla birleştirildikten sonra. Ben her 'birleştirme' sonra taahhüt etmedim. Bütün bunlar şimdi mantıklı. –

4

Birleştirme, kopyalar (yerel ve uzak) değil, iki farklı dalı birleştirmek içindir. Çekme kullanın.

1

$ bzr help pull

Amaç: Başka bir dalı bir aynaya bu dalını çevirin.

--overwrite Dallar arasındaki farkları dikkate almayın ve koşulsuz olarak üzerine yaz.

Yerel değişikliklerinizi değiştirmek ve yalnızca şubenizin uzaktan kumandayla eşleşmesini istiyorsanız, pull - kapsayıcı kullanın. Bu, eğer iki dal ayrılırsa da çalışacaktır.

böylece kullanabilirsiniz: Ben emacs etiketi kaldırarak ve bu Emacs kendisi yapmak için daha fazla olduğundan versiyon-kontrolünü ekliyorum $ bzr pull --overwrite

İlgili konular