Bu uzun yazı için üzgünüm, ama buna değer olduğunu düşünüyorum.
Çalıştığım diğer yerlerden biraz farklı çalışan küçük bir .NET mağazasıyla başladım. Önceki pozisyonlarımdan farklı olarak, burada yazılan yazılım birden fazla müşteriyi hedefliyor ve her müşteri yazılımın en son sürümünü aynı anda alamıyor. Bu haliyle, "mevcut üretim versiyonu" yoktur. Bir müşteri bir güncelleme aldığında, son güncellemesinden bu yana uzun bir süre önce olabilecek tüm özellikleri yazılıma ekler. Yazılım son derece yapılandırılabilir ve özellikler açılıp kapatılabilir: "özellik geçiş yapar". Serbest bırakma döngüleri burada çok sıkı, aslında bir programda değiller: bir özellik tamamlandığında yazılım ilgili müşteriye dağıtılır.
Ekip sadece geçen yıl Visual Source Safe'ten Team Foundation Server'a taşındı. Sorun hala TFS'yi VSS gibi kullanıyor ve Checkout kilitlerini tek bir kod dalında uygular. Bir hata düzeltmesi (tek bir müşteri için bile) sahaya konulduğunda, TFS'de ne varsa oluştururlar, hatanın düzeltildiğini test edin ve müşteriye konuşlandırın! (Kendimi bir ilaç ve tıbbi cihazlar yazılım arka planından geliyor bu inanılmaz!). Sonuç, yarı pişmiş dev kodunun test edilmeden üretime girmesidir. Hatalar her zaman sürüm sürümlerine kayıyor, ancak genellikle yeni bir yapıya sahip bir müşteri, hatanın bulunduğu özelliği kullanmazsa bu hataları görmeyecek. Yönetmen, şirketin tüm büyümeye başladığı için bunun bir sorun olduğunu biliyor birdenbire büyük müşteriler ve daha küçük müşteriler geliyor.
Buggy veya bitmemiş kodun dağıtımını ortadan kaldırmak, ancak takımların serbest bıraktığı biraz eşzamansız doğayı feda etmemek için kaynak kontrol seçeneklerine bakmam istendi. Kariyerimde VSS, TFS, SVN ve Bazaar kullandım, ancak TFS deneyimimin çoğunun olduğu yer.
Daha önce birlikte çalıştığım çoğu ekip, bir ay boyunca geliştiricilerin doğrudan Dev'de çalıştığı ve daha sonra değişikliklerin Testten Sonra Prod ile birleştirildiği veya daha sonra yerine "tamamlandığında" tanıtıldığı iki veya üç dallı Dev-Test-Prod çözümü kullanıyor. sabit bir döngü. Otomatik Yapılar, Cruise Control veya Team Build kullanılarak kullanılmıştır. Bir önceki işimde Bazaar SVN'nin üstünde oturuyordu: devs kendi küçük özellik dallarında çalıştı ve daha sonra değişikliklerini SVN'ye (TeamCity'ye bağlı) itti. Bu, değişiklikleri izole etmenin ve diğer halkların şubeleriyle paylaşmanın kolay olması açısından güzeldi.
Bu modellerin her ikisinde de, kodun itildiği merkezi bir geliştirme ve prod (ve bazen test) dalı vardı (ve etiketler, sürümlerin yapıldığı eşyadaki yapıları işaretlemek için kullanıldı ... ve bunlar hata düzeltmeleri için dallara yapıldı. yayınlamak ve dev ile yeniden birleştirmek). Ancak bu, burada çalışma şekline tam olarak uymuyor: çeşitli özelliklerin ne zaman piyasaya sürüleceğine dair bir emir yok, tamamlandığında itiliyorlar.
Bu gereksinim ile gördüğüm gibi "sürekli entegrasyon" yaklaşımı bozulur. Sürekli entegrasyon ile yeni bir özellik elde etmek için, dev-test-prod ile itilmesi gerekir ve bu, dev.
Bunun üstesinden gelmek için, NO dev-test-prod dalları ile ağır bir özellikli dallı modelden aşağı gitmemiz gerektiğini düşünüyorum, daha ziyade kaynak, geliştirme çalışmaları tamamlandığında kilitlenen, test edilen, sabitlenen, kilitlenen bir dizi özellik dalı olarak var olmalıdır. , test edildi ve sonra serbest bırakıldı. Diğer özellik dalları, ihtiyaç duydukları / istedikleri zaman diğer dallardaki değişiklikleri alabilir, bu nedenle sonunda tüm değişiklikler herkesin içine çekilir. Bu, son işimde yaşadığım şeyden saf bir Bazaar modeline çok uyuyor.
Bu kadar esnek olduğu gibi, bir yerde dev bir gövde veya eşya dalı olmamak tuhaf görünüyor ve asla yeniden entegre edilmemeyi isteyen dallardan ya da şikayet etmekten başka dallara ve geliştiricilere asla çekilmeyen küçük geç değişiklikler konusunda endişeliyim felaketleri birleştir ...
Bu konuda insanların düşünceleri nelerdir?
İkinci bir son soru: Dağıtılmış kaynak kontrolünün kesin tanımı hakkında biraz kafam karıştı: Bazı insanlar bunun TFS veya SVN gibi merkezi bir depoya sahip olmama hakkında olduğunu düşünüyor, bazıları bunun bağlantısız olduğunu söylüyor (SVN% 90 bağlantısı kesildi ve TFS'nin mükemmel bir işlevsel çevrimdışı modu vardır) ve diğerleri bunun Özellik Dallanması ve ebeveyn-çocuk ilişkisi olmayan dallar arasında birleştirme kolaylığı ile ilgili olduğunu söyler (TFS'nin de temelsiz birleştirme vardır!). Belki de bu ikinci bir soru!