Git-flow ile github-flow'un artıları ve eksileri nelerdir? [kapalı]


125

Yakın zamanda GitLab kullanmaya başladık.

Şu anda "merkezi" bir iş akışı kullanıyor.

Github akışına geçmeyi düşünüyoruz ama emin olmak istiyorum.

Git-flow ile github-flow'un artıları ve eksileri nelerdir?

Yanıtlar:


133

GitMinutes 17. bölümde, Nicholas Zakas'ın " Bir şirketin içindeki GitHub iş akışları " hakkındaki makalesinde tartışıldığı gibi :

Git-akışı , Vincent Driessen tarafından oluşturulan ve bu akışı yönetmek için bazı Git uzantılarının eşlik ettiği Git'teki değişiklikleri yönetme işlemidir .
Git-akış yatan temel düşünce her zaman farklı bir amaç için her biri birkaç ayrı şube sahip olmaktır: master, develop, feature, release, ve hotfix.
Özellik veya hata geliştirme süreci, nihayet yayınlanmadan önce bir daldan diğerine akar.

Katılımcılardan bazıları git-flowgenel olarak kullandıklarını belirtmişlerdir .
Bazıları onunla başladı git-flowve ondan uzaklaştı.

Uzaklaşmanın birincil nedeni, git-flowsürecin sürekli (veya neredeyse sürekli) bir dağıtım modelinde ele alınmasının zor olmasıdır.
Genel fikir git-flow, sürümlerin birkaç haftada bir yapıldığı daha geleneksel sürüm modelindeki ürünler için iyi çalıştığının, ancak günde bir veya daha fazla yayın yaptığınızda bu sürecin önemli ölçüde bozulduğudur .

Kısacası:

Mümkün olduğunca basit bir modelle başlayın (GitHub akışının eğiliminde olduğu gibi) ve gerekirse daha karmaşık bir modele doğru ilerleyin.


GitHub-Flow'a dayalı basit bir iş akışının ilginç bir örneğini şu adreste görebilirsiniz: " Basit bir git dallanma modeli ", ana unsurları şunlardır:

  1. master her zaman konuşlandırılabilir olmalıdır.
  2. özellik dalları aracılığıyla yapılan tüm değişiklikler (çekme isteği + birleştirme)
  3. çatışmaları önlemek / çözmek için yeniden ödeme; Birleştirmekmaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f666c6f772d32303133303932362d3139333431392e706e67


Daha eksiksiz ve sağlam bir iş akışı için gitworkflow'a (tek kelime) bakın .


88

Tüm modeller yetersiz olduğundan herkesin takip etmesi gereken sihirli bir iş akışı yoktur. Bunu söyledikten sonra aşağıdaki noktalara göre yazılımınız için uygun modeli seçebilirsiniz;

Üretimde birden çok sürüm - Git-flow kullanın

Kodunuzun üretimde birden çok sürümü varsa (yani İşletim Sistemleri, Ofis Paketleri, Özel uygulamalar, vb. Tipik yazılım ürünleri) git-flow'u kullanabilirsiniz. Bunun ana nedeni, bir sonraki sürümü geliştirirken üretimde önceki sürümleri sürekli olarak desteklemeniz gerekmesidir.

Üretim basit yazılımında tek sürüm - Github akışını kullanın

Kodunuzun her zaman üretimde yalnızca bir sürümü varsa (ör. Web siteleri, web hizmetleri, vb.) Github-flow'u kullanabilirsiniz. Bunun ana nedeni, geliştirici için karmaşık şeyler yapmanıza gerek olmamasıdır. Geliştirici bir özelliği bitirdiğinde veya bir hata düzeltmesini tamamladığında, hemen üretim sürümüne yükseltilir.

Üretimde tek sürüm ancak çok karmaşık yazılım - Gitlab-flow kullanın

Facebook ve Gmail gibi büyük yazılımlar, üretime geçmeden önce, şubeniz ile ana şubeniz arasında CI / CD> araçlarının çalışabileceği dağıtım dallarını tanıtmanız gerekebilir . Fikir, milyonlarca insan tarafından kullanıldığından bu yana üretim versiyonuna daha fazla koruma getirmektir.


7
Listeye sadece "Gitdmz-flow" / "Git DMZ Flow" ekleniyor
Robert Fey

1
Başvurulan şirketler ana hat tabanlı bir sistem kullanıyor. paulhammant.com/2014/01/08/…
PatrickWalker

1
Git DMZ akışı, Gitflow'a daha çok benzer ve DMZ dalı, geliştirme dalı gibidir. Bu yüzden özel bir şey hissetmiyorum.
Gayan Pathirage

2
Anladığım kadarıyla Git-Flow, çoklu üretim sürümüyle iyi çalışmıyor. Düzeltme stratejisi, yalnızca bir üretim sürümünüz olduğunu varsayar ve ilgili sürüm dalında düzeltme yaparsınız (ve daha sonra bunu geliştirme dalında yeniden birleştirirsiniz). Birden fazla üretim dalında bulunan bir hatayı nasıl düzeltebileceğinize değinmiyor gibi görünüyor.
Adrian Shum

5
@GayanPathirage Aslında öyle değil. 1. Master'da "klasik" GitFlow etiketleri. Düzeltme dalı, yalnızca en son üretim sürümüne (ana sürümden) karşı bir düzeltme yapmanız içindir. 2. "yayın dalı", aslında yayın öncesi önizleme dalı olan Gitflow'da başka bir şey anlamına gelir (geliştirme dalından dallanma ve gerçekten yayınlandığında ana olarak birleştirmeyi amaçlayan). 3. Bahsettiğiniz şey GitFlow'da "destek dalı" denen bir şeydir (GitFlow'dan hoşlanmamamın bir nedeni de bu: geleneksel olmayan terminoloji). Ancak yine de deneysel bir akış (yani bunu Gitflow Girişlerinin çoğunda görmüyorsunuz)
Adrian Shum

38

Git-flow modelini bir yıldan fazla bir süredir kullanıyorum ve sorun değil.

Ancak bu gerçekten uygulamanızın nasıl geliştirilip dağıtılacağına bağlıdır.

Yavaş geliştirme / dağıtım akışına sahip bir uygulamanız olduğunda iyi çalışır.

Ancak örneğin GitHub gibi hızlı bir geliştirme / dağıtım akışına sahip bir uygulamamız var, her gün ve bazen günde birkaç kez dağıtıyoruz, bu durumda git-flow bence her şeyi yavaşlatma eğilimindedir ve ben GitHub kullanıyorum akar.

Dikkate alınması gereken diğer bir şey de git-flow standart git değildir, bu yüzden yapabilirsin ve yapabilirsin dediğimde, gerçekten demek istediğim, bilmeyen geliştiriciler bulacaksın ve sonra öğrenme eğrisi var. işleri berbat etme şansı. Ayrıca yukarıda belirtildiği gibi, birisi git-flow kullanımını daha kolay hale getirmek için bir dizi komut dosyası geliştirdi, böylece tüm komutları hatırlamanıza gerek kalmaz, komutlarla size yardımcı olur, ancak asıl akışı hatırlamak sizin işinizdir , Bir geliştirici bunun bir düzeltme mi yoksa özellik mi olduğunu bilmediğinde veya daha da kötüsü akışı hatırlayamadığında ve işleri doldurduğunda birden çok kez karşılaştım.

Mac ve Windows SourceTree için git- flow'u destekleyen en az bir GUI vardır .

Bu günlerde, basitliği ve yönetimi kolay olması nedeniyle GitHub akışına daha çok eğiliyorum. Ayrıca, "sık sık erken dağıtma" nedeniyle ...

Bu yardımcı olur umarım


+1. Size katılıyorum.
VonC

2
GitHub akışı Git-Flow içindedir. Sürekli entegrasyona ve sürekli dağıtıma ihtiyacınız varsa, geliştirme şubesi ile olabildiğince çok çalıştırabileceğinizi düşünün. Her özellik geliştirme dalından ayrılmıştır. Karmaşık dağıtım modelleriniz olmadıkça ana dala veya sürüm dallarına ihtiyacınız olmayabilir. (ör. 1.1 sürümünüz başka bir istemcide yayında, 1.2'niz başka bir istemcide yayında ve şu anda yeni istemciniz için 1.3'ü geliştiriyorsunuz) 3 istemci de ilgili sürümlerinde hata düzeltmeleri ve değişiklikler isteyecek.
Gayan Pathirage

Merhaba Diego ve cevabınız için teşekkür ederim. Çoklu sürüm bakımı ne olacak? Git Flow ile bunu kolayca yapıyor musunuz? Destek şubelerine ihtiyacınız olduğu için bunun zor olduğunu duydum! Modelin buna uygun olduğuna inanıyor musunuz?
Luis Gouveia

1
Merhaba Luis, bence modeli çalıştırabilirsiniz, ancak yine aynı şeyi standart bir git iş akışıyla başarabileceğinizi hissediyorum.
Diego Antunes

1
Aslında @LuisGouveia, sorunuz ve yukarıdaki cevabımdan beri git-flow'un mükemmel çalışacağı bir projeyle karşılaştım ve projenin sahibi benim. Buradaki fikir, git flow release...uygulamayı dağıtmak için github eylemleriyle birlikte kullanmaktır. Orijinal cevabımda, günde birkaç kez yayınladığımızdan bahsetmiştim, bu git-flow kullanırken sorunlara neden oldu. Git-flow'un bu projede iyi çalışacağını düşünmemin nedeni, git-flow'u kullanmanın en büyük satış noktalarından biri olan önceden tanımlanmış bir yayın döngüsüne sahip olmamızdır.
Diego Antunes
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.