Yanıtlar:
Dallanma için çeşitli kullanımlar vardır. En yaygın kullanımlardan biri, bir zamanlar ortak bir kod tabanına sahip olan projeleri ayırmaktır. Bu, ana gövdeyi etkilemeden kodunuzu denemek için çok kullanışlıdır.
Genel olarak, iki dal türü görürsünüz:
Özellik Şube: Belirli bir özellik, tüm geliştirme ekibinin erken aşamalarında etkilenmesini istemeyecek kadar yıkıcıysa, bu çalışmayı yapmak için bir dal oluşturabilirsiniz.
Düzeltmeler Şubesi: Ana gövdede geliştirme devam ederken, düzeltmeleri yazılımın en son yayımlanan sürümünde tutmak için bir düzeltme dalı oluşturulabilir.
Dallanma ilkelerini ve bunları ne zaman kullanacağınızı açıklayan aşağıdaki makaleye göz atmak ilginizi çekebilir:
Genel anlamda, dallanmanın temel amacı (bir VCS - Sürüm Kontrol Sistemi - özelliği) kod izolasyonu elde etmektir .
Sıralı geliştirme için yeterli olabilecek ve aynı benzersiz dalda kaydedilen (işlenen) birçok görev için kullanılan en az bir dalınız var .
Ancak bu model hızlı bir şekilde sınırını gösterir:
Bir geliştirme çabanız olduğunda (yeniden düzenleme, geliştirme, hata düzeltmeleri, ...) ve bu değişiklikleri aynı dalda mevcut geliştirme dalınızla güvenli bir şekilde yapamayacağınızı fark ettiğinizde (çünkü API'yi kırarsınız veya bozacak kodu her şey), o zaman başka bir şubeye ihtiyacınız var .
( İki kod seti daha sonra birleştirilecek olsa bile, eski kod için bu yeni kodu izole etmek için)
İşte cevabınız şudur:
Bir dalda iki geliştirme çabası sürdüremediğinizde ve kaydedemediğinizde dallanmalısınız.
(sürdürmek için korkunç derecede karmaşık bir geçmişe sahip olmadan).
Bir dal, kaynak kodu üzerinde çalışan tek kişi olsanız bile veya çok sayıda iseniz faydalı olabilir.
Ancak "geliştirici başına bir dal" yapmamalısınız:
"izolasyon" amacı, bir geliştirme çabasını izole etmek için yapılmıştır ("yazılımımızın bir sonraki sürümünü geliştirelim" kadar genel veya "haydi düzeltelim" kadar özel bir görev hata 23 "),
bir" kaynağı "izole etmek için değil .
("VonC" adlı bir dal başka bir geliştirici için hiçbir şey ifade etmez: Ya "VonC" projeden ayrılırsa? Onunla ne yapmanız gerekir?
"bugfix_212" adlı bir dal, örneğin bir hata izleme sistemi bağlamında yorumlanabilir ve herhangi bir geliştirici onu en azından onunla ne yapması gerektiği konusunda biraz fikirle kullanabilir)
Bir dal bir etiket değil (SVN bir olduğunu Revizyon Sistemi özelliği sürüm teklif etmeye çalışır : Bir etiketi anlamına gelmez bir dal olduğunu dallanma ve ucuz dosya kopyası ile dizinleri aracılığıyla etiketleme gibi ler)
Bir dal tanımlamak, aynı zamanda bir birleştirme iş akışını tanımlamak anlamına da gelir : işiniz bittiğinde şubenizi nerede birleştireceğinizi bilmeniz gerekir.
Bunun için, Practical Perforce'un (Laura WINGERD - O'Reilly) 7. bölümü, farklı dal türleri arasında iş akışını birleştirmek için iyi bir giriş (VCS agnostik): "" Yazılım Nasıl Gelişir "(pdf)
Kod hattı terimini tanımlar (kodun önemli evrim adımlarını, belirli noktalardaki etiketler aracılığıyla veya dala önemli birleştirme yoluyla kaydeden dal)
Ana hat modelini (sürümleri kaydetmek için merkezi bir kod hattı) sunar ve dallanma için çeşitli amaçları açıklar:
VCS ile ilgili diğer ilginç kavramlar: Temel kavramlar
(orijinal olarak ClearCase hakkında, ancak herhangi bir VCS için de geçerlidir)
21. yüzyılın tüm SCM'leri size şunu söylüyor:
Bu yeni bir özellik, hata düzeltme, test, her ne olursa olsun, üzerinde çalışmanız gereken her görev için dallara ayırın. Buna konu dalı denir ve SCM'nizle çalışma şeklinizi değiştirir.
Sen alırsın:
Bunu yapabilen araçlar:
YAPAMAYACAK araçlar:
Aynı zamanda kullandığınız SCM aracına da bağlıdır. Modern SCM'ler (git, mercurial, vb.), Gerektiğinde dalları oluşturmayı ve yok etmeyi giderek daha kolay hale getirir. Bu, örneğin üzerinde çalıştığınız hata başına bir dal oluşturmanıza olanak tanır. Sonuçlarınızı gövdede birleştirdikten sonra dalı atarsınız.
Diğer SCM'ler, örneğin yıkma ve CVS, çok daha "ağır" bir dallanma paradigmasına sahiptir. Bu, bir dalın yalnızca yirmi satırlık bir yamadan daha büyük bir şey için uygun olduğu anlamına gelir. Orada, şubeler klasik olarak, önceki veya gelecekteki bir ürün sürümü gibi tüm geliştirme yollarını izlemek için kullanılır.
Kod tabanınızda önemli ve / veya deneysel değişiklikler yapmanız gerektiğinde, özellikle de trunk'ı etkilemeden ara değişiklikler yapmak istiyorsanız.
Ne tür bir SCM kullandığınıza bağlıdır.
Daha yeni dağıtılmış sürümlerde (git ve mercurial gibi), her zaman dallar oluşturuyorsunuz ve yine de yeniden birleştiriyorsunuz. Biri ana hattaki yapıyı bozduğu için veya ağ çalışmadığı için sık sık ayrı bir dalda çalışırım ve daha sonra düzeltildiğinde değişiklikleri tekrar birleştiririm ve bunu yapmak o kadar kolaydır ki sinir bozucu bile değildir .
Dağıtılmış sistemlerde neler olduğunu anlamama en çok yardımcı olan belge (kısa ve okunabilir): UnderstandingMercurial .
Merkezi bir depoya sahip eski sistemlerde (CVS, SVN ve ClearCase gibi), ekip düzeyinde karar verilmesi gereken çok daha ciddi bir sorundur ve yanıt daha çok 'izin verirken eski bir sürümü korumak' şeklinde olmalıdır. ana hatta devam etmek için 'veya' büyük bir deneyin parçası olarak '.
Dağıtılmış model bence çok daha iyi ve baskın paradigma haline gelmek için sadece güzel grafik araçlardan yoksun. Bununla birlikte, yaygın olarak anlaşılmamıştır ve kavramlar farklıdır, bu nedenle yeni kullanıcılar için kafa karıştırıcı olabilir.
Perforce'dan Laura Wingerd ve Christopher Seiwald'ın tavsiyesinin gerçekten kısa ve faydalı olduğunu düşünüyorum:
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
Her birinin ayrıntılı açıklaması ve diğer en iyi uygulamalar için http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf adresine bakın .
Dallanmanın çeşitli amaçları vardır:
Ne zaman istersen.
Merkezileştirilmiş bir SCM ile çalışıyorsanız muhtemelen çok sık olmayacaksınız, çünkü şubeler resmi havuzun bir parçası ve bu, birleşmelerin gerçekten incittiğinden bahsetmeye bile gerek yok.
OTOH, dağıtılmış SCM'lerde şube ve ödeme arasında teknik bir fark yoktur ve birleştirmeler çok daha kolaydır. Daha sık dallanmak isteyeceksiniz.
Geçerli şubenize bağlı olarak, o şubeden sonraki sürüm için değil (ve daha önce değil) değişiklik yapmanız gerektiğinde.
Örneğin, genellikle bagaj üzerinde çalışıyoruz. Yayınlanma zamanı civarında, birisinin mevcut sürümde istemediğimiz bir değişikliği yapması gerekecek (bu değişiklik yayınlanmadan önce olabilir, şu anda genellikle yayınlandıktan sonradır). Bu, sürümü kendi dalına koymak ve gövde üzerindeki bir sonraki sürüm için geliştirmeye devam etmek için dallara ayrıldığımız zamandır.
Tüm teknik özellikleri bir kenara bırakırsak .....
Tekrar birleştirmenin daha kolay olduğunu bildiğiniz zaman dal!
Birleştirmenin her zaman bir projede işin nasıl yürütüldüğünden etkileneceğini unutmayın.
Bu bir kez elde edildiğinde, diğer tüm üçüncül konular devreye girecektir.