ÖNEMLİ : Kendim için aldığım notlar. Umarım size de bir faydası olur. Kullanılan her bir makale referans olarak eklenmiştir.
Git-blame Nedir??
Git-blame komutu, belirli bir dosyanın her bir satırını en son kim tarafından ve hangi commit ile değiştirildiğini göstermek için kullanılır. Git version kontrol sisteminde belirli bir dosyanın belirli bir zaman noktasındaki değişikliklerini, özetle o dosyanın geçmişini araştırırken yararlı bir komuttur.
Git blame Örnek
Görüleceği üzere sample.txt dosyasındaki bütün değişiklikler, değişiklikleri yapan kullanıcılar, değişikliklerin commit id’leri ve satır numaraları çıktı olarak ekrana yazdırılmıştır.
Git blame -L Option
Burada dikkat edilmesi gereken ana seçenek(option) “-L“‘dir. Bu seçenek, istenirse tüm dosya yerine, bir satır aralığı belirterek ilgili dosyayı görüntülemenizi sağlar. Örneğin;
“-L” seçeneğinden yoksun örnekte bütün dosyadaki satırlar, sıra numarası, commit id’si ve yazar ismi ile basılırken, “-L” seçeneği kullandığımız git blame komutu ilk örnekte sadece 1. ve 2. satırları, ikinci örnekte ise 1. ve 3. satırlar arasındaki satırları çıktı olarak verecektir.
Bu arada aynı çıktıyı bu şekilde de alabiliriz. “-L1,+2”, buradaki +2 ifadesinde, 1. satır başlangıç noktası kabul ederek, sonrasındaki 2 satırı çıktı olarak almamızı söylüyor.
Git-blame -L /regex/
Satır aralıklarının başlangıcı ve bitişi için normal ifadeler (regular expression) de kullanabilirsiniz. Bunu yapmak için eğik çizgiler (/ /) içinde aramak istediğiniz ifadeyi belirtirsiniz.
sample.txt
1
2
3
4
Sample text 1
Sample text 2
Sample text 3
Sample text 4
Örneğin, “text 2” normal ifadesinin ilk göründüğü satırdan başlayarak iki satır sonrasına bakmak için aşağıdaki komutu kullanabilirsiniz;
Normal ifadeleri ararken kullanılan başka bir yöntemi göstermek istiyorum. Diyelim ki spesifik bir fonksiyonu aratmak istiyorum. Aşağıdakine benzer bir koda sahip olduğumuzu varsayalım ve printList fonsiyonunu git-blame -L komutu ile aratmak istiyorum.
İlk arama sonucumuz aşağıdaki gibidir. Arama alanını sınırlamak için başlangıç değeri olarak “/printList(/” normal ifadesinin ve bitiş değeri olarak ise “/}/” normal ifadesinin kullanıldığına dikkat edin. Yalnız bu arama bize 14 ve 15. satırları işgal eden, ilgili metodunun çağrıldığı çıktıyı verir.
Aramayı aşağıdaki gibi günceller isek doğrudan metodun kendisini, aralık olarak sadece normal ifadeler kullanarak elde edebiliriz. Komutu rakam aralığı vererek oluşturmadığımıza dikkat edin!
“-L” diğer seçeneklere kıyasla daha çok kullanılan bir option olduğu için, bu seçeneğin kullanım formülasyonunu gösteren çıktıyı sayfa sonuna ekledim.
Git blame -e option
-e seçeneği, kullanıcı adı yerine yazarın e-posta adresini gösterir.
Örneğin yukarıdaki sample.txt dosyasını incelediğimiz örneği “-e” seçeneği kullanarak tekrar çalıştıralım istiyorum.
Git blame -w option
Farklı bir branch’te Sample text 4 commit’inde bıraktığım sample.txt dosyası üzerinde bir değişiklik yapmak istiyorum.
Örneğin son satırın bitti “Sample text 4” ifadesi peşi sıra boşluk bırakıp, bu boşluğu commit’leyelim istiyorum.
görüleceği üzere son satırdaki commit değişti. Şimdi bu commit’e bir bakalım.
Şekilden de görüleceği üzere son commit son satırda yapmış olduğumuz değişiklik olan boşlukları temsil etmektedir. Yalnız -w seçeneğini kullanırsak bu boşluklu commit’ler big blame tarafından görmezden gelinir. Örneğin;
Görüleceği üzere son satır eski commit’i gösteriyor.
Git blame aralık belirleme(specifying range)
Örneğin belli bir commit’den öncesini görmek istemiyoruz. Yani bahsettiğim bu commit’i başlangıç noktası kabul edip, sonrasında olan değişiklikleri göstermek istiyoruz.
başlangıç noktamız b74c86b8 bu commit olsun.
görüleceği üzere başlangıç kabul ettiğimiz commit’in id’sinin başında ^ sembolü yer alıyor. Şimdi bu id’yi ef1eddc1 olarak değiştirelim.
benzer aralığı tarih ve sürüm bazında da yapabiliriz. Örneğin, Sürüm v1.0.01’den eski veya 3 haftadan eski değişikliklerle ilgilenmiyorsanız, git rev-list’e benzer revizyon aralığı belirticileri kullanabilirsiniz: