Git Bisect
- Okunuşu
- git baysekt
Kısaca
Git bisect, commit geçmişinde ikili arama (binary search) yaparak hatayı getiren commit'i, yalnızca birkaç commit'i test ederek bulan Git komutudur.
git bisect nedir?
Git bisect, bir hatayı hangi commit'in ortaya çıkardığını bulan bir hata ayıklama komutudur. Git'e kodun iyi olduğu bir commit'i ve kötü olduğu bir commit'i söylersiniz; Git de test etmeniz için aralarının tam ortasındaki bir commit'i checkout eder. Onu iyi ya da kötü olarak işaretledikten sonra Git aralığı yeniden ikiye böler ve sonunda yalnızca ilk kötü commit kalır.
İkili arama kullandığı için git bisect çok az adım gerektirir: 1.000 commit'i taramak için yaklaşık 10 test, bir milyon commit için yaklaşık 20 test yeterlidir. Commit'leri git bisect good ve git bisect bad ile elle işaretleyebilir ya da kod çalışıyorsa 0, başarısız oluyorsa sıfırdan farklı bir kodla çıkan bir betiğin ardından git bisect run yazarak tüm süreci otomatikleştirebilirsiniz. İşiniz bittiğinde git bisect reset sizi başladığınız branch'e geri döndürür.
Bu, uzun bir kitapta bir yazım hatasının ilk göründüğü sayfayı, kitabı ortadan açıp kontrol ederek ve sonra yalnızca onu içermesi gereken yarıda arayarak bulmaya benzer. Git bisect özellikle regresyonlarda, yani eskiden çalışan özelliklerdeki hatalarda, birçok yakın tarihli değişiklikten hangisinin bozduğunu kimsenin bilmediği durumlarda kullanışlıdır.
Git bisect bazen git blame ile karıştırılır. Blame, bir dosyanın her satırını en son kimin değiştirdiğini gösterir ve hatanın nerede olduğunu zaten bildiğinizde işe yarar; bisect ise hangi dosyanın söz konusu olduğunu bilmeseniz bile davranışa neden olan commit'i bulur. Bisect, her commit derlenip temel testleri geçtiğinde en iyi çalışır; ekiplerin küçük ve kendi içinde bütün commit'lere değer vermesinin nedenlerinden biri de budur.
Önemli noktalar
- Git bisect, bir hatayı ortaya çıkaran ilk commit'i bulur.
- İkili arama kullanır; bu yüzden adım sayısı geçmiş boyutuyla çok yavaş artar.
- Commit'leri
git bisect goodvegit bisect badile işaretlersiniz. git bisect runaramayı bir test betiğiyle otomatikleştirir.- Branch'inize dönmek için her zaman
git bisect resetile bitirin.
Örnek
# Start a bisect session
git bisect start
git bisect bad # the current commit has the bug
git bisect good v2.3.0 # this older tag was working
# Git checks out a commit in the middle: test it, then mark it
git bisect good # or: git bisect bad
# Or let a script decide automatically (exit 0 = good, non-zero = bad)
git bisect run npm test
# Return to where you started
git bisect resetSık sorulan sorular
git bisect ne yapar?
Bilinen iyi ve bilinen kötü bir sürüm arasındaki tam ortadaki commit'i tekrar tekrar checkout ederek bir hatayı ortaya çıkaran commit'i bulmanıza yardımcı olur. Her birini test edip işaretlersiniz; Git de yalnızca suçlu kalana kadar aralığı daraltır.
git bisect sırasında bir commit test edilemiyorsa ne olur?
git bisect skip çalıştırın; Git bunun yerine yakındaki bir commit seçer. Çok fazla commit atlanırsa Git yalnızca olası suçluların küçük bir aralığını bildirebilir.
git bisect ile git blame arasındaki fark nedir?
git blame bir dosyanın her satırını en son hangi commit'in değiştirdiğini gösterirken, git bisect bir davranışın bozulduğu commit'i geçmişte arar. Şüpheli satırı biliyorsanız blame'i, yalnızca bir şeyin eskiden çalıştığını biliyorsanız bisect'i kullanın.
İlgili sayfalar
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- İkili AramaVeri Yapıları, s. 21İkili arama, sıralı bir listedeki bir değeri arama aralığını sürekli yarıya bölerek bulan bir algoritmadır; her öğeyi denetlemek yerine O(log n) sürer.
- Regresyon TestiTest ve Kalite, s. 21Regresyon testi, daha önce çalışan özelliklerin bozulmadığından emin olmak için bir kod değişikliğinden sonra mevcut testleri yeniden çalıştırma pratiğidir.
- Git TagSürüm Kontrolü, s. 23Git tag, belirli bir commit'i gösteren adlandırılmış kalıcı bir işaretçidir; çoğunlukla deponun geçmişinde v1.0.0 gibi sürümleri işaretlemek için kullanılır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin