GitHub akışında, özellik dalını başka bir özellik dalına dayandırmak doğru olur mu?


22

Projemizde GitHub Flow'u kullanıyoruz ve çoğu zaman ustadan yeni bir özellik dalı açıyoruz, orada bazı işler yapıyoruz, bir PR açıyoruz, kodu gözden geçiriyoruz ve tekrar usta olarak birleştiriyoruz .

Ancak şu anki çalışmam, üzerinde çalışmakta olan bir başka konuya bağlı feature-branch-A. Şubemi başka bir şubeden yaratmak mı yoksa GitHub Akışının ruhuna aykırı mı?

Bunun alternatifi şubemi ustalara dayandırmak ve yapılan değişiklikleri feature-branch-A(sık sık) yapmaktır.

GitHub akışında hangi seçenek tercih edilir?

Yanıtlar:


24

Bir özellik dalından dal yaptığımda izlediğim iş akışı:

  1. oluşturma feature-branch-Bdanfeature-branch-A
  2. Üzerinde çalışmak feature-branch-B
  3. Daha kaydedilmesini eklenirse feature-branch-Adallanma sonra, rebase feature-branch-Büzerinefeature-branch-A
  4. Çalışmayı bitirin feature-branch-Bve bir feature-branch-Aaraya gelene kadar bekleyin master.
  5. Sonra feature-branch-Abirleştirilir masterrebase, feature-branch-Büzerinemaster
  6. feature-branch-Bİçine birleştirmekmaster

Yukarıdaki iş akışını takip ederek birleştikten mastersonra dallandığınız anlaşılacaktır feature-branch-A. feature-branch-AÇalışmaya başlamak için bir araya gelene kadar beklemeniz gerekmez feature-branch-B. Yine de, karmaşık ağaçları olmayan temiz bir geçmişe sahip olacaksınız.


Bu tam olarak aradığım cevaptı! Bana bunu çözmenin baş ağrısını kurtardın, teşekkürler!
Vance Palacio

Zaten yayınlanmış olan komisyonları yeniden inşa
Sebi2020

8

Özelliği başka bir özellikte oluşturursanız, bunun tamamen iyi olduğunu düşünüyorum.

Ama sık sık yapma. Bunu yapan bir geliştirici görüyorum ve bir ya da iki hafta birleşme için 10 PR attı. Bu, diğer üyeler için inceleme için çok yorucuydu ve birleşmeleri de zordu. Git ağaç yapmayı dene. Bu hata bulmak için bisect ile yardımcı olur.


7

Git-akışının ele alması amaçlanan önemli bir husus, belirli bir dalın rolü ve neyin dallandığı ve birleştiği ile ilgili akıl yürütme yeteneği idi.

İdeal olarak, tüm dallar birleştirildikleri kodekle birleşir. Bu tipik olarak ana hattan bir birleşmedir (git-flow içinde budur dev). Özel dallar dallanma ve birleştirme dev, dallar dal açma ve bir birleştirme ile dev birleştirme master. Sıcak düzeltmeler, daldan ayrılır ve master'dan birleştirilir (bu ek birleştirme ile dev'e geri döner).

Her kodlayıcı, ana dalından dallanır ve bir araya gelir. Bir kodlayıcı gerektiğinde herhangi bir zamanda diğer kodlayıcılardan kod çekebilir .

Bir özellik dalındaki dal "Bir özellik dalındaki bir sorunu çözmenin bu yolunu keşfetmek istiyorum" ise - gayet iyi. Özellik dalından dallanır, bazı kodlar verir ve özellik dalına geri döner (veya atılır).

  1. özellikten dallanma
  2. fikri keşfet
  3. özellik birleştirmek

Ancak kaçınmak istediğiniz şey şuna benzeyen bir şey:

  1. İstenilen özellikten dallanma
  2. kod üzerinde çalışmak
  3. gerekli özellik tamamlandıktan sonra dev birleştirme
  4. özellik dalında işlevselliği (ve ek taahhütleri) doğrulayın
  5. dev ile birleştirmek

Bunun nedeni, başlangıç ​​ve sonun eşleşmemesidir - bunun ne olduğunu ve ne olduğunu anlamak biraz zorlaştırır. İmkansız değil, ama birisinin rolünü anlaması biraz daha zaman alıyor.

Ancak, bu henüz dev'te bulunmayan koda bağlı yeni bir özellikse, akış şu şekilde olmalıdır:

  1. dev den şube
  2. istenen özellikten birleştirme
  3. kod üzerinde çalışmak
  4. gerekli özellik tamamlandıktan sonra dev birleştirme
  5. özellik dalında işlevselliği (ve ek taahhütleri) doğrulayın
  6. dev ile birleştirmek

Bunun dev'den bir dalla başladığını ve dev'den bir birleştirme ile sona erdiğini unutmayın.

Bütün bunlar, muhtemelen yapılacak en iyi şey bir özellikten diğerine bir birleşme yapmaktan kaçınmaktır. Özelliği dallayın, gerekli olan her şeyi yapın ... ve bekleyin.

  1. dev den şube
  2. kod üzerinde çalışmak
  3. gerekli özellik tamamlandıktan sonra dev birleştirme
  4. özellik dalında işlevselliği (ve ek taahhütleri) doğrulayın
  5. dev ile birleştirmek

Bu, en kararlı dal ve kod kümesini sağlar.

Gelecekteki çalışmalar için göz önünde bulundurulması gereken bir husus, uygulama kodu tamamlanmasa bile diğer özelliklerle birlikte çalışabilirlik için gerekli arayüzleri yayınlama özelliğine sahip olmak olacaktır. Bu, dev ile birleştirilecek ve daha sonra gerekli olan özellik, gelecekteki özellik gibi bu arayüzlerden de faydalanabilecektir. Bu, gelecekteki özelliğin ileriye doğru ilerlemesine izin verecektir (arayüzlere karşı kodlama, arayüzleri uygulayan saplamalara karşı test etme), gerekli özelliğin bir araya gelmesi için beklemek zorunda kaldığından daha fazla ilerlemesine izin verecektir.


Üçüncü adımda, dezavantajı, adım 1'in bazı "sahte işler" içermesi gerektiğidir. Benim durumumda required-feature, birleştirilene kadar işlemek için yararlı bir şeyim yok .
Borek Bernard

Hala dallanma konusundaki en sevdiğim makalelerden biri olarak işaret ediyorum: Gelişmiş SCM Dallanma Stratejileri . Merkezi bir sürüm kontrol sistemine odaklanırken, rollerin fikirlerini tam olarak haritaya git-flow ile eşleştiriyor.

Ve sahte kukla olarak, bu son paragrafın orada olmasının nedeni budur. Yararlı olan şey, "iş yapmak için arayüzler sağlamak" olarak çalışan ve tamamlanan bir özelliktir. Sonra hem istenen özellik hem de gelecekteki özellik bu arayüzlerden uzaklaştırabilirdi. Gerekli özellik, arayüzlerin uygulanması konusunda çalışmış olsa da, gelecek özellik, onları saplayabilecek ve bunlara karşı testler yapabilecek ve gerekli özelliğin bir araya gelmesini bekliyor.

İkinci adımın ne kadar kötü olduğunu merak ediyorum. Bir dalda "aynı" bir başlangıç ​​ve bitiş olmaması pratikte bir sorun mu? Beni çok fazla rahatsız edeceğini sanmıyorum ama belki de büyük bir karışıklık faktörü?
Borek Bernard

Branş üzerinden açıkça tanımlanması, ana şubenin hangi şubeye ait olduğuna tarihin işlenmesi ve birleştirilmesi söz konusudur. Git-flow içinde git flow özelliği dallarında açıklanan sistemi takip ediyor olmalısınız . Özellik dalı, gelişme dalından dallanır ve tekrar gelişmeye başlar. Diğer özellik dallarından dallanmaya başladığınızda, o dalın rolünün ne olduğu daha az belirginleşir. Şu anda kodda ilerleyemiyorsanız, gerekli özellik tamamlanıncaya kadar beklemenizi öneririm.

1

Bir özellik dalı normalde gövdeden (gelişme / ana) daha az kararlı olarak kabul edilir, bu nedenle çalışmanızı bir taneye dayandırırsanız, kendinizi normalden daha fazla değişikliklere maruz bırakırsınız.

Ayrıca, eğer dal itilirse normal olarak kaşlarını çattığında, daha iyi bir tarih elde etmek için özellik dallarını ana dallarına yeniden yerleştirmek alışılmadık bir durum değildir; Esas olarak ana şube sahibi için yeni bir kısıtlama ve kendiniz için potansiyel baş ağrıları yaratıyorsunuz.

Bu, buna karşı katı bir kural olmadığını söyledi. Bunlar sonuçta sadece kalıplar ve en iyi uygulamalardır.

Düzenleme: sorunuzun cevapsız kısmı. Özellik dalını, ustalıktan yola çıkarak kendinizle birleştirmek, yukarıda bahsedilen sorunların hiçbirinden kaçınmaz ve aslında daha da karmaşık bir geçmiş yaratabilir.

Böylece eğer ayakkabının içinde olsaydım ve bir özellik yapılıncaya kadar işi erteleyebilseydim, ya da önce başka bir şey yaparsam, bunu yapardım.

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.