8 puan yazan GN⁺ 2025-03-20 | 1 yorum | WhatsApp'ta paylaş
  • git-who, kod tabanının genel bileşenleri veya alt sistemleri için sorumluları bulmaya yarayan bir CLI aracıdır
  • git blame'in aksine git-who, dosya ağacı düzeyinde çalışarak kod yazarlarını tanımlar
  • Üç alt komut sunar; her biri Git deposundaki katkı sahipliğine farklı bir açıdan bakar
    • table

      • Varsayılan olarak depoya commit yapan tüm yazarların katkılarını özetleyen bir tablo yazdırır
      • Belirli bir yolun dosyalarına ait commit'leri filtrelemek için yol belirtilebilir
      • Belirli bir commit'ten erişilebilen commit'leri filtrelemek için branch adı, tag adı veya "commit-ish" belirtilebilir
      • -m, -c, -l, -f bayrakları kullanılarak tablo farklı metriklere göre sıralanabilir
    • tree

      • Dosya ağacını yazdırır ve her düğümde o yola en çok katkı yapan yazarı gösterir
      • -a bayrağıyla tüm dosyalar açıklamalı olarak gösterilebilir
      • -l, -f, -m, -c bayraklarını destekler
    • hist

      • Commit etkinliğinin histogramını/zaman çizelgesini yazdırarak depoya katkı geçmişini gösterir
      • -l ve -f bayraklarını destekler
  • Commit filtreleme için ek seçenekler
    • --author ve --nauthor seçenekleriyle dahil edilecek veya hariç tutulacak yazarlar belirtilebilir
    • --since ve --until seçenekleriyle belirli bir tarihten önceki veya sonraki commit'ler filtrelenebilir
  • Önbellekleme: Verileri depo bazında XDG_CACHE_HOME altında önbelleğe alır. Önbelleği devre dışı bırakmak için GIT_WHO_DISABLE_CACHE=1 ayarlanabilir
  • git-who ikili dosyası PATH'e kurulursa ek ayar gerekmeden git who çalıştırılabilir. Farklı bir adla kurmak veya açıkça yapılandırmak için Git ayarlarına alias eklenebilir
  • Git deposunda .mailmap dosyası varsa git who buna uyar ve aynı kişiye ait commit'leri birlikte sayar
  • Metrikler

    • Commit sayısı: Yolu değiştiren commit sayısını gösterir
    • Dosya sayısı: Yazarın değiştirdiği benzersiz dosya sayısını gösterir
    • Eklenen satır sayısı ve kaldırılan satır sayısı: Yola eklenen veya yoldan kaldırılan satır sayısını gösterir
  • git blame ile farkları

    • git blame, çalışma ağacındaki koda göre her satırı hangi commit'in eklediğini belirlerken
    • git who, commit logunun bir bölümünü tarayarak katkıları toplulaştırır
    • İki araç farklı seviyelerde çalışır ve farklı bilgiler sunar

1 yorum

 
GN⁺ 2025-03-20
Hacker News görüşleri
  • "vim'i kim yazdı" analizine ilişkin olarak, iş akışına bağlı olarak iç katkıcılar daha fazla katkı yapmış gibi görünebilir

    • Eğer yamalar veya pull request'ler birleştirilmeden önce iç katkıcılar tarafından yeniden biçimlendirilirse, aynı iş iki kez sayılabilir ya da katkı yalnızca yeniden biçimlendiren kişiye atfedilebilir
    • Sonuçlar yanlış değil, ancak katkı sürecini incelemeden sonuçlardan anlam çıkarırken dikkatli olmak gerekir
  • Bu araç gerçekten harika. Günü bitirmeden önce kısa bir süre denedim

    • Kişisel istek listem şöyle
      • Blame tabanlı istatistikler. Bob ve Alice'in katkılarını görmek güzel ama modülün/dosyanın fiilî sahibini göstermek daha faydalı olurdu
      • Desen tabanlı dahil etme/hariç tutma desteği. Örneğin testlerde kullanılan json dosyalarının veya otomatik oluşturulan dosyaların istatistiklerini görmek istemiyorum
      • Yapılandırma dosyası desteği. Git deposunda tercih edilen ayarları saklayabilecek TOML tabanlı bir dosya olsa güzel olurdu
      • Daha iyi paketleme. Örneğin v0.6 Linux tarball'ı Apple ile ilgili "çöp" içeriyor ve gnu tar arşiv biçimi uyumsuzluğu konusunda uyarı veriyor
  • git blame birçok kişi tarafından yanlış anlaşılıyor. Kimin yaptığından ziyade, hangi commit'in sebep olduğuyla ilgilidir

  • git-who, git who olarak çağrılabilir. Global Git ayarlarında bir takma ad tanımlamak yeterli

    • Takma ad olmadan da çalışır. Varsayılan olarak git whatever, path içinde git-whateverı bulup çalıştırır
  • Daha düşük teknolojili sürüm olarak "nerdwars" adlı bir takma ad kullanıp "git shortlog -ns --no-merges" çalıştırıyorum. Bu, bir projenin ana katkıcılarını anlamanın iyi bir yolu

  • Gitlab/Github, gönderilen merge request'ler değiştirilen kod satırlarının son yazarına otomatik olarak e-posta gönderen bir özellik eklemeli

  • Bu araç mükemmel. Uygulamanın her sürümünde yapay zeka ve insanlar tarafından yazılan kod miktarını takip etmek için git-blame muhasebesi kullanıyorum

    • "Blame script" depo boyutu büyüdükçe yavaşlıyor. Önbellekleme eklemeye çalıştım
    • Dosya desenlerine göre istatistikleri sınırlama özelliğini eklemeyi düşünüp düşünmediklerini merak ediyorum
  • tig, harika bir TUI git frontend'idir ve çok güzel bir tig blame alt komutuna sahiptir

  • Git'te eksik olan şey, geliştiricinin yazdığı satır sayısı veya commit sayısı değil. Daha ziyade şu tür şeylerdir

    • Bu satırı kim sildi
    • Bu metodun sahibi kim
  • Bazı insanlar iki farklı e-posta ile commit atıyor. Örneğin ev bilgisayarı ve iş bilgisayarında farklı e-posta kullanıyorlar. Bunları aynı kişi olarak tanımlayabilmek güzel olurdu