Bir VCS ile taahhütleri düzgün bir şekilde nasıl yönetebilirim, özellik çakışmalarını nasıl önleyebilirim ve bağımlılıkları nasıl yönetebilirim?


9

Büyük ekiplerle çalışmak can sıkıcı bir faktör haline geldi: Checkin'leri nasıl yönetiyorsunuz ve özellik çatışmalarını nasıl önlüyorsunuz ve kaynak kontrolü ile bağımlılıkları nasıl düzgün bir şekilde yönetiyorsunuz?

Şu anda işyerimde TFS 2008 kullanıyoruz ve Aralık başında TFS 2010'a geçiyoruz. Birincisi, herhangi bir kaynak kontrolü hiç olmamasından daha iyidir, ancak herkes hangi kaynak kontrol geçmişinde birden fazla checkin ve geri dönüşü önlemek için yararlı bulmuştur? Uçucu bir gövde, yeni bir özellik uygularken gitmenin veya dallanmanın en iyi yoludur ve mutlu olduğunuzda bagajda birleşir mi?

Diğer insanların deneyimlerini ve belki de kaynak kontrolünü yönetmeye yönelik bazı en iyi uygulamaları duymak istiyorum.



3
TFS ile başa çıkmak için bulduğum en iyi çözüm, ihtiyaç duyduğum tüm branşlarla karıştırılabildiğim ve küçük kilometre taşları (küçük özellik, kısmi özellik) başına TFS üzerinde taahhütte bulunduğum kendi özel GIT'ime sahip olmaktı. taahhütte bulunduğunuzda kodun sağlam olduğundan emin olun. Özellik / bugfix / yineleme başına bir dalda "dal" ın sonunda TFS'yi taahhüt ederim. Bununla birlikte, dahili olarak farklı denemeler ve keşifler için birden fazla şubeye sahip olmak benim için oldukça yaygın. Buradaki TFS elektrikli el aletleri birleşmeyi otomatikleştirmek için oldukça kullanışlıdır
Newtopian

1
"Birden fazla checkin" ve "trunk'ı ihlal" ile ne demek istediğiniz hakkında daha fazla ayrıntı verin. Umarım mühendislerimin her biri ekibimin üyeleriyken birden fazla check-in yapıyor.
Manfred

kaynak kontrolü dallanma stratejisi büyük bir konudur. programmers.stackexchange.com/questions/107884/…
gnat

@John - Bence "ihlal" "uçucu" için bir yazım hatası oldu
ChrisF

Yanıtlar:


7

TFS? Tepeler için koş! Mümkün olduğunca çabuk hareket edin. Pek çok farklı şey yapar, ancak bunların hiçbiri ırk araçlarının mevcut en iyileri kadar iyi değildir.

Ama ciddice:

İyi bir sürüm kontrol sistemine (SVN, GIT, vb.) Sahip olduğunuzda, şube yönetimi için, örneğin ne zaman şube oluşturulacağı, ne için, ne zaman birleştirileceği, kim ve çok daha fazlası için kurallar oluşturmanızı öneririm.

Yakın zamana kadar yeni gelişim için tek bir dal kullandık ('gövde'). Bir sürüm için bagajdan bir dal oluşturacağız. Nihai KG bu dalda yapılacak ve tamamlandığında serbest bırakacağız (aylık sürümlerdeyiz).

Program riskini azaltmak için 'bagajda önemsiz' kavramına geçtik. Bu kavram temel olarak, geliştirme işi için gövdeden ayrı dallar oluşturacağınız bir kural içerir. Örneğin, bir özellik için, küçük bir geliştirme ekibi veya benzeri için ayrı bir şubeniz olabilir. Küçük bir özelliği veya bir özelliğin serbest bırakılabilir kısmını tanımlamak ve her destan için bir dal oluşturmak için 'destanları' kullanırız. Günde en az bir kez bagajdaki tüm değişiklikler destansı dalda birleştirilir. Anahtar, sürüm kontrolü veya ayrı bir araç (örneğin üç yönlü birleştirme) ile iyi birleştirme desteğidir. Destan için KG destansı dalda yapılır. Geçtikten sonra epik dal gövdeye birleştirilecek ve bir entegrasyon testi yapılacaktır. Hâlâ bültenler için şubelerimiz var.

Destansı dallarla, artık gövdeden çıkacak ve gövdeye başarıyla birleştirilen tüm destanları dahil edebileceğimiz için program riskini önemli ölçüde azalttık. Tam olmayan destanlar otobüsü kaçırır ve bir sonraki sürümü (gelecek ay) yapar.

Bu elbette sadece çevremizde işe yarayabilir. Muhtemelen bizimkinden farklı, şube yönetimi için en iyi seçeneklerin neler olduğunu etkileyecek faktörlere sahip olacaksınız.

Örneğin, uzaktan çalışan ve her zaman sürüm kontrol sunucusuna bağlı olmayan birçok kişiden oluşan bir ekibiniz varsa, dağıtılmış bir modeli destekleyen bir sürüm kontrol sistemi kullanmak istersiniz. GIT ve diğer birkaç kişi bu kategoriye girer. Bildiğim kadarıyla TFS, dosyaları yazılabilir yapmak için sunucuya bağlantı gerektirir (2010 sürümünde düzeltildi mi?).

Umarım "tek beden herkese uyar" olmadığını gösterebildim. Özellikle şube yönetimindeki süreçlerinizle başlayın, gereksinimleri belirleyin ve son olarak ihtiyaçlarınıza en uygun aracı seçin. Belki TFS, belki de değil.


2
"TFS? Tepelere koş!" - İkinci bir hesap oluşturmaya cazip geldim, böylece bunu iki kez yükseltebilirim.
Ant

Bunun sizin için uygun olduğunu duymak güzel. Bunun gerekli olduğu benzer projelerde bulundum. Ama "destansı" dalların birleşmesini sağlamanın yolu kulağa kolay geliyor. Her seferinde korkunç bir acı olabileceğini söylemek istiyorum.
Lionel

1
@Lionel: Katılıyorum, bu olabilir. Geçmişte de benzer bir şeyin korkunç bir şekilde yanlış gittiğini gördüm. Deneyimlerime göre bu yaklaşımı başarıyla kullanmanın anahtarı, gövde ve özellik dalları arasındaki deltayı olabildiğince küçük tutmaktır. Günde en az bir kez gövdeden birleştirmeniz gerekir. Aynı şekilde, destanların / özelliklerin mümkün olduğu kadar küçük olması, örneğin gün / hafta ölçeğinde birçok aydan daha fazla olması faydalıdır. Son derece faydalı olan, aynı zamanda temiz bir mimari ve tasarım ve (tamamen) yeniden düzenlenmiş bir kod temelidir.
Manfred

@ John Son yorumunuzu tamamen kabul edin. Geçmişte yaşadığım temel sorun "yeni özellikler" genellikle büyük, karmaşık ve bagajda mevcut kod tasarım değişiklikleri içerir olmasıdır. Bunların uygulanması ve test edilmesi aylar alabilir. Bunları bagajda birleştirmek, farklı özellikler üzerinde çalışan birden fazla ekip olduğunda bir kabus olacaktır.
Lionel

4

Hangi özelliklerin gönderileceğini ve erteleneceğine karar verirken büyük esneklik sağladığı için özellik başına bir dal savunuyorum.

Durumunuzda ne kadar iyi çalıştığı, VCS'nizin dalları ne kadar iyi ele aldığına ve daha da önemlisi birleşmeye bağlıdır. Git ve Mercurial gibi DVCS bunu nispeten önemsiz bir egzersiz haline getiriyor. SVN daha az. TFS'den kaçınmayı başardım, ancak bu konuda çok şey okudum, çoğunlukla ücretsizim korkarım. TFS ile sıkışıp kalırsanız, şube başına bir özelliğe dayanan küçük bir pilot sürüm yapın ve birleştirmenin sizin için ne kadar iyi olduğunu görün.


2

İlk olarak, bir feragatname. Ekibinizin veya ekiplerinizin günlük olarak nasıl çalıştığının farkında olmadığımızdan, kaynağınızı yönetmenin en iyi yolunun ne olduğunu söylemek zor.

Genellikle, gövde üzerinde çalışmak daha iyidir. Her büyük sürüm için dallayın - böylece yayın sürümü için hata düzeltmeleri bagajda birleştirilebilen dalda olur. Tüm geliştiriciler bagajda çalışır ve düzenli olarak kod işler (günde en az bir kez).

Yeni kodun düzenli olarak birleştirilmesi, büyük kod yığınlarında büyük bir entegrasyon aşamasında birleştirme ağrısını en aza indirir. Acıyı yayarak, daha az hissedeceksiniz. Ekip üyeleriniz kodu ne kadar sık ​​taahhüt ederlerse, o kadar az birleşmeleri gerekir - çünkü her zaman en son kaynakta olurlar.


2
Bagaj üzerinde çalışmaya tamamen katılmıyorum. Eğer gövde kırılırsa herkes etkilenecektir. Ayrıca büyük bir sürümden sonra dallanmaya katılmıyorum, bir hata iki veya daha fazla sürümü etkiliyorsa, her dalda düzeltirsiniz?
Trasplazio Garzuglio

@ marco-dinacci: Herhangi bir zamanda birden fazla sürümünüz varsa söylediğiniz doğru olabilir. Bununla birlikte, bu hataların düzeltmelerinin bagajda birleştirileceği gerçeğini görmezden geliyorsunuz. Daha sonra diğer sürümler değişiklikleri çekebilir. Gövdenin kırılması ile ilgili. Kodu gövdeye aktarmadan önce, en son kaynağa sahip olduğunuzdan ve değişikliğinizin gövdeyi kırmadığından emin olmanız gerekir. Eğer kırılmışsa, düzeltilinceye kadar taahhütte bulunmamalısınız. Elbette, farklı yaklaşımların artıları ve eksileri vardır.
Lionel

1

TFS 2008/2010'u hiç kullanmadım ama çeşitli forumlarda okuduğumdan sürüm kontrolü için TFS kullanma konusunda çok olumsuzluk var. Bu, bugüne kadar TFS'den uzak durmamı sağladı.

Şu anda SVN ve Git kullanıyorum, ikisini de küçük takımlar veya tek kişilik takımlar için iyi buluyorum, ancak büyük bir takım için kişisel olarak SVN'yi tavsiye etmem.

Gözlerimi PlasticSCM'de gördüm ve yakın gelecekte bunu deneyeceğim.

Sorunuzu cevaplamadığınız için özür dilerim, ayrıcalıklarım izin verseydi bir yorum gönderirdi.


1

Bence git diğer tüm kaynak kontrol yazılımlarını geçersiz kılıyor. Dallanma ve birleştirme kolaydır ve sorunlar varsa, içerilir, ancak çok sık taahhüt, dallanma ve birleştirmeyi nasıl teşvik ettiği ile birçok sorun önlenir. Her kullanıcı repo tam bir kopyasını alır (bu budanabilir, ama oldukça büyük bir kod tabanı ile çalışır ve bu bir sorun değildir), bu yüzden otomatik yedekleme bir şey var. Taahhütler / itme / çekme hızlıdır ve en önemli şeylerden biri dosya adı ve izleme arasındaki bağlantıyı kesmesidir. Dosya verileri, ad ve yol dahil, bir ağaç düğümü tarafından başvurulan ve yollardan bağımsız bir veri bloğudur. Bu sadece daha güvenli olmakla kalmaz, aynı zamanda SVN gibi bir şeydeki bazı "bunu yapma" sorunları da sorun değildir. Geleneksel bir hub yapılandırması veya eşler arası olarak kullanılabilir ve bu kullanımlar aynı kurulumda serbestçe karıştırılabilir. Belgelenmemiş eklemelere karşı şifrelidir. Ve çok hızlı.

Her zaman evde kullanıyorum, sadece belgeleri takip etmek ve bilgisayarlar arasında senkronize etmek için kullanıyorum, çünkü dosya sunucusuna işlem yapmak ve sunucuya yedeklemek veya kaydetmek için olduğundan daha kolay.

Dezavantajı biraz dik bir öğrenme eğrisidir, çünkü insanların kaynak kontrolü ile alışkın olduğu tüm kuralları ince yollarla kırdığı için, ancak kısa bir dik öğrenme eğrisi.


1
Git gerçekten iyi, ama (her şey gibi) herkes ve her şey için en iyi çözüm değil. programmers.stackexchange.com/questions/111633/…
Kale

4
Git Mercurial'ı ne şekilde geçersiz kılar? Özellikle Windows geliştirme ortamında. DVCS'nin benzin bombası fırlatmak ve kutsal bir savaş başlatmak yerine diğer VCS'yi eski yaptığını söylemek daha iyi olurdu.
mcottle

@mcottle - O kadar ileri gitmem. Örneğin SVN, kaliteli dağıtılmamış VCS'nin güzel bir örneğidir. SVN'nin CVS'yi eski yaptığını söyleyebiliriz, ama orada dururdum. Git hiçbir şekilde SVN'yi eskimiş yapmaz - bazıları için iyi, ancak diğer bazı yaklaşımlar için kötü olan tamamen farklı bir yaklaşımdır (daha fazla bilgi için yukarıdaki bağlantıya bakın). Örneğin, hem Git hem de Hg ikili dosyalarla nispeten "emer".
Kale

@ldigas: git ve hg ikili dosyalar için svn'den daha kötü "emer"? İkili dosyalarda da dosya başına ayrıntı düzeyinin ötesindeki değişiklikleri izleyemezsiniz. Ayrıca, her ikisi de svn'yi çoğunlukla eskimiş yapar, svn'nin ne yaptığını tam olarak nasıl yapabileceğini (birkaç belirsiz özellik dışında) ve sonra bazılarını; sadece bu şekilde ayarlamanız gerekir. Svn'yi düşünebilmemin en iyi nedeni, zaten kullandığınız ve geçişin çok acı verici / riskli / pahalı olmasıdır.
tdammers

@tdammers - Trolling tartışmasıyla ilgilenmiyorum. Yukarıdaki herhangi bir puan için biraz google ve oldukça hızlı bir şeye rastlayacaksınız.
Kale

1

Gerçekten takip ettiğimiz ve bize çok yardımcı olduğumuz İyi uygulamalardan bazıları:

1) Yerel olarak dosyanın yazılabilir bir kopyasına sahip olmadığınızdan ve düzenlemek için her zaman kontrol ettiğinizden emin olun. (Bazen yerel olarak çalışmanız gerekiyorsa, EOD'dan önce kaynak kontrolünde birleştirmeyi deneyin.)

2) Küçük önemli kilometre taşlarından sonra dosyalarınızı periyodik olarak etiketleyin.

3) İyi ödeme yapın veya yorumları kontrol edin. Bu, incelediğinizde yardımcı olacaktır, bazen sürümleri açmak ve karşılaştırmak zorunda kalmazsınız.


1

Checkin'leri nasıl yönetirsiniz ve özellik çakışmalarını nasıl önler ve kaynak kontrolü ile bağımlılıkları nasıl yönetirsiniz?

Benim POV'umdan, iki faktörlü görev: bunu teknik (iyi ve kolay ve kurşun geçirmez dallanma | birleştirme | denetim vb.) Ve yönetim (iyi kurulmuş politika "ne" "ne zaman" "nasıl") tarafından yapmak zorundasınız. ALM'de iki veya üç ayırma kodu katmanı: "kararlı" (geçen birim testi), "kararsız" (dahil edilen her özellik bitti, ancak ürün olarak uygulamanın entegrasyon sonrası soruları var / evet, olabilir /) ve " msgstr "çalışma sürüyor". Bu şekilde, uygun Proje Yöneticisi ayrı geliştiricinin ortak çalışmasının parazitini azaltabilir.

TFS'nin (kullanmadığım, kullanmadığım ve kullanmayacağım) Kaynak Kontrol Yönetimi açısından bazı AFAIK sorunları var. Burada sadece James McKay'in bazı metinlerine bağlantı veriyorum:


1

Kaynak kontrolü ile çalışmanın birkaç farklı yolunu açıkça ve kısaca karşılaştıran ve tezat oluşturan gerçekten güzel ve yeni bir makale burada: Kaynak Kontrolü Doğru Yapıldı .

Kaynak kontrolünü kullanmak için tek bir strateji / en iyi uygulama olduğunu düşünmüyorum . Uzun süredir birlikte çalışan olgun takımlar, popüler "en iyi uygulamaları" tam olarak takip etmese bile bu alanda çok daha az "acı" çekiyorlar.

Hangi araçlara gelince ... Neredeyse önemli değil. Asıl önemli olan, ekibinizdeki herkesin kullanımıyla aynı sayfada olmasını sağlamaktır. Bu, herkesin kod satırının nasıl yönetildiğini ve ne yapması beklendiğini anlaması gerektiği anlamına gelir. Her neyse, pratikte genellikle hangi aracın kullanılacağına dair bir seçeneğiniz yoktur. Kullandığınız her şeyden en iyi şekilde yararlanın.

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.