Master'dan çalışma şubeme değişiklikler mi çekiyorsunuz?


16

İkimiz bir şey üzerinde çalışıyoruz. Bu şube yapısını kullanıyoruz

  • usta
  • dev-A
  • dev-B

İkimiz de ayrı dallar üzerinde çalışıyoruz (dev-A, B) ve işimiz bittiğinde - ustalıktaki değişikliklerimizi destekliyoruz.

Ancak bunun dezavantajı, diğer geliştiricinin yaptığı değişiklikleri alamayız. Ana ağaçta her şey var - ancak diğer geliştiricinin yaptığı en son güncellemeleri alamıyoruz.

Bunu çözmenin bir yolu var mı yoksa şube yapımızı değiştirmeliyiz (özellik başına mı?)?

Yanıtlar:


16

Geliştirici dallarının iki ana senaryoda kullanıldığını gördüm:

  1. Bu dalların aslında depo çatalları olduğu açık kaynaklı topluluk, böylece proje sahipleri ana depoya erişimi kilitleyebilir ve çekme istekleriyle entegrasyon gerektirebilir. Bu, katkıda bulunanlar için hayatı zorlaştırır, ancak elbette tam olarak önemli olan koruyucular için çok daha kolay ve bu, GitHub'da çok başarılı bir model.

  2. Sürekli entegrasyonu olmayan ve dağıtımlarında istikrarsızlık ya da yapılarında daha da kötüsü olan bir sicile sahip olmayan ekipler ve kuruluşlar. Bu ekipler genellikle geliştirici dallarını ana hattın istikrarını korumak için bir yol olarak kullanmaya çalışırlar ve sonuç - tipik olarak - serbest bırakılmadan önce uzun ve çok acı verici birleşme periyodu, ardından daha uzun ve daha acı verici bir stabilizasyon periyodudur. serbest bırakıldıktan sonra gerçekleşmez .

Bunun neden CI'ye ihtiyacınız olduğuna dair bir rant olmasını istemiyorum, ancak sorularınızdan, değişikliklerinizi yeterince sıklaştırmamanız gerektiğini bildiğiniz açıktır , bu nedenle IMO'nun bu konuda dans etmenin bir anlamı yoktur.

Aslında, dış geliştiricilerin değişikliklerini "geçmesi" gereken coğrafi olarak dağıtılmış bir ekipte çalışmıyorsanız, geliştirici başına şube modeli gerçekten bir anlam ifade etmiyor. Özellikle git ile mantıklı değil, çünkü her geliştiricinin teknik olarak zaten kendi havuzu var. Çoğu kuruluş, günde birkaç kez olduğu gibi çok sık entegre olmalıdır.

Şu anda 4 ayrı takıma ayrılmış yaklaşık 35 katılımcıdan oluşan bir grubun parçasıyım, çoğu insan günde en az 2-3 kez, bazı insanlar 10-15 kez kontrol ediyor; birkaç dakikadan fazla kırık kalmaları için kırık ve son derece nadir yapıları görmek olağandışıdır. Git, birleştirmeleri o kadar zahmetsizce ele alır ki, çoğu zaman uzak geliştirici şubeleri gereksiz ek yük oluşturur. Sadece çekmeden önce yerel olarak çekin, birleştirin ve tamamlama testleri yapın, bu basit.

Ana dalın kararlılığını korumak için entegrasyonu kesinlikle ertelemeniz gerekiyorsa , kanıtlanmış tipik model, Başarılı Git dallanma modelinde açıklandığı gibi, bazen geliştirme dalı olarak da adlandırılan kararsız bir dal kullanmaktır . Geliştiriciler günde en az bir kez bu dalda başarılı bir şekilde birleşemezlerse (sadece kurması , kusursuz çalışmaması gerekir ), bir revizyon kontrol problemi değil kalite / disiplin probleminiz var; entegre olmayan geliştirici dalları kullanarak bunu örtmek sadece sorunu çözer ve bunu yaparak, gerçekte nihai birleşmeleri olması gerekenden çok daha acı verici ve kararsız hale getirir.

Özellik dalları en kötü değil, ama IMO çok az proje onları garanti edecek kadar büyük; projeniz çok büyükse (yani bir kerede tonlarca özellik üzerinde çalışılıyorsa), kaynak kontrolü ile ilgili problemi kağıda dökmekten ayrı otonom bileşenlere bölmekten daha iyi sonuçlar görürsünüz.

İstersen bu tavsiyeyi görmezden ve birçok ekipleri, ama dallanma modeli yukarıda bağlantılı nedenlerinden biri bu kadar popüler ve başarılı o işe tasarlanmış olmasıdır ile karşı değil, sürekli entegrasyon.


Sanırım sürekli entegrasyonun önemi hem her şeyi bir dala entegre etmek hem de günlük / saatlik yapılar (Jenkins veya benzeri) kullanarak yeterince vurgulanamaz.
sleske

15

Çalışma şubenizde:

git commit -am "Committing changes before merge"
git merge master

diğer geliştiriciler dalından da birleşebilirsiniz

git checkout dev-A
git merge dev-B

Ne yapacak olan birleştirme geliştirme dalına usta değişiklikleri.


Evet - bu bir yol. Git'in bunun için zarif bir iş akışı olmasını umuyordum.
Utkarsh Sinha

2
İyi git genellikle her geliştiricinin kendi yerel çalışma havuzuna ve geliştiricilerin itip çektiği ortak bir merkezi depoya sahip olması durumunda en iyi sonucu verir. Bu şekilde, her biri aynı dallarda çalışabilir ve merkezi depoya iterek değişiklikleri çekip koyabilirsiniz. Muhtemelen aradığınız zarafet budur. git, bir çakışma olmadığı sürece birleştirmeyi sizin için otomatik olarak gerçekleştirecektir. git flow iş akışı için güzel bir ektir.
scaryrawr

Mükemmel. Birkaç yerde bu kesin soru için çok uzun cevaplar var, ancak kullanıma git merge masteralınmış özellik dalındayken aradığım şey. Teşekkürler
Drenai

3

Dev-A ve dev-B farklı proje için farklı dallarsa, @scaryrawr'ın yanıtladığı şey en iyisi olacaktır.

Ancak dev-A ve dev-B aslında tam olarak aynı kodsa (aynı proje), bir alternatif, her ikisinin de dallardan birinde çalışması olacaktır. Örneğin, 'devWork' adlı bir ana dal oluşturursunuz. İkiniz devWork'u kontrol edin, üzerinde çalışın, değişiklikleri taahhüt edin ve itin. Aktarılan değişiklikler Master'da değil, devWork'te, dalın diğer kullanıcılarının itilen değişiklikleri almak için yerel olarak bir PULL yapmaları gerekir.

Daha sonra devWork'taki işleri Master'a geri almak için standart yöntemleri takip edebilirsiniz.

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.