Kullanılması git gui blame
komut yararlanmak zordur ve iken git log -G
ve git log --pickaxe
yöntem tanımı göründüğü veya onları yapılan tüm değişiklikleri listelemek için herhangi bir yol bulamadı, kaybolduğunda her gösterebilir vücutta senin yöntemin.
Ancak, tam da bunu yapan bir çözümü bir araya getirmek için gitattributes
ve textconv
özelliğini kullanabilirsiniz . Bu özellikler başlangıçta ikili dosyalarla çalışmanıza yardımcı olmak için tasarlanmış olsa da, burada da aynı şekilde çalışırlar.
Anahtar, Git'in herhangi bir diff işlemi yapmadan önce ilgilendikleriniz dışındaki tüm satırları dosyadan kaldırmasını sağlamaktır. Ardından git log
, git diff
vb. Yalnızca ilgilendiğiniz alanı görecektir.
İşte başka bir dilde yaptıklarımın ana hatları; kendi ihtiyaçlarınız için ince ayar yapabilirsiniz.
Bir bağımsız değişken alan - bir kaynak dosyanın adı - ve o dosyanın yalnızca ilginç kısmını (veya hiçbiri ilginç değilse hiçbir şey) çıkaran kısa bir kabuk komut dosyası (veya başka bir program) yazın. Örneğin, sed
aşağıdaki gibi kullanabilirsiniz :
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
textconv
Yeni komut dosyanız için bir Git filtresi tanımlayın . (Daha gitattributes
fazla ayrıntı için man sayfasına bakın.) Filtrenin adı ve komutun konumu istediğiniz herhangi bir şey olabilir.
$ git config diff.my_filter.textconv /path/to/my_script
Git'e söz konusu dosya için farkları hesaplamadan önce bu filtreyi kullanmasını söyleyin.
$ echo "my_file diff=my_filter" >> .gitattributes
Kullanmak Şimdi eğer -G.
(not .
filtre uygulandığında görünür değişiklikler üretmek tüm kaydedilmesini listelemek için), size o ediyoruz ilgilenen tam olarak bu teslimleri olacaktır. Gibi seyahatseverlerin Git adlı fark rutinleri kullanmak Başka seçenekler --patch
, olacak ayrıca bu kısıtlı görünümü elde edin.
$ git log -G. --patch my_file
Voilà!
Yapmak isteyebileceğiniz yararlı bir iyileştirme, filtre komut dosyanızın ilk argüman olarak bir yöntem adını (ve ikinci argüman olarak dosyayı) almasını sağlamaktır. Bu git config
, komut dosyanızı düzenlemek yerine yalnızca çağırarak yeni bir ilgi yöntemi belirlemenizi sağlar . Örneğin şöyle diyebilirsiniz:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
Elbette, filtre komut dosyası istediğiniz her şeyi yapabilir, daha fazla argüman alabilir veya her neyse: burada gösterdiklerimin ötesinde çok fazla esneklik var.