Sadece bir tane varsa SVN şubeleriyle uğraşmalı mıydınız?


10

Subversion'da sadece bir dalla çalışırsak, rahatsız etmemiz gerekir mi? İşleri hızlandırmak için sadece gövde üzerinde çalışamaz mıyız?

Subversion ile şu şekilde geliştiriyoruz:

  • Bir gövde var
  • Yeni bir geliştirme dalı oluşturuyoruz
  • O dalda yeni bir özellik geliştiriyoruz
  • Özellik tamamlandığında, bagajda birleştirilir, dal kaldırılır ve bagajdan yeni bir geliştirme dalı yapılır

Üretime salıvermek istediğimizde, bagajdan bir etiket yapıyoruz. Hata düzeltmeleri bu etiketteki bir dalda yapılır. Bu hata düzeltmesi daha sonra bagajda birleştirilir.

Bu yüzden bir özellik yapıldıktan sonra yeni bir geliştirme dalı oluşturuyoruz. Bu şekilde, bugfix yeni kodumuza yeterince dahil edilir.

Aşağıda açıklığa kavuşturulması gereken bir diyagram bulunmaktadır:

Subversion stratejimiz

Şimdi, bunun en verimli çalışma şekli olmadığı hissi var. Taahhüt etmeden önce yerel olarak inşa ediyoruz, bu da yaklaşık 5-10 dakika sürüyor. Bunun oldukça uzun bir bekleme süresi olarak deneyimlendiğini anlayabilirsiniz.

Bir geliştirme dalı fikri, bagajın her zaman serbest bırakılmaya hazır olmasıdır. Ama artık durumumuzda bu doğru değil. Bazen, bir özellik neredeyse hazırdır ve bazı geliştiriciler zaten bir sonraki özelliği kodlamaya başlayacaklardır (aksi takdirde, bir veya iki geliştiricinin bitmesini ve birleştirilmesini beklemektedirler).

Daha sonra, özellik 1 tamamlandığında, bagajda birleştirilir, ancak özellik 2'nin bazı taahhütleri dahil edilir.

Öyleyse, sadece bir şubemiz olduğu için geliştirme dalıyla bile uğraşmalı mıyız? Gövde-temelli geliştirme ve her bir dalda soyutlama hakkında okuyordum, ancak bulduğum makalelerin çoğunun daldan-soyutlama kısmına odaklandığını gördüm. Birkaç yayına yayılacak büyük değişiklikler için izlenim ediniyorum. Bu yaşadığımız bir sorun değil.

Ne düşünüyorsun? Sadece bagajda çalışabilir miyiz? En kötü senaryo, (sanırım) bagajdan bir etiket yapmak ve ihtiyacımız olan komisyonları seçmek zorundayız, çünkü bazı taahhütler / özellikler henüz üretime hazır değil.


1
Birden fazla şubeniz olmasının daha iyi olacağını düşünüyorum. Her özellik için bir tane. Bu şekilde, biraz zaman alacak büyük bir özellik üzerinde çalışmaya başlarsanız, hata düzeltmelerini ve zaten yayınlanmış sürümler için böyle bir şey yapmayacaksınız.
Amy Anuszewski

Karmaşıklığı azaltmaya çalışırken, her özellik için bir dal daha karmaşık hale geliyor gibi görünüyor. Ayrıca, bir hata düzeltmesi varsa (yani 1.0 için), etiketten yapılmış bir dalda yapılabilir. Sonra bu dalı etiketleyebilir (1.1 yapmak), serbest bırakabilir ve bugfix'i bagajda birleştirebiliriz. Gövde üzerinde büyük özelliğin geliştirilmesi devam edecektir.
Peter

Yanıtlar:


6

IMHO, küçük artışlarla taahhütte bulunabiliyorsanız ve sürekli entegrasyonunuz varsa, doğrudan bagajda çalışmak iyidir, böylece taahhütlerinizin mevcut işlevselliği bozmamasını sağlayabilirsiniz (makul ölçüde). Bunu mevcut projemizde de yapıyoruz (aslında varsayılan olarak göreve özgü dalları kullanan hiçbir projede çalışmadım).

Yalnızca sürümden önce bir şube oluştururuz veya bir özelliğin uygulanması uzun zaman alırsa (yani birden çok yinelemeyi / sürümü kapsar). Bir görevin kaba büyüklüğü neredeyse her zaman yeterince iyi tahmin edilebilir, böylece bunun için ayrı bir şubeye ihtiyacımız olup olmadığını önceden biliyoruz. Ayrıca bir sonraki sürümden önce ne kadar süre kaldığını da biliyoruz (yaklaşık 2 ayda bir sürümler yayınlıyoruz), bu nedenle bir görevin bir sonraki sürümden önceki zamana uygun olup olmadığını görmek kolaydır. Şüpheniz varsa, serbest bırakma dalı oluşturulana kadar erteleriz, o zaman bagajda çalışmaya başlamak sorun olmaz. Şimdiye kadar sadece bir kez (yaklaşık 3 yıl içinde) göreve özgü bir şube yaratmamız gerekiyordu. Elbette projeniz farklı olabilir.


1
Peter ile birlikteyim. Desteklenen her sürüm için bir şubemiz var, ancak başka türlü bagajda çalışıyoruz. Ayrıca Sürekli entegrasyon kullanıyoruz, ancak bunun sadece derleneceği ve birim testlerinde bile mevcut işlevselliği bozmadığı anlamına gelmediğini unutmayın.
Ian

@ Elbette, hiçbir test gerçek hayatta kodun% 100 hatasız olduğunu garanti edemez ... sınırlı kaynaklara sahip, makul bir güvenlik seviyesi (tanımı alana ve projeye özgü) hedefliyoruz. Ayrıca CI'nin sadece birim testleri değil, entegrasyon vb. Testleri de yapabileceğini unutmayın.
Péter Török

Bu başarısız olana kadar çalışır. Yeni özellik hazır olmadan önce bir düzeltme uygulamanız gerekiyorsa ... Ya da yeni bir özellik sürümü, başlangıç ​​zamanı için düşündüğünüz kadar hazır değilse, dallanma kullanmıyorsanız, bu değişikliği koddan geri almak çok daha zorlaşır.
SoylentGray

@Chad, en son sürümdeki yamalar ilgili devre dalında, gövdeden parazit olmadan yapılır. Ve yeni özellikleri oldukça kapsamlı bir şekilde test ediyoruz, böylece ne zaman hazır olduklarını biliyoruz. Elbette, projemizde nispeten az sayıda büyük özelliğimiz var. Ve bir sunucu tarafı web uygulaması olduğundan, özellikleri seçici olarak açmak / kapatmak için bir DB bayrağı eklemek bile oldukça kolaydır. YMMV.
Péter Török

LOL ok Ben yanlış anladım ve sadece gövde vardı düşündüm (bir istisna dışında) Bu yöntemi de küçük bir grup için para cezası ve sık küçük sürümler kullandık Düzenli (3-6 aylık büyük sürümleri yapmak bizim için iyi çalışmadı ).
SoylentGray

1

Özellik geliştirme ile tanımladığınız şey paralel geliştirme (farklı ürün sürümlerini hedefleyen eşzamanlı geliştirme) ve bunun düzgün bir şekilde ele alınması için dallar gerektiriyor. Belirli bir sürüm yapacak özellikleri sık sık yeniden oluşturmak zorunda kalırsanız, her sürüm için veya her özellik için bir dalınız olabilir.

Bunu yapmanın diğer yolu, varsayılan olarak bagajdan çalışmaktır, ancak görevinizin bir sonraki sürümü geçmesini bekliyorsanız bir şube oluşturmaktır. Tabii ki her zaman sürümü yayınlarsınız.

Hangi yaklaşımı uyguladığınız gerçekten ne kadar yönetim yapabileceğinize bağlıdır. Tipik sürümün gerçekten paralel gelişimi yoksa, ikinci yaklaşımı benimserim.


Kabul ediyorum ve OP bunu şu şekilde onayladı: 'Bazen, bir özellik neredeyse hazır ve bazı geliştiriciler zaten bir sonraki özelliği kodlamaya başlayacaklar ...'
Chris

Evet, ama asla yeniden kompozisyon yapmak zorunda değiliz. Özellikler kronolojik olarak uygulanır ve örneğin 1-4 özelliklerinin tümü bir sonraki sürümde olmalıdır (örneğin 1.0). Bunun sorunlu olabileceği tek zaman, özellik 5'de, bundan sonra piyasaya sürülecek olan (2.0) geliştirme sürecinin başlamasıdır. O zaman bu değişikliklerin etiket / sürümde (1.0) dikkate alınmadığından emin olmalıyız. Serbest bırakmadan önce bir şube yapmak gerçekten bunu düzeltebilir.
Peter
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.