Dalları aynı yazılımın farklı sürümlerini korumak için kullanmak iyi bir uygulama mıdır?


72

Birkaç farklı sürümü olan bir ürünümüz var. Farklılıklar az: burada ve oradaki farklı dizeler, birinde çok az ek mantık, diğerinde mantıkta çok az fark var. Yazılım geliştirilirken, çoğu basıma her sürüme eklenmesi gerekir; ancak, değişmeyen bir kaç tane var ve bir kaç tane de değişmeli. Release-editionA ve release-editionB (..etc) şubelerim mevcutsa şubelerin geçerli kullanımı mı? Herhangi bir şey var mı? İyi uygulamalar?

Güncelleme: İçgörü için herkese teşekkürler, burada çok sayıda iyi cevap var. Genel fikir birliği, bu amaçla dalları kullanmanın kötü bir fikir olduğu görülmektedir. Merak eden herkes için, benim son çözümüm dizeleri konfigürasyon olarak dışlamak ve farklı mantığı eklenti veya komut dosyası olarak dışlamaktır.


Yanıtlar:


45

Bu, değişimin büyüklüğüne bağlıdır, ancak tanımladığınız farklılıklar için bunun iyi bir uygulama olduğunu düşünmem.

Genel olarak, Git şubesinin gelecekte birleştirilecek veya referans olarak salt okunur olarak saklanacak bir şey olmasını istersiniz. Süresiz olarak bir arada bulunan Git şubeleri, herkes için iş demektir: Değişiklikler, çoğaltılmalı ve birleştirilmeli, çatışmalar çözülmeli, tüm eğlence. Başka hiçbir şey yapmazsa, her geliştiricinin değişiklikleri bir yerine beş havuza itmeyi hatırlaması gerekir.

Küçük değişiklikleriniz varsa, bütün birleşme ve şube tutma çabası, sorunla karşılaştırıldığında fazlaca görünüyor. Sürümler arasında ayrım yapmak için önişlemcinizi kullanın veya sisteminizi oluşturun. #ifdefHile yapmak basit mi? O zaman git ile problemleri çözme, bu overkill.


4
Bunun git için doğru olduğunu söyleyebilirim, ancak diğer VCS ile bültenlerin / sürümlerin dallanmasının daha iyi bir strateji olabileceğini not etmek ilginçtir
jk.

16

Dallar bunun için değil. Şubelerin, aynı kodun uzun vadeli paralel versiyonları değil, geliştirme hattınıza giden orta vadeli yan yollara kısa olması gerekiyor.

Tüm farklı sürümleri aynı şubeye koyardım, sürümler arasında farklı olan parçalar için bir alt dizinler oluşturur ve oluşturma sürecinizi (otomatik bir yapınız vardır, doğru mu?) İsteğe bağlı olarak her iki basımı da yazdırabilirim. (veya hepsi bir kerede).

Ne de olsa, "tek bir hakikat kaynağı" tutmak istersiniz; şubelerde, bazı kodları çoğaltacaksınız, ancak hepsini değil ve bazı birleştirmeler aslında kurulumunuzu bozar.


Aynı sınıfın küçük farklılıkları olan iki versiyonu varsa, otomatik bir derleme nasıl yardımcı olur? Aklıma gelen tek çözüm, farklı çözüm yapılandırmaları ( EditionA, EditionBvb.) Kullanarak ve bu tür sınıfları koşullu olarak csprojdosyalara dahil etmektir (örn. <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'EditionA|AnyCPU' ">). Otomatik yapılar, proje oluşturmak için bu farklı yapılandırmaları kullanabilir. Ne düşünüyorsun?
sotn,

Hangi yapı araçlarını kullandığınıza bağlı, ancak genel olarak konuşursak, evet, yapı sistemine istediğiniz yapıyı söylemenin bir yolunu bulmanız ve ardından otomatik olarak doğru kodu içermesi gerekir. Yıllardır olsa hiçbir şey .NET yapmadım, bu yüzden bugünlerde bunu yapmanın doğru yolu sayıldığını bilmiyorum.
tdammers

12

Çözümlerden biri - insanların belirttiği gibi - yapı sistemini farklı baskıları destekleyecek şekilde yapılandırmak.

Ayrıca, özellik değiştirir ve bir yapılandırma dosyası kullanır. Ne kadar az yapman gerekiyorsa o kadar iyi.

Bu siteye bir göz atın.


3

Kodun çoğunu kümelemeden tek bir dalda yapmamanız şartıyla bunun iyi bir fikir olduğunu düşünüyorum.
Özellikle bir dalda tutmayı ve özellikle farkların önemsiz olduğunu söylerseniz lokalize ve konfigürasyon dosyalarını kullanabilmeyi tercih ederim.
Başka bir yol farklı yapılar olabilir; örneğin, derleme dosyanız farklı müşteriler için farklı dosyalar sunar, ancak derleme aracını farklı dalları kontrol ederken de görebilirim. Git kullandıkça, gerçek bir yakalanma olmadığını söyleyebilirim. Bir dallanma stratejisi, farklı görevler için farklı branşlarda geliştirmek, ana şubeye giriş yapmak ve ustadan editionX ve Y'ye kadar birleştirmek olabilir.


2

Bu daha farklı yapı yapılandırmaları için bir iş gibi geliyor. thiton'ın cevabı bu yöne gidiyor, ancak şunu çok daha uzağa götürürüm #ifdef:

Yazılımın farklı sürümlerini oluşturmak için farklı oluşturma hedefleri kullanın. Hedefler farklılık gösterebilir

  • içerdikleri konfigürasyon,
  • İçerdikleri nesne veya kaynak dosyalar veya
  • kaynak kodun ön işlenmesi.

Bu önişleme, klasik C önişlemcisini açık bir şekilde içerebilir, ancak özel görünümler oluşturmak için bir şablon motor olan özel bir önişleyici kullanma gerektirebilir,…

Bu şekilde, her bir değişikliği etkin olarak DRY'yi ihlal eden birden fazla şubeye itmek zorunda kalmazsınız (elbette bu da otomatikleştirilebilir, ancak avantajı göremiyorum).


1

Branşları sadece önemli değişiklikler için kullanırdım, aksi halde, her küçük değişikliğe yaptığınız her değişikliğe eklersiniz, bu yapmak hiç de eğlenceli değildir ve özellikle de daha fazla kişiyle çalışıyorsanız hataya açıktır.


1

Hepsini farklı ürünler olarak piyasaya sürüyorsanız, birden fazla şubeye sahip olmanız önerilir. Değilse, yine de bir gövde veya ana dal gibi bir şey kullanmanız önerilir.

Ayrıca, bunun sahip olduğunuz geliştirme sürecine, özellikle dağıtımına bağlı olacağını düşünüyorum. Eğer yalnızca bir dalın üretime alınmasına izin veren bir işleminiz varsa ve dallar "artan yapılar" olarak kabul ediliyorsa, B sürümünün tüm A değişikliklerinin yapılmadığı sürece, ilk önce A çıkmamışsa üretime alınamayacağı anlamına gelir. A zaten B'de, o zaman birden fazla dalı olan gitmek yoludur. Bu, tüm dünyaya dağılmış ekipleriniz varsa ve genellikle öncelik sırasına göre değişiklik yaptıysanız işe yarayacaktır.


-2

Üç farklı şubenin çözümü (üretim, geliştirme ve özellikler için) gerçekten iyi çalışıyor. Üretim kodunuzda bir hata bulduğunuzu varsayalım, sonra bir yama uygulayıp daha sonra serbest bırakın. Üretim dalına herhangi bir özellik eklemesi yapmadığınızdan veya üretim dalında yapılan önemli değişiklikleri yapmadığınızdan emin olun. Siz ve ekibiniz, üretim dalınıza herhangi bir önemli özellik değişikliği eklememek için kendini disiplin altına almanız gerekecek. Üretim dalı, üretim kodu tabanınızda büyük bir değişikliği garanti etmeyen küçük hata düzeltmeleri için olmalıdır.


1
OP, ayrı özelliklerin geliştirilmesi için değil, tek ürünün varyantları için farklı dallar hakkında sorular soruyor
CVn
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.