Subversion'da (ve CVS'de) depo her şeyden önce gelir. Git ve mercurial'da aynı şekilde bir depo kavramı yoktur; buradaki değişiklikler ana temadır.
+1
CVS güçlük / SVN bu sistemler yok olmasından kaynaklanır değil
değişikliklerin ebeveynliğini hatırlıyorum. Git ve Mercurial'de, bir commit birden fazla çocuğa sahip olmakla kalmaz, aynı zamanda birden fazla ebeveyni de olabilir!
Bu, grafik araçlardan birini kullanarak kolayca gözlemlenebilir gitk
veya hg
view
. Aşağıdaki örnekte, 2 numaralı dal, A işleminde # 1'den çatallanmıştır ve o zamandan beri bir kez birleştirilmiştir (M'de, B işlemiyle birleştirilmiştir):
o---A---o---B---o---C (branch #1)
\ \
o---o---M---X---? (branch #2)
A ve B'nin iki çocuğu varken M'nin iki ebeveyni olduğuna dikkat edin . Bu ilişkiler bilgi havuzuna kaydedilir . Diyelim ki, 2 numaralı şubenin geliştiricisi şimdi 1 numaralı şubedeki en son değişiklikleri birleştirmek istiyor, aşağıdaki gibi bir komut verebilir:
$ git merge branch-1
ve araç otomatik olarak tabanın B olduğunu bilecektir - çünkü 2 numaralı ipucunun atası olan M işleminde kaydedilmiştir - ve B ile C arasında olanları birleştirmesi gerektiğini CVS bu bilgiyi kaydetmez. , SVN de 1.5 sürümünden önce değildi. Bu sistemlerde grafik şöyle görünür:
o---A---o---B---o---C (branch #1)
\
o---o---M---X---? (branch #2)
burada M bir dev senet bittikten sonra, olduğu, M. Not üzerine uygulanan, A ve B arasındaki olanlardan, bir tamamlama "ezilmiş" hiç bir iz E burada (potansiyel insan tarafından okunabilir yorumlar hariç) ne kaynaklandığını, ne de kaç işlemin birlikte çökertildiğini - tarihi çok daha anlaşılmaz hale getiriyor.
Bir birleştirme taban ilk birleştirme sırasında ne olduğunu anlamaya sahiptir (ve bir: Daha da kötüsü, ikinci birleştirme gerçekleştirirken bir kabus haline sahiptir için biliyorum
ilk etapta bir birleştirme yaşandığını!), O zaman mevcut A..B'yi M'nin üzerine tekrar oynatmaya çalışmaması için araca bilgi verin. Yakın işbirliği içinde çalışırken tüm bunlar yeterince zordur, ancak dağıtılmış bir ortamda kesinlikle imkansızdır.
(İlişkili) bir sorun şu soruyu yanıtlamanın bir yolu olmamasıdır: "X, B içerir mi?" burada B, potansiyel olarak önemli bir hata düzeltmesidir. Öyleyse, neden birleştirme zamanında bilindiği için bu bilgiyi commit'e kaydetmeyelim !
P.-S. - SVN 1.5+ birleştirme kayıt becerileriyle ilgili deneyimim yok, ancak iş akışı dağıtılmış sistemlerden çok daha yaratıcı görünüyor. Eğer gerçekten durum böyleyse, muhtemelen - yukarıdaki yorumda belirtildiği gibi - odak, değişikliklerin kendisinden ziyade depo organizasyonuna konulduğu içindir.