Git bisect ile hatayı getiren commit'i bulmak
Bozuk bir davranışı tek tek commit okumadan, tekrarlanabilir bir test ve iyi/kötü sınırlarıyla daraltma yöntemi.
Önce aynı hatayı tekrar üret
Bir sayfa dün açılıyordu, bugün açılmıyor diyelim. Önce tek bir komutla veya kısa bir kontrol listesiyle 'çalışıyor / bozuk' kararını verebildiğinden emin ol. Arada kalan sürümlerde test güvenilir değilse bisect seni yanlış commit'e götürür. Çalışma ağacındaki değişiklikleri kaydet veya temiz bir çalışma ağacında ilerle; Git süreç boyunca farklı commit'lere geçer.
Sınırları işaretle
git bisect start ile başla, bozuk olduğunu bildiğin sürümde git bisect bad, iyi olduğunu bildiğin eski sürümde git bisect good <commit> de. Git bu iki uç arasındaki bir commit'e geçer. Testi çalıştırıp sonucu good veya bad olarak işaretledikçe aralık daralır. İncelenen commit derlenmiyorsa git bisect skip kullan; tahmin ederek sınıflandırma yapma.
Tekrarlanabilir testi otomatikleştir
Test komutu çıkış kodu 0 döndürdüğünde iyi, 1–127 aralığında bir kod döndürdüğünde bozuk sayılır; 125 sınanamayacak commit'i atlar. Bunun için git bisect run ./test.sh kullanılabilir. Test betiğinin ağdan veri indirmesi, saat bağımlılığı veya değişken bir veritabanı kullanması sonucu güvenilmez kılabilir.
Sonuçla ne yapmalı?
Bulunan commit'i bir neden adayı olarak incele: değişikliğin hangi koşulda hatayı tetiklediğini küçük bir testle göster. Ardından git bisect reset ile başladığın dala dön. Hata raporuna iyi ve kötü commit kimliklerini, test adımlarını ve bulduğun ilk bozuk commit'i yaz; yalnızca commit bağlantısı başka birine yeterince bağlam vermeyebilir.
