DevOps Foundations · Modül 4: Git ve ekip çalışma akışı
Commit, Dal ve Birleştirme
Paylaşılan tarih ekibin ortak hafızasıdır. Bu ders commitleri küçük, dalları ucuz yapar; birleştirme sıkıcı kalır.
10 dk okuma
Kazanımlar
- Küçük, adlı ve bağımsız geri alınabilir commitler yazmak
- Paylaşılan kodun uzun ömürlü çatalları yerine kısa özellik dallarını seçmek
- Hızlı-ileri ile gerçek birleştirmeyi tahmin ederek korkusuz birleştirmek
- git log çıktısını liste değil projenin hafızası olarak okumak
Neden önemli
Sürüm bozulur ve ekip neden olan tek değişikliği on dakikada çıkarmalıdır. Küçük adlı commitlerle yanıt tek revert; beş özelliği karıştıran haftalık mega commitlerle yanıt baskı altında ameliyattır. Dal ve commit disiplini bürokrasi değildir; kurtarmayı proje yerine komut yapan mekanizmadır.
Kavramlar
Commit; anlık görüntü, mesaj ve ebeveyndir. Küçük commitler üç nedenle kazanır: temiz geri alınır (bir değişiklik girer, bir çıkar), hızlı incelenir (inceleyen tek fikir tutar, beş değil) ve hassas ikiye bölünür (git bisect suçlu değişikliğe düşer, suçlu aya değil). Atomik, her committe ağacın derlenip testlerin geçmesi demektir; ortadaki kırmızı commit ikiye bölme ve suçlamayı sonraki herkes için zehirler.
Dallar taşınabilir göstergelerdir, tasarım gereği ucuzdur. Özellik dalı tek fikri hazır olana kadar yalıtır; main her an sürülebilir kalır. Kısa ömürlü dallar (saatler-günler) küçük çakışmalarla birleşir; haftalarca yaşayan dallar birleşme toplantılı olaya dönüşene kadar ayrışır. Erken ve sık birleştirme coşku değil, çakışma faizini biriktirmeden günlük ödemektir.
Birleştirmeler iki şekillidir. Hızlı-ileri, ayrışma yokken göstergeyi taşır: doğrusal, sessiz, birleştirme commit yok. Gerçek birleştirme iki tarihi, birleştirme kararını kaydeden commit ile birleştirir. İkisi ahlaken üstün değildir; ekibin geleneği karar verir. Önemli olan ne yapacağını önceden bilmektir: git log --graph --oneline hareket öncesi şekli gösterir; --no-ff ve --ff-only ummak yerine politikayı dayatır.
Uygulamalı örnek
Temiz özellik birleştirme, yapmadan önce okunur:
$ git log --graph --oneline -5 9f2c1ab (feature/rate-limit) Add token bucket check 4d6e802 Add bucket config with default 100/min | 7a11b90 (main) Fix healthcheck path |/ 2c03dd1 Release 1.4.0 $ git checkout main && git merge --no-ff feature/rate-limit -m "Merge rate limiting (100/min default)"
Beklenen okuma: grafik çatallanmadan beri her yanda tam iki commit gösterir; birleştirme tek fikri tek düzeltmeyle birleştirir, birleştirme commit özelliği adlandırır. Grafik üç haftada otuz commit gösterseydi doğru hamle durup bölmek olurdu, birleştirip dua etmek değil. Sonrası doğrulanır: ağaç derlenir, testler geçer, log iki çizgiyi birleştiren birleştirmeyi gösterir.
Yaygın yanlış hamle
Gün sonu her şeyi fixes ve updates mesajlarıyla commitlemek. Bu commitler geri alınamaz (her şeyin hangi parçası?), incelenemez (fikir ne?), ikiye bölünemez (suçlu değişiklik paketin içinde saklanır). Fikir tamamlanınca commitlenir; yabancının harekete geçebileceği mesajla, günde beş commit bile olsa. Sıklık özelliktir.
Lab ve sonraki adım
L10-L12 lablarının tamamı bu şekli varsayar: küçük commitler, kısa dallar, okunur grafikler. Sırada 2. ders: iki tarih satırı tek dosyada çarpışınca; çakışmalar.
Mini kontrol
4 soruluk isteğe bağlı öz kontrol. Yanıtlar cihazından çıkmaz, saklanmaz ve hiçbir değerlendirmeye sayılmaz.
Ders geri bildirimi
Henüz yayında geri bildirim yok.
Geri bildirim yazmak için giriş yap ve dersi tamamla.
Kaynaklar
Alıştırma
Deneme depo aç; ikişer küçük commitli iki dal yap; --no-ff ile birleştir; git log --graph çıktısından sonuç grafiğini çiz. Sonra main oynamasaydı aynı birleştirmenin hızlı-ileri gideceğini göster.
Geçme kriterleri
İkişer atomik commitli iki dallı deneme depo; adlandıran mesajlı birleştirme commit mevcut; grafik doğru çizilmiş; hızlı-ileri koşulu doğru belirtilmiş.