“Sık sık” birleştirmek daha mı iyidir yoksa yalnızca tamamlandıktan sonra özellik dallarında büyük bir birleşme olur mu?


40

Diyelim ki çoklu dallar geliştiriliyor Ave Bartan "hata düzeltme" dalı da var C.

Şimdi Czaten "bitti" ve ustayla birleştirildi. Ave Bhala geliştirilme aşamasında olan ve (belki) başka bir hata düzeltme şube usta ile birleştirilmeden önce düzeltilmeyecek.

CYeni özellik dallarında mümkün olan en kısa sürede birleştirme iyi bir fikir midir? Böylece yeni özellikler mastermümkün olduğunca yakın kalacak mı? Yoksa yeni özelliğin kendi “dünyalarında” geliştirilmesine izin vermek, sadece bittiğinde ustayla birleşmesi daha mı iyidir?

Her halükarda çatışmalar olacak, bu yüzden bunları düzeltmek için zaman harcanması gerekiyor.



5
@ dalları bir ana hatta dönüştürmekle ilgili olan @gnat, özellik geliştirilirken ana özellikleri tekrar birleştirmenin "erken anlaşmazlıkları çözmek" için iyi olup olmadığını merak ediyorum.
paul23

1
@ paul23, bunun pratik bir gereklilik olduğunu söyleyebilirim.
Berin Loritsch

3
Açıkçası, kodlamada uygun tasarım kullanmaya başladığımda, modüller yalıtmak ve iyi tanımlanmış bir çalışma modeli oluşturmak gibi versiyonlama sorunlarımın büyük bir kısmı ortadan kalktı. Birleşmeler sırasında çok fazla sorun yaşıyorsanız, başka bir yerde gizlenen daha ciddi bir sorun olabilir. İyi bir tasarım, istenmeyen çatışmalardan kaçınmak için inanılmaz derecede faydalıdır.
T. Sar - Monica'yı yeniden

2
Birleşmeyi daha sonra çok acı verici hale getirmemek için "yeterince" yakın kalmak için düzenli olarak ustadan birleşmek isteyebilirsiniz.
Thorbjørn Ravn Andersen

Yanıtlar:


71

Bir şube ne kadar uzun yaşarsa, ana daldan o kadar uzaklaşabilir ve o kadar karışık ve sonuçta ortaya çıkan birleşme o kadar bittiğinde o kadar karmaşık olur. On küçük ihtilafın 1 büyük ihtilaftan daha kolay çözülmesi kolaydır ve geliştiricilerin çoğalmasını veya boşa harcamasını engelleyebilir. Birleştirmek gerektiğini Verilen masteriçine Ave Bdüzenli; günde bir kez oldukça yaygın bir öneridir, ancak şubelerinizde çok fazla etkinlik varsa, günde birkaç kez birleştirmek isteyebilirsiniz.

Çatışma çözümünü kolaylaştırmaya ek olarak, özellikle bahsettiğiniz Cbir bugfix şubesidir. Bir geliştirici olarak, bir hataya neden olan davranışı yinelemem ya da hatalı verilere dayanarak testler yazmamı sağlamak için şubemden en son düzeltmelerin hepsine sahip olmasını istiyorum.

Her halükarda çatışmalar olacak, bu yüzden bunları düzeltmek için zaman harcanması gerekiyor.

Çatışma olacağını biliyorsanız, farklı bir dallanma stratejisi benimsemek isteyebilirsiniz. Mümkün olduğunca aynı dosyada aynı dosyada birden çok değişiklik yapın; çakışma sayısını azaltır veya ortadan kaldırırsınız. Refactor hikayeleri olabildiğince tamamen bağımsız olmaları için ve birden fazla hikayeyi kapsayacak şekilde dalları yeniden işleyin (şube, özellik ve hikaye her zaman birbiriyle değiştirilemez).


33
Yeniden birleştirme genellikle daha temiz bir taahhüt geçmişi oluşturduğundan, birleştirme veya yeniden düzenleme .
chrylis

11
@chrylis: Eğer iki geliştiricinin aynı dalda çalıştığı anlamına gelir "dallar çok katlı hikayeleri örtüyorsa" çekilirse yeniden doğma tehlikeli olabilir .
meriton - grevde

9
resmi belgelerdeki @meriton: Deponuzun dışında kalan taahhütleri yeniden düzenlemeyin ve insanlar bunlara dayanarak çalışabilir. Bu kılavuzu izlerseniz, iyi olacaksınız. Bunu yapmazsanız, insanlar sizden nefret eder ve arkadaşlarınız ve aileniz tarafından puanlanırsınız. LOL
Xtreme Biker

6
@ XtremeBiker: Git'teki rebase geçmişi değiştiriyor. Git bu konuda gerçek hayat gibi çalışır: tarihi değiştirmek için bir komploya ihtiyacınız var. Git'in havuzunda düzenli olarak yeniden yapılandırılan bir dal var ve bu oldukça halka açık. Bunun işe yaramasının nedeni bir komplo olması: bu şubeyi kullanan herkes tarihi belli zamanlarda yeniden yazmaya karar veriyor, bu yüzden her şeyin o zamanlar tarafından birleştirilebilecek bir konumda olduklarından emin olacaklar.
Jörg W Mittag

1
@ paul23 Efendilere teslim etmeden önce A ve B'yi yeni bir paylaşılan şubeye teslim etmeyi ciddi olarak düşünün. Her ikisi de radikal revizyonlarsa, kombinasyonu master'a vermeden önce bir test turu için bir araya getirmelerini istersiniz. Kendinden eminsen birini doğrudan ustaya getirebilir ve diğerini de yeni güncellenmiş bir şubeye teslim edebilirsin. Birleşmenin kötü gitmesi ihtimaline karşı ikinci özelliğin orijinal koduna bakmak isteyebilirsiniz veya bir şeyi yeniden tasarlamanız gerekir.
Sinc

11

Amacınızın, nihayetinde A, B'yi master'a geri getirmek ve tek bir kod tabanını sağlamak olduğunu varsayarsak, ustadan çok uzaklaşmak asla iyi bir fikir değildir. Ustadan çok uzun süre sapma, özellikle hata düzeltmeleri ve diğer gelişmeler A, B geliştirilirken ustayla birleştiğinde kesinlikle çatışmalara neden olur.

Aşağıdakilere benzer stratejileri göz önünde bulundururum

  1. A'dan sorumlu kim varsa, B ustayı yakından izlemeli ve değişikliklerde birleşmelidir.
  2. Daha da iyisi, eğer bir otomasyon kurmak ve test etmek istiyorsanız, A, B'nin master ile birleştiğinden ve testleri her gece geçtiğinden emin olun.
  3. Diğer cevaba göre yorum, A, B geliştirmek için biraz zaman alabilir gibi görünüyor. Bu durumda, A, B'nin birbirlerini de birleştirmelerini sağlayabilirsiniz, böylece sonunda her ikisini de efendiye dahil etmek konusunda büyük sıkıntı yaşamayacaksınız.
  4. Daha yüksek düzeyde, neden 2 ayrı uzun gelişim hattına ihtiyaç duyduğunuzu düşünün. Küçük parçalara ayrılabilir misiniz? Ayrı mikro hizmetlere girebilir misiniz?

5

Genellikle çoğu zaman büyük olandan daha iyidir.

Küçük, daha sık, çekme istekleri neredeyse her zaman daha iyidir.

Öncelikle yapılandırma bayraklarını kullanmaya başladım, böylece daha küçük erken çekiş istekleri yapabilirim, böylece sırayla kodu daha kolay birleştirebilirim, ancak özelliği devre dışı bırakabilirim. Çekme talebi ne kadar küçük olursa, toplam çekme istekleri olsa bile kodu incelemesi o kadar kolay olur. Herhangi bir türden çoğu insan, büyük çekme taleplerinin anlamlı değerlendirmelerini yapamaz. Büyük bir kod değişikliğinin tüm olası etkilerini anlamak için kişinin zihinsel RAM'i üzerinde çok zor.

Bir yapılandırma bayrağı oluştururken fazladan masraf vardır, bu nedenle daha küçük özelliklerde buna değmez. Ama sonra çekme isteğin yine de küçük olacak.

Bununla birlikte, özelliğin bir kerede serbest bırakılması gereken durumlar olabilir. O zaman bile, bu amaç için yapılmış başka bir şubeye daha küçük çekme istekleri yapmak daha iyi olabilir.

Meslektaşlarımın çoğu, birileri büyük bir çekme isteği yarattığında ve çoğu zaman haklı olarak inledi.

Ayrıca, bazen kiraz toplama işlerini ayrı bir dallara ayırmam gerektiğini de unutmayın. Kirazın toplanması gereken şey tek bir işleme sokulabiliyorsa, onu diğer dallara kaydırmayı kolaylaştırır. Bu, gerçekten az sayıda komisyona sahip olmanın daha iyi olduğu bir durumdur, ancak kirazınız toplanırsa tam olarak standart bir işlem değildir.


1
Özellik bayrakları pahalı olabilir (45 dakikada 450 milyon ABD doları). Bu örnek aynı zamanda Bob Amca tarafından da belirtilmiştir (ancak herhangi bir şekilde (beklediğiniz gibi) herhangi bir teknik olmadan).
Peter Mortensen

1
Evet, genellikle zor olmasa da, sonunda onları çıkarmanın ek yükü var. Biri onları daha uzun süre koruyabilir, ancak bayrak daha fazla kullanım sağlıyor. Tesadüfen veya takip etmeden hap yaparsanız işler kötü gidebilir. Büyük bir çekme isteğinin gözden geçirilmesi zorlaştığında işler ters gidebilir. Öte yandan, bazı insanlar çalıştıkları uygulamaya yapılandırma bayrağı gibi bir şey ekleyebilecek konumda olmayabilirler. Genellikle UAT ve bir özelliğin kullanıma sunulmasına yardımcı olur.
Mark Rogers,

3

Martin Fowler tarafından Refactoring'te verdiği tavsiye, hiçbir zaman bir dalın bir günden daha uzun süre masterdan ayrılmamasıdır. IIRC, küçük bir değişiklik yapmalı, hiçbir şeyi kırmadığınızdan emin olmak için test etmeli ve sonra tekrar birleştirmelisiniz.


2
Peki Ave Buygulamanın nasıl yürüdüğü konusunda büyük radikal yeni revizyonlar düzenlediler, bir ay içinde "yapılmıyorlar". Ancak onlar da bitmeden önce işe yaramazlar ...
paul23

8
Yapılmadan önce işe yaramayabilirler - tam sonuca doğru bir adım olarak ve gelecekte gereken işi azaltarak değer sağlarlar. Özellik geçişleri, soyutlamadan dallanma ya da sadece kullanıcı arayüzü kısmını en son yapmak gibi teknikleri kullanmak, eksik çalışmayı ustalıkla güvenli bir şekilde birleştirmek mümkün olmalıdır.
bdsl

1
Bu nedenle, yerel şubenizi ana branştaki herhangi bir değişikliğin üstüne yeniden inşa etmek, uzun vadeli gelişim için kullanışlıdır. Çalışmanızı en son dallanmış gibi tutar
NKCampbell

2

Bitmiş ancak kullanıma hazır olmayan gerçekten uzun süren değişiklikler için başka bir seçenek de onları bir özellik bayrağının arkasına koymaktır; Ardından kullanıma hazır olduklarında özellik bayrağı kaldırılabilir.


1
Özellik bayrakları = zombi kodu (dirilene kadar)?
Peter Mortensen

@PeterMortensen En kısa zamanda bayrakları kaldırmayı hedeflemelisiniz, ancak belirli durumlar için işe yarayabilir
Qwertie

3
Bayrak, en az bir kişi için açık olup olmadığını değil @PeterMortensen
Ian
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.