SVN birleşmelerinde bu kadar zor olan ne?


28

Olası Çoğalt:
Ben bir Subversion geekiyim, neden Mercurial, Git veya başka herhangi bir DVCS'yi göz önünde bulundurmalıyım?

Arada bir, birisinin dağıtılmış sürüm kontrolünün (Git, HG) merkezi sürüm kontrolünden (SVN gibi) doğal olarak daha iyi olduğunu, çünkü SVN'de birleşmenin zor ve acı verici olduğunu duyduğunu duyarsınız. Şey SVN'de birleştirilmesi ile herhangi bir sorun olmadı ve sadece hiç bu iddiayı duymak beri, bu bana hatırlatmak eğilimi gerçek SVN kullanıcılar tarafından DVCS savunucuları tarafından yapılan ve değil olmalarının sonucudur televizyonda o iğrenç reklamlar nerede Gürültüsüz oyuncularla zaten ihtiyacınız olmayan bir şeyi satmaya çalışın, zaten sahip olduğunuz ve iyi çalışan bir şeyin kullanımı inanılmaz derecede zor.

Ve kaçınılmaz olarak ortaya çıkan kullanım durumu, yine o strawman ürününün reklamlarını hatırlatan bir şubeyi tekrar birleştiriyor; Eğer ne yaptığınızı biliyorsanız, bir şubeyi ilk önce yeniden birleştirmemelisiniz (ve asla yapmak zorunda kalmamalısınız). (Tabii ki temelde yanlış ve aptalca bir şey yaparken yapmak zordur!)

Öyleyse, gülünç strawman kullanım durumunun iskonto edilmesi, DVNS sisteminde birleşmeden daha zor olan SVN birleşmesinde neler var?


6
Henüz aylarca şubesinin birleştiği ve dağıtılmış versiyon kontrolü kullandıkları bir ortamda çalışıyorum. Çalıştığım tek yer bu kadar uzun ömürlü şubelerdi TFS / Subversion. Bu kadar uzun süren şubelerin DVCS'lerle de birleşmesinin zor olacağını bekliyorum.
Oded

13
@MasonWheeler Ben şaşırdım. O zaman ne için VCS kullanıyorsunuz? Tavsiye edilen uygulamalardan birinin özellik dallarına sahip olduğunu gördüm ve okudum. Bu durumda bagaja geri dönmek zorunludur. Yoksa bir şeyi yanlış mı anladım? (evet, ağaç metaforu kırılır, ancak IMO ile başlamak için bu kadar kullanışlı değildi)
Andres F.

9
@MasonWheeler: Bence ağaç benzetmesini tam anlamıyla biraz fazla alıyorsun.
whatsisname,


8
@MasonWheeler trunk'a geri dönmeyi hiç duymamışsanız, kaç farklı geliştirme ortamına sahip oldunuz? Bazı dükkanların sabit gövdesi ve deneysel şubeleri vardır; bu durumda kirazın başarılı çıkması stabil olanı geri almak düzenli bir olaydır.
Ekim'de

Yanıtlar:


25

Çünkü svn, iki dalın en son ortak atalarını doğru bir şekilde belirlemek için uygun veri yapılarına sahip değildi. Bu, yalnızca bir kez birleştirilen bir dal için çok önemli değildir, ancak birkaç dalın birden çok kez birleştirildiği durumlarda çok fazla hatalı birleştirme çatışmalarına neden olabilir.

Svn'yi çok yakından takip etmiyorum, ancak benim anlayışım son sürümlerde belirli teknik sorunların çözüldüğü. Bununla birlikte, efsaneyi ortadan kaldırmak için yeterince erken bir karar yoktu ve birleşimler için DVCS'yi deneyen insanlar başka nedenlerden dolayı onunla birlikte kaldılar.


47

Ne yaptığınızı biliyorsanız, bir şubeyi ilk önce yeniden birleştirmemelisiniz (ve hiç de yapmamalısınız). (Tabii ki temelde yanlış ve aptalca bir şey yaparken yapmak zordur!)

Ve burada kafa karışıklığınızın ve genel olarak tüm sorunun kaynağı yatıyor.

Dalları birleştirmenin "temelde yanlış ve saçma" olduğunu söylüyorsunuz. İşte sorun tam da bu: dalları birleştirilmemesi gereken şeyler olarak düşünüyorsunuz . Niye ya? Çünkü siz şubeleri birleştirmenin zor olduğunu bilen bir SVN kullanıcısısınız . Bu nedenle, asla yapmazsınız ve başkalarını yapmamaya teşvik edersiniz. Birleşmekten kaçınmak için eğitildiniz ; Birleşmekten kaçınmak için kullandığınız teknikleri geliştirdiniz .

Ben Mercurial bir kullanıcıyım. Tek geliştirici olduğum kendi projelerimde bile şubeleri her zaman birleştiriyorum . Düzeltme yaptığım bir yayın şubem var. Ben onu tekrar ana hatta bağladım, böylece düzeltme oraya gidiyor.

SVN kullanıyor olsaydım, kod tabanının tamamen farklı bir yapısını kabul ederdim. Niye ya? Çünkü SVN birleşmeleri zorlaştırır ve bu nedenle karmaşık birleşmelerden kaçınmak için deyimler ve teknikler geliştirirsiniz .

DVCS'ler karmaşık birleştirmeleri kolaylaştırır, çünkü bunlar varsayılan durumdur . Her şey bir DVCS'de az ya da çok, bir daldır. Bu yüzden onların bütün yapısı, birleşmeyi kolaylaştırmak için sıfırdan inşa edilmiştir. Bu, birleştirmeyi hiç kullanmadığınız SVN iş akışı yerine günlük olarak birleştirmeyi kullanan bir iş akışı geliştirmenizi sağlar.

Basit gerçek şudur: Bir DVCS'ye SVN'den farklı bir şekilde yaklaşmalısınız. Bu çok farklı tipteki sürüm kontrol sistemleri için uygun deyimleri kullanmalısınız. SVN'de, birleşmeyi içermeyen deyimler benimsersiniz, çünkü birleşmeler zordur. DVCS’lerde, sık sık kullanamadıkları için sık kullanılan bir deyimler kullanırsınız.

Doğru iş için doğru alet.

Mesele şu ki, birleştirme odaklı iş akışı, birleştirmediğiniz SVN tarzı iş akışından çok daha güzel ve kullanımı kolaydır. Serbest bırakma kolundan bir şeyin dev dalıma ne zaman getirildiğini görmek daha kolaydır. Dallar arasındaki çeşitli etkileşimi görmek daha kolaydır. İşler için test dalları oluşturmak kolaydır, ardından test işe yaramazsa onları klipsleyin. Ve bunun gibi.

Gerçekten, Joel bunu benden çok daha iyi açıklıyor . Bunu iyi okumalısın.


15
@Mason: Bu nasıl bir eğitim değil? SVN'yi SVN tarzında kullanmak için eğitildiniz. Ve SVN tarzı etmektir değil birleştirme kullanın. Böylece, bir şeyleri kullanmamaya ve hatta birleştirmeyi düşünmeye eğildiniz. Bu yüzden sana hiç gelmedi; çünkü bunu zorlaştıran bir sistem kullandınız.
Nicol Bolas

5
"Eğitilmemiş" ile "eğitilmemiş" arasında büyük bir fark var.
Mason Wheeler

8
@MasonWheeler: Hayır, yok. Bir şeyi nasıl yapacağınızı tam olarak öğrenemiyorsanız, o zaman yapmamaları için dolaylı olarak eğitilirsiniz. Bir sorunu çözmek için kullanabileceğiniz deyimler repertuarınızda değildir. Bu nedenle, olamaz sorunları çözmek için kullanabilirsiniz. Etkisi birleştirmememiz söylenmekten farklı değil, çünkü istemeseniz bile nasıl yapılacağını bilmiyorsunuz. Tereddüt etmeden “aynı yorgun eski zemin” olarak iyi bir argümanı reddetme şekliniz bunun kanıtıdır. Bir araç olarak birleştirmeyi düşünmüyorsunuz; Bunu istisna ya da olağandışı bir şey olarak düşünürsünüz. Kullanılmak yerine sorgulanması gereken bir şey .
Nicol Bolas

9
@MasonWheeler: " Yanlış yapıyorlar " kararını kim veriyorsun ? DVCS kullanmazsınız, bu nedenle DVCS iş akışıyla ilgili deneyiminiz olmaz. Bu konuda hiçbir tecrübeniz olmadığı için programcılara yardımcı olup olmadığı hakkında hiçbir fikriniz yok. Öyleyse, SVN'nin izin vermemesi nedeniyle "yanlış" olduğunu söylemek için hangi yetkiye sahipsin? Bu, sınıfların, sanal fonksiyonların ve şablonların yanlış olduğunu söylemek gibidir, çünkü C onlara sahip değildir.
Nicol Bolas

3
@MasonWheeler: böyle mi? : P . SVN dallanma ve birleştirme aynı şeyi yapar - metafor zaten bozuldu. Böyle bir şeyin anlaşılmasının ne kadar zor olduğunu gerçekten anlamıyorum, özellikle de bazı mantıklı sözler içeriyorsa ..
naught101

21

Eğer doğru felsefeyi izlerseniz, SVN birleşmesi ile ilgili çok fazla bir şey yok.

Diğer cevapların çoğunda gördüğüm, bir süredir SVN kullanmayan insanlardan geliyor. Birisinin doğru bir şekilde belirttiği gibi: "efsaneyi ortadan kaldırmak için yeterince erken belirlenmedi".

SVN 1.6 ile 1.8 arasındaki mevcut tecrübelerime dayanarak, son zamanlarda devraldığım eski bir projede SVN, birleşmeyi çok daha kolay bir hale getirme yolunda uzun bir yol kat etti. Yine de kusursuz değildir ve amaçlanan kullanımdan sapan kullanıcıların kolayca zarar görmeyeceğini düşünüyorum .

SVN'yi çok iyi tanıyordum ve bu arada kişisel projeler için Mercurial'ı da denememe rağmen, bu projeden önce SVN'de çok fazla dallanma yapmamıştım. Oldukça fazla deneme yanılma vardı ve başladığımda pek çok beklenmedik birleşme çatışmaları yaşadım.

Sonuçta, her ne zaman bir tane (veya başka bir konu) alsam, bunun doğru bir şey yapmamamdan kaynaklandığını fark ettim (aka "SVN yolu" - tartışmalı, uygun sürüm kontrol yolu). Zorluğun yattığı yerin burası olduğuna inanıyorum: örgütlenmemiş bir şekilde ne istersen yapamazsın ve SVN'nin, özellikle birleşimlerle, mükemmel çalışmasını beklersin. Birleşmeler, kullanıcılardan gerçek güçlerini göstermeden önce titiz bir disiplin gerektirir.

Fark ettim ki, bir birimlerin temiz kullanımı için şartlar olmasa da güçlü tavsiyeler:

  • SVN'nin yeni bir sürümünü kullanın (bence 1.6 ve üstü). Giderek daha fazla sayıda otomasyon ve kontrol sizin için yapılır.
  • Varsayılan "gövde, dallar, etiketler" yapısını kullanın ve felsefesini uygulayın (etiketlere bağlı kalmayın). SVN sizin için hiçbir şeyi kontrol etmiyor. Şube olarak bir etiket kullanırsanız (bu, proje havuzunu bulduğum durumdur) yine de çalışabilir, ancak tutarlı olmanız gerekir.
  • Dalların ne olduğunu ve ne zaman oluşturulacağını bilin. Etiketleri ile aynı.
  • Yan dalları kaynak dalları ile güncel tutun (genellikle ana hat, ancak teknik olarak herhangi bir daldan dallayabilirsiniz). SVN'nin otomatik birleştirme yapmasını istiyorsanız , bu zorunludur . SVN 1.8, işler güncel değilse ve çalışma kopyanızda beklemede olan değişiklikleriniz varsa (bu davranış 1.8.5'te tekrar kaybolmuş gibi görünüyorsa) otomatik olarak birleşmenizi önler.
  • "Uygun" taahhütleri yapın. Sadece çok özel bir konsepte değişiklikler içermelidirler. Mümkün olduğunca az miktarda değişiklik içermelidir. Sen do not tek örnek iki bağımsız hatalar hakkında modifikasyonlar içeriyor işlemek istiyorum. Zaten hem sabit ve onlar aynı dosyada iseniz size taahhüt böylece, bir hata değişiklikleri uzakta saklamalısınız sadece , önce diğer değişiklikleri daha sonra değişikliklerin ikinci setini işlemek. TortoiseSVN'nin bunu "Taahhüt ettikten sonra geri yükle" yoluyla kolayca sağlayabileceğini unutmayın.
    • Bunu yapmak, belirli bir bağımsız değişiklik grubunu geri almayı mümkün kılar VE böyle bir kümeyi yalnızca başka bir dalda birleştirmeyi mümkün kılar. Evet, SVN kiraz toplama revizyonlarını birleştirmenizi sağlar.
  • Alt dallar kullanırsanız (gövdeden dallanma, o yeni daldan dallanma), hiyerarşiye saygı gösterin. Alt dalı gövdeyle güncellerseniz veya bunun tersi olursa, biraz acı çekersiniz. Birleşmeler hiyerarşide aşağı veya yukarı basamaklandırılmalıdır.
    • Birkaç aylık deneme süresinden sonra, bunun en önemli kısım olacağına dair garanti verebilirim. Aynı gövdeden iki alt dal oluşturup daha sonra alt dallar arasında veya bazen her iki taraftan da alt alt dallar arasında bit birleştirmeye çalıştım. Bu, SVN'yi (veya kullanıcıyı) açabilir. Belirli revizyonları birleştiriyorsanız, sorun olabilir. Otomatik birleştirme ile ilgili sorun olabilir.
    • Özellikle, alt dal A'yı gövde ile senkronize ederken ve sonra alt dal A'dan bir alt dal B'ye bir şeyi birleştirmeye çalışırken sorun yaşadım SVN, "ana hattan senkronize et" revizyonunun yasal olarak alt dalla birleştirilmesi gerektiğini düşünüyor gibi görünüyor. B ve bu bir yığın çatışmalara yol açar.
  • Mümkün olduğunca dalın köklerinden birleşiniz. Aksi halde, SVN sadece alt klasör için yapılan birleştirme takip eder ve ne zaman yapmak kökünden oto Ayırmak denemek, sen birleştirilmemiş revizyonları eksik hakkında uyarılar alabilirsiniz. Bunları kökten birleştirerek düzeltilebilir, ancak en iyisi karışıklığı önlemektir.
  • Hangi şubeye bağlı olduğunuza dikkat edin. Çalışma kopyanızın zaman içinde çeşitli şubelere yönlendirilmesi için Switch'i kullanırsanız, nereye bağlı olduğunuzdan emin olun.
    • Gerçekten değişikliği istemiyorsa özellikle kötü olduğunu dalı. Bu konuda hala net değilim, ancak ondan nasıl kurtulduğunuza / onu doğru dallara aktardığınıza (geri dönme, birleştirme) bağlı olarak, dağınık bir şey alabilirsiniz. Düzeltilebilir, ancak olası çakışmaları önlemek veya derhal çözmek için düzeltmeyi revizyonla birleştirmek zorunda kalacaksınız veya otomatik birleştirme işleminden sonra daha karmaşık bir çatışmayı düzeltmeniz gerekecek.
  • Dalları uzun süre el değmeyiniz. Aslında, bu bir zaman meselesi değil, şube ve bagajda kaç tane revizyon yapıldığı ve bunlarda ne kadar değiştiği meselesi. İki dal arasındaki birleşme, 3 yollu birleştirme, her zaman şubeler arasındaki en son genel revizyon ile karşılaştırılır. Aradaki değişiklikler ne kadar fazla olursa, otomatik birleştirme o kadar fazla başarısız olur. Bu arada, kodunuzun yapısını bu arada değiştirdiyseniz (taşınmış veya yeniden adlandırılmış dosyalar) bu daha kötüdür.

Yukarıdakileri takip etmiyorsanız, uyuşmazlık olasılığınız oldukça yüksektir. Her zaman çözülebilirler, ancak zaman harcayacakları kadar eğlenceli değiller.

Oh, SVN'i gerçekten okuduğum ve denediğim her şeyden önce birleştirme hakkında bir şey daha: deleted / moved / renamed files / folder Görünüşe göre , SVN hala bir dalda yeniden adlandırılmış, silinmiş veya taşınmış bir dosyayla ve orijinal sürümü başka bir dalda değiştirilmiş ... ve daha sonra bunları birleştirmiş gibi. Dosyanın bir şekilde nereye gittiğini bilmeyecek ve değişiklikleri diğer şekilde "unutacak". Bir değişiklik (ya ikisi yapamaz, silme veya dosya değiştirme) besbelli çözülemez, ama taşınmış / yeniden adlandırılmış dosyalara başvuran değişiklikler gerektiğini çalışmak ve öyle değil. Umarım bu yakında çözülür.

Sonuçta, sonuçta, SVN birleştirmek kolay mı? Sanırım hayır. Elbette kaygısız bir şekilde değil. Öyle mi kötü ? Sanmıyorum Sadece yanlış bir şekilde kullandığınızda ve ne yaptığınız hakkında yeterince düşünmeyince yüzünüze geri tükürür.

Buna dayanarak, insanların neden Mercurial'ı (mesela) tercih ettiklerini anlayabiliyorum, çünkü deneyimimden bu şeyler hakkında biraz daha hafif ve her şeyi başlangıçta otomatikleştiren bir şey vardı (en azından başladığım ilk sürümlerden). Yine de, SVN oldukça fazla yakaladı, bu yüzden artık çok fazla basmaya layık değil.


Ağaç çelişkileri - evet, SVN bunlarla ilgili güçlük çekiyor, ancak TBH diğer SCM'leri de yapıyor. Git, yeniden adlandırılan veya taşınan dosyaların aynı olup olmadığını anlamaya çalışacak bazı sezgisel özelliklere sahiptir, ancak her zaman doğru yapmaz. Bence SVN, bu çatışmaların çözülmesinin daha kolay anlaşılması için biraz çaba sarf etmeli.
gbjbaanb

@gbjbaanb: Buluşma önerisi sunmasa da, Mercurial'ın yaptığı gibi "Onarım Hareketi" sunuyor. Aslında hangi Silinmiş ve Eklenmiş dosyaların aynı olduğunu söylemeniz gerekir. İyileştirme için kesinlikle yer var.
leokhorn

Tüm bunlar, projede çalışan tek kişi siz olduğunuzda harika geliyor ... Ama eğer iyi bir takımınız varsa ve hepsi "SVN yolunu" kullanıyorsa (ki kimsenin tam olarak ne olduğuna karar vermiş gibi görünüyor) birleşiyor Hala bir PITA. Gerçek şu ki, svn gerçekten bu dallanma iş akışını desteklemiyor. "SVN yolu", dallar oluşturmak ve bir şelale SDLC'yi kullanmak bile olmazdı. Bütün bunlar söylendiğinde Git'in geçmişte büyük projelerde çalıştığı birçok insanla birleştiği bir sorunum vardı. Ancak, hala daha az acı verici görünüyorlardı.
ryoung

Tecrübelerime göre, sürüm kontrol sisteminin nasıl çalıştığını umursamayan insanlarla çalışıyorsanız, SVN'nin günden güne kullanımı çok daha kolaydır. Sadece birkaç DVCS takımında çalıştım, ancak kaçınılmaz olarak bazı takımların önemli revizyon kontrol davranışları yok ve bu durum herkes için depoyu kirletiyor. Subversion'da, eğitimsiz kişiler genellikle dallardan uzak dururlar, böylece onlar için "uzmanlar" alırlar ve uygun şekilde yönetilirler. Verilmiş, bu deneyim benim için tek başına ve sadece aletlerinin nasıl çalıştığını bilen programcılar ile çalışmayı tercih ediyorum ...
dash-tom-bang

5

Dahili veri modelleri temelde farklıdır.

Temel olarak, SVN'de bir dalın geçmişine baktığınızda, yalnızca o dalda ne olduğunu görürsünüz. Eğer şubesinden birleştirdiğinizde Yani Bdalına A, dal tarihinin Atüm açıkça yapılan değişiklikleri içeren kesinleştirme büyük bir içerecektir Bo kollara beri.

SVN'nin ilk sürümlerinde, Bdalı bir Akez daha birleştirmek zorunda Bkalırsanız, aynı düzeltmeleri iki kez birleştirmekten kaçınmak için hangi şube aralığını birleştirmek istediğinizi elle belirtmeniz gerekir . Akıllı geliştirici elbette 'B: 1234'te Birleşti' gibi bir taahhüt mesajı kullanır.

SVN 1.5 bunu "sabitledi". Ancak birleşmelerin temelde nasıl uygulandığını değiştirmedi. Sadece şubeye bazı ekstra meta veriler ekleyerek A, SVN'nin 1234 revizyonunun birleştiğini bilmesini sağlayarak SVN'nin otomatik olarak doğru revizyon aralığını seçmesine izin verdi.

Ancak bu çözüm temelde birleştirilenleri takip etmeyi desteklemeyen bir veri modeli için geçici bir çözümdür.

İki dalı birleştirmek oldukça basit bir örnektir. Ancak bu daha karmaşık senaryoyu görüntüleme

  1. Şube oluşturma Agelen trunkve burada birkaç hareketin yapmak
  2. Şube oluşturma Bgelen Ave burada bir kaç hareketin yapmak
  3. Birkaç taahhüt trunkve yapmakA
  4. Bİçine birleştirmektrunk
  5. Aİçine birleştirmekB
  6. Aİçine birleştirmektrunk
  7. Birleştirme Biçine trunk(bu aslında şey yapmamalıyız)

Bunu doğru kullanarak meta veri modelini kullanmak oldukça karmaşık bir hal alıyor (SVN'nin bu senaryoyu doğru bir şekilde yerine getirip getirmediğini bilmiyorum ve denemeye meyilli değilim).

Bu senaryoyu git'te kullanmak son derece basittir.

Git'te, her işlem yaptığınızda, bu işlemi temsil eden iç nesne önceki başa bir başvuru içerir. Bir dalda birleştiğinizde, birleşme, birleştirilmekte olan tüm dalların önceki başkanına referanslar içerir (git'te bir seferde birden fazla dalda birleştirme yapabilirsiniz)

Bu nedenle, git'teki tek bir taahhüdün geçmişini incelediğinizde tüm tarihi görebilir, dallandığını, ne zaman birleştirildiğini ve dallanma ile birleşme arasındaki her iki dalın tarihini görebilirsiniz.

Dolayısıyla, kısmen birleştirilen bir dalda birleşme işlemi yapıldığında, ne birleştirildiğini ve neyin ayrılmayacağını belirlemek son derece basittir.

Mercurial ile hiçbir deneyimim yok, ancak iç çalışmalarının git ile benzer olduğundan şüpheliyim.

Temel olarak, SVN için, dallanmayı ucuz hale getirmek için bir tasarım hedefi oldu. Ancak git, birleştirmeyi ucuz hale getirmek için bir tasarım hedefi oldu.

Son olarak, SVN'yi en son kullandığımda, bir dosyanın bir dalda yeniden adlandırıldığı ve diğerinde değiştirildiği birleştirme işlemlerini gerçekleştiremedi.


1

Uzun süredir devam eden gelişimi ve serbest bırakma şubeleri dahil, bir miktar SVN birleştirme işlemi yaptım. Büyük ve ben hayatta kaldım. Birleşme her zaman zordur, ancak DCVS ile olumsuz taraf kötü değildir - her şey yereldir, bu nedenle bilinen iyi bir revizyona güncelleyin ve devam edin. Oysa SVN'de sunucu tarafında bir çok şey olduğu için kurtarma çok çirkindi - genellikle yerel kopyayı silip yeniden denemek için yeni bir temiz şubeyi kontrol etmekten ibaretti. Benim durumumda kötü değildi - SVN kutusuna bir gigabit bağlantısı yardımcı olur. Ancak, yavaş bağlantılarda olduğu için bu konuda çok sıkıntı çeken müteahhitlerimiz vardı, bu yüzden birleşme dahil her şey sonsuza dek sürdü.


Yavaş bağlantı meselesinde ekstrapolasyon yapmak, uzaktaki bir uzak sunucudan çalışmak, büyük güncellemeler yaparken kötü bağlantı bağlantı hataları da yapar> <Hiç eğlenceli değil.
jxramos

-1

Evet, ben de yapıyorum. Şu anda çalıştığım projenin farklı versiyonları (şubeleri) için 12 VM'im var. Eski bir sürümdeki bir hatayı düzeltmek zorunda kaldığımda, hatayı düzeltirim, daha sonra yeni sürümler için dallara ayrılanları birleştiririm. Ama bu şimdi bütün bir şubeyi yeniden birleştiriyor, bu da burada bahsettiğim şey.

İşte git hakkında çok güzel şeylerden biri yatıyor. DVCS ile ilgili miras değil, sadece gitmenin mükemmel olduğu bir şey. Belirli düzeltmeleri herhangi bir daldan başka bir dalda birleştirebilirsiniz. Temelde sadece farkını alır ve diğer şubeye uygular, ancak izleme yapar ve çok daha otomatiktir.

Dolayısıyla, dallanma 2.0 ve dallanma 3.0'a sahipseniz ve 2.0'da bir hatayı keşfederseniz, 2.0'da düzeltebilir ve onu gideren revizyonlar kümesini alabilir ve yalnızca bu düzeltmeleri 3.0 dalında birleştirebilirsiniz . SVN'nin, her revizyon için farklılıkları manuel olarak almaktan ve uygulamaktan başka bir yolu olduğunu sanmıyorum.

Tabii ki, otomatik birleştirme algoritması da çok daha pürüzsüz çalışıyor gibi görünüyor ve git, "her şey için bir dal yapmak" modeliyle sıfırdan inşa edildi. Dalların ne kadar hafif olduğu ile sık sık dallara dalmak doğal görünüyor.


Ayrıca, mercurial'ın da benzer bir işlevi olduğunu hayal ediyorum
Earlz

2
Aslında, aynı şeyi SVN'de de yapabilirsiniz. Onu her zaman yaparım. SVN Birleştirme komutu, farklı bir daldan bir revizyon (veya revizyon aralığı) çekebilir ve onu çalışma kopyanıza uygulayabilir ve ardından onaylarsınız.
Mason Wheeler

2
@MasonWheeler Anti-svn duyarlılığının birçoğunun 1.5'ten önceki sürümlere (svn birleştirme izlemesi olduğunda) yönelik olduğunu unutmayın. Ve elbette birçoğu sadece anlamsız bir fanboyizmdir ...
yannis

3
@MasonWheeler ayrıca bkz. Stackoverflow.com/a/4215199/69742 Bu yazının DVCS'ye kayması sürümleri değil değişiklik kümelerinin kaydını tutar . Değişim setlerinin doğası gereği alması ve birleştirmesi kolay ... versiyonlar bağlam gerektirmiyor çünkü çok değil
Earlz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.