Dallanma (sürüm kontrolü)

Sürüm kontrol sistemlerinde ve yazılım yapılandırma yönetiminde *dallanma*, sürüm kontrolü altındaki bir nesnenin (örneğin kaynak kodu veya dizin) kopyalanmasıdır. Her nesne daha sonra ayrı ayrı ve paralel olarak değiştirilebilir, böylece nesneler farklı hale gelir. Bu durumda nesneler dal olarak adlandırılır. Sürüm kontrol sisteminin kullanıcıları herhangi bir dalı tekrardan dallandırabilir.

Dallar aynı zamanda ağaçlar, akışlar veya kod hatları olarak da bilinir. Başlangıç dalı bazen ana dal, ata dal (veya sadece ata dal, özellikle de dal farklı kuruluşlar veya kişiler tarafından yönetiliyorsa) veya yavru dal olarak adlandırılır.

## Ana dal
*Yavru dallar*, ata dalı olan dallardır; ata dalı olmayan bir dal, *ana dal* olarak adlandırılır. Ana dal bazen "HEAD" olarak da adlandırılır ancak doğru bir şekilde "head", bir dala değil, belirli bir daldaki en son işleme atıfta bulunur ve hem ana dalın hem de adlandırılmış her dalın kendi başı vardır. Ana dal, genellikle geliştirmenin ilerlediği bir projenin temeli olarak düşünülür. Geliştiriciler yalnızca ana dal üzerinde çalışıyorsa (sözde gövde tabanlı geliştirme), her zaman projenin en son son sürümünü içerir ancak bu nedenle en kararsız sürüm de olabilir. Başka bir yaklaşım, bir dalı ana daldan ayırmak, bu dalda değişiklikler uygulamak ve dalın kararlı ve çalışır olduğu kanıtlandığında değişiklikleri ana dal ile birleştirmektir. Geliştirme moduna ve işleme politikasına bağlı olarak ana dal, en kararlı, en az kararlı veya ikisinin arasında bir sürümü içerebilir. Ana dal için kullanılan diğer terimler arasında temel hat, ana hat ve gövde bulunur. Genellikle ana geliştirici çalışması ana dalda gerçekleşir ve kararlı sürümler dallara ayrılır ve ara sıra hata düzeltmeleri dallardan ana dala birleştirilir. Gelecekteki sürümlerin geliştirilmesi ana dal dışı dallarda yapıldığında, bu genellikle sık sık değişmeyen projeler için veya bir değişikliğin ana dala dahil edilmeye hazır hale gelene kadar geliştirilmesinin uzun zaman alması beklenen durumlarda yapılır.

## Birleştirme
Dallanma genellikle daha sonra değişiklikleri ana dala birleştirme veya entegre etme yeteneğini ifade eder. Genellikle değişiklikler ata dal olmasa bile ana dala geri birleştirilir. Birleştirilmesi amaçlanmayan bir dal (örneğin, üçüncü bir tarafça uyumsuz bir lisans altında yeniden lisanslandığı veya farklı bir amaca hizmet etmeye çalıştığı için) genellikle çatal olarak adlandırılır.

## Dallanmaya teşvik
Dallanmalar, yazılım parçalarının paralel olarak geliştirilmesine olanak tanır. Büyük projeler, geliştiriciler, sürüm yöneticileri ve kalite güvence personeli dahil olmak üzere birçok rolün doldurulmasını gerektirir. Ayrıca, farklı işletim sistemi platformlarında birden fazla sürümün çalıştırılması gerekebilir. Dallanmalar, katkıda bulunanların kod tabanını istikrarsızlaştırmadan değişiklikleri izole etmelerine olanak tanır. Örneğin, hatalar için yamalar, yeni özellikler ve sürüm entegrasyonu değişiklikleri. Bu değişiklikler testten sonra birleştirilebilir (yeniden senkronize edilebilir). 

Dallanmalar ayrıca, harici "ata dal" ("üçüncü taraf geliştirici") tarafından yayınlanan kaynak kodunu kullanma, izleme ve isteğe bağlı olarak değiştirme stratejisi olan satıcı dallanmasını uygulamak için de kullanılabilir. CVS zamanlarından beri oldukça yaygın olan bu yaklaşımla, üçüncü taraf geliştirici tarafından sağlanan kodu tutmak için ayrı bir dal oluşturulur. Bu dal, yeni ata dal sürümleriyle güncellenir ve gerektiğinde ana kodla birleştirilir.

## Geliştirme dalı
Bir yazılım parçasının geliştirme dalı veya geliştirme ağacı, geliştirilmekte olan ve henüz resmi olarak yayınlanmamış bir sürümdür. Açık kaynak topluluğunda, yayın kavramı genellikle mecazidir çünkü herkes genellikle geliştirme dalında olsun veya olmasın istediği herhangi bir sürümü kontrol edebilir. Genellikle, sonunda bir sonraki ana sürüm olacak sürüme geliştirme dalı denir ancak belirli bir zamanda genellikle geliştirilmekte olan yazılımın birden fazla sonraki sürümü vardır. 

Geliştirme dalı genellikle ana daldır. Bazı sürüm kontrol sistemleri, ana geliştirme dalı için kendine özgü terimler kullanır. Örneğin, CVS'de buna "MAIN" dalı denir. Git varsayılan olarak "master" kullanır, ancak GitHub ve GitLab, George Floyd'un öldürülmesinden sonra "main"e geçti. 

## Gölge veya sihirli dallar
CVSNT’de, bir gölge veya sihirli dal, ata daldaki değişiklikleri "gölge gibi takip eder", bu da küçük değişiklikleri sürdürmeyi kolaylaştırır. (cvc, rPath tarafından üretilen paketler için bir sürüm kontrol sistemi içeren açık kaynaklı bir paket oluşturma sistemidir.)

## Dağıtılmış revizyon kontrolü
### Depo klonları
Dağıtılmış revizyon kontrolünde, dallarıyla birlikte tüm depo kopyalanabilir ve üzerinde daha fazla çalışılabilir. Monotone (mtn), Mercurial (hg) ve git buna "klon" der; Bazaar buna "dal" der. Darcs gibi bazı dağıtılmış revizyon kontrol sistemlerinde, depolar ve dallar arasında bir ayrım yapılmaz; bu sistemlerde, bir deponun kopyasını almak dallanmaya eşdeğerdir.

## Kaynakça