Daha İyi Bir Git İş Akışına Doğru
(black7375.tistory.com)Git’i daha verimli kullanmak için yöntemleri bir araya getirdim.
- Repo yapısı
- Git dağıtık bir sürüm kontrol sistemi olduğu için merkezi, GitHub/GitLab tarzı, hiyerarşik gibi çeşitli şekillerde yapılandırılabilir
- Dal yapısı
- GitHub Flow:
mainetrafında özellik veya hata düzeltme dalları oluşturulup geri bildirim alındıktan sonra birleştirilen yapı - Git Flow: sık dağıtımdan ziyade daha geleneksel geliştirme için uygundur
- Feature branch oluşturulup
developdalına birleştirilir - Yeterince olgunlaşan
developdalı içinrelease(stage) dalı açılır; burada yalnızca hata düzeltmeleri yapılır ve sonrasındadevelopilemastera birleştirilir - Sürüm hazırlığı tamamlandığında
masterdalına birleştirilir ve sonrasında yalnızca hotfix yapılır
- Feature branch oluşturulup
- GitLab Flow: karmaşık Git Flow ile fazla basit GitHub Flow arasında bir ara model
- Git Flow’da geçici olarak tutulan
releasedalı yerine kalıcı birstagedalı kullanılır - Hotfix’ler
productionvestagee, hata düzeltmeleri isestagevedevelopa yansıtılır
- Git Flow’da geçici olarak tutulan
- Perforce Stream: birden fazla sürümü yönetmek gerektiğinde avantajlıdır
releasete hata düzeltilirse bu değişiklikmain-developa yayılırdevelopta özellik geliştirildiyse çakışmalar giderilipmaine yansıtılır
- Trunk tabanlı:
main(master) dalını daha verimli kullanma yaklaşımıdır ve çoğunlukla büyük teknoloji şirketleri tarafından kullanılırmainuzun süre korunur, sürüm dallarında ayrıca hata düzeltmesi yapılmaz- Özellikler flag kullanılarak kapalı durumda birleştirilir ve böylece kod tabanı her zaman güncel kalır
- GitHub Flow:
- Commit
- Konvansiyon: genelde Angular konvansiyonu yaygındır ama ekip içinde anlaşmaya göre emoji vb. de kullanılabilir
- Birim: mümkün olan en küçük birimlerle commit atılmalı, ama bunun da ekip bazında ne olduğu kararlaştırılmalıdır
- Değişiklikler hunk bazında ayrıştırılarak stage edilebilir
- Değişiklikler delta düzeyinde karşılaştırılabiliyorsa kullanışlı olur
- Spekülatif commit ve doğrusal geçmiş: context korunurken sık commit atıp commit geçmişini doğrusal tutma yöntemi
- Stash ya da prototip denemeleri gibi, yapılan işi saklamak gerektiğinde her seferinde kaydet
- Checkout gereken her yerde checkout yapıp commit atmaya devam ettikten sonra
rebaseile doğrusal yapı korunur - git-branchless adlı araç bunu kolaylaştırır
git sl: anonim dalları izleyerek commit geçmişini iyi görselleştirirgit prevvegit next: önceki/sonraki birime checkout yapmayı kolaylaştırırgit sync:mainüzerine rebase edergit move: commit’i istenen yere taşıyabilirgit restack:rebaseya dacommit --amendgibi işlemlerle commit sırası bozulduysa düzeltirgit undo: geri alma imkânı sağlar
- Birleştirme
- Patch stack: özellik[1/3], özellik[2/3], özellik[3/3] gibi parçalara bölerek inceleme yapılan yöntem
- Birinci sınıf çakışma: Git ile uyumlu Jujutsu, çakışmaları commit’e kaydeder; böylece bir kez çözülmüş çakışmaların sonradan yeniden yaşanma olasılığı azalır
- 3-way diff: Jujutsu’da çakışma olduğunda Base-Ours diff olarak, Theirs ise snapshot olarak gösterilir; bu sezgiseldir. Ancak IDE/editör sözdizimi vurgusu ya da Base-Their diff görmek isteyen ihtiyaçlar olabilir
- İkili dosya çakışması: Git, binary dosyalarda çakışma olunca çözümü kullanıcıya bırakır; bu yüzden kişisel olarak Base ve Their dosyalarını oluşturan basit bir araç yapılmış
- Patch ve e-posta: daha geleneksel(?) bir birleştirme yaklaşımına giriş
git request-pull, pull request oluşturmaya yarayan komutturgit send-mailile patch e-posta olarak gönderilebilir,git amile de patch uygulanabilir
- Diğer yönetim yöntemleri
- Worktree: Git geçmişi paylaşılmaya devam ederken, SVN dalı gibi yalnızca çalışma dosyaları farklı yerlere checkout edilerek işler eşzamanlı yürütülebilir
- Git LFS: büyük dosyaları yönetme yöntemi
- Kısmi çoğaltma ve kısmi checkout: repository kısmen clone edilerek indirme süresi azaltılabilir, ayrıca yalnızca istenen dizinler checkout edilerek çalışılabilir
- Scalar: Microsoft’un çabalarıyla çok büyük repository’leri daha kolay yönetmeye yardımcı olur
Henüz yorum yok.