İçeriğe geç
Muhammet Şafak
en

Hangi Git akışı? Gitflow, GitHub Flow ve trunk-based

Gitflow, GitHub Flow ve trunk-based development arasında ürünün şekline, ekip büyüklüğüne ve deploy temposuna göre seçim yapmak için üç soru ve bir karar matrisi.

Tan, elinde bir planla

Git · Workflow

Hangi Git akışı? Üç soruyla karar

Gitflow da GitHub Flow da doğru; farklı ürün şekilleri için. Trunk-based ise bir tempo kararı. Cevap toplantıda değil, ürünün kendisinde duruyor.

Muhammet Şafak

İki modelin mekaniği

Gitflow ve GitHub Flow

Gitflow ve GitHub Flow
KonuGitflowGitHub Flow
Branch'lermain, develop, feature/*, release/*, hotfix/*Tek main ve ondan dallanan kısa ömürlü branch'ler
SürümSürüm odaklı; her yayın için ayrı release branchSürüm kavramı yok; tek yaşayan sürüm prod'dakidir
HotfixAyrı bir hotfix/* hattıSıraya giren bir PR
Doğal habitatMobil uygulama, SDK ve kütüphane, on-premise ya da packaged yazılımWeb uygulaması ve SaaS, iç araçlar, API servisleri

Üç soru, bir varsayılan

Branch stratejisini ürün seçer

  1. Adım 1: Aynı anda kaç sürüm canlı?Bir tane → GitHub Flow. Birden fazla → Gitflow.
  2. Adım 2: Müşteri deploy frekansımı görüyor mu?Hayır, istediğim zaman deploy ediyorum → GitHub Flow. Evet, sürümler arası bir sözleşme var → Gitflow.
  3. Adım 3: Hotfix bir release'den geçmeli mi?Hayır → GitHub Flow. Evet → Gitflow.
  4. Adım 4: Cevaplar karışıyorsaÜrünün şekli henüz oturmamıştır; geçici olarak GitHub Flow. Ondan Gitflow'a geçmek, tersinden küçük bir göçtür.

Ekip ve deploy temposu

Üç akış, dört durum

Dikey eksen ekip büyüklüğünü, yatay eksen deploy temposunu gösterir. Hücreler Production'da Git rehberinden ve trunk-based yazısından derlendi.

Küçük ekip ↔ Büyük ekip

  • Gitflow

    Versiyonlu ürün

    • Mobil uygulama, App Store dağıtımı
    • Versiyonlu paket ya da kütüphane: release branch yararlı
  • Trunk-based

    Rehberde: 50+ geliştirici, günde 10+ deploy

    • Continuous deployment kültürü
    • Feature flag altyapısı kurulu
  • GitHub Flow ya da daha basiti

    3 kişilik freelance ajans

    • PR'sız doğrudan çalışmak da seçenek
    • 3 kişiden küçük ekipte trunk-based yatırımı amorti olmaz
  • GitHub Flow

    3-15 kişilik takım

    • SaaS, CI/CD kurulu
    • Günde bir-iki deploy

Planlı, sürümlü yayın ↔ Sık deploy

Production'da Git rehberinden

Karar tablosu

Karar tablosu
DurumTavsiye
Mobil uygulama, App Store dağıtımıGitflow
SaaS, küçük-orta takım, günlük deployGitHub Flow
3 kişilik freelance ajansGitHub Flow
50+ geliştirici, deploy günde 10+Trunk-based
Versiyonlu paket ya da kütüphaneGitflow
Plansız, “ne lazımsa o”GitHub Flow

Trunk-based'e ne zaman

Yazılarda iki ayrı eşik

  • Trunk yazısıDeploy frekansı haftada 5+ olduğunda release branch bir düzen değil, bir engel olmaya başlıyor. Trunk-based'in savunulduğu projeler günde 3-10 deploy yapıyor.
  • Gitflow yazısıGünde 5+ deploy'da GitHub Flow'un kısa ömürlü branch'leri bile sürtünme kaynağı oluyor; o eşikten sonra trunk-based.
  • İpucuHaftada 1 deploy yapan bir ekip için geçmeye zorlayan bir sebep yok; Gitflow ya da GitHub Flow o ritimde sorunsuz çalışıyor.

Trunk-based hedefleri

Tempoyu taşıyan rakamlar

  • 5-10dakikaHedef: merge'den prod'a pipeline süresi
  • 1-2günEşik: feature branch'in en uzun ömrü
  • 200-400satırHedef: tek mantıksal değişiklikli PR boyu
  • 60-90dakikaBu boyutta bir PR'ın review süresi
Tan, eli çenesinde düşünürken

Geçmeden önce

Trunk-based'in dört temeli

  • Yeşil trunk, sözleşme seviyesinde: CI ve zorunlu PR check'leri garanti eder (bekliyor)
  • Feature flag altyapısı: yarım iş koda girer, kullanıcıya kapalı kalır (bekliyor)
  • Hızlı pipeline: merge'den prod'a 5-10 dakika (bekliyor)
  • Kısa ömürlü branch kültürü: açıldığı gün ya da ertesi gün kapanır (bekliyor)

Trunk-based ve ölçüm

Geçince ölç, şu sahnelerde geçme

Yap

  • Lead time for changes için hedef: p50 < 1 saat
  • Change failure rate için hedef: < %15
  • Mean time to restore için hedef: < 30 dakika
  • Metrikler kötüleşirse önce CI ve flag disiplinine bak

Yapma

  • Regüle sektörde zorunlu pre-prod sign-off varken geçme
  • Aynı anda 3.x ve 4.x desteklenecekse geçme
  • CI yeşilini garantileyemeyen ekipte geçme
  • 3 kişiden küçük, haftada 1 deploy yapan ekipte geçme

Eşleşme hataları

Modeli yanlış yere koymak

  • Anti-patternÜç akışı karıştırmak: develop branch, feature flag ve release branch bir arada. Üç ayrı disiplinin yarısını uygulamak, hiçbirinin avantajını almamak demek.
  • SaaS'ta Gitflowdevelop gereksiz bir gölge prod olur; PR'lar iki kez merge edilir. Kazanılan izolasyon, ödenen sürtünmeye değmez.
  • Packaged üründe GitHub FlowEski sürümdeki müşteri hotfix istediğinde ekip olmayan bir bakım branch'ini arar.
  • Karma modelİki modelden birini doğru uygulamak, üçüncü bir model uydurmaktan her zaman ucuzdur.

Karar

Git workflow'unu ürüne göre seçin; ürünü workflow'a göre değil.

Seçim “hangisi modern” değil, “ürün şekliniz hangisini doğal kılıyor” sorusudur. Sürüm sayısı, müşteri tipi ya da deploy frekansı değiştiğinde karar yeniden açılır.

Paylaş ve indir

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Escile kapatPagefind ile güçlendirildi