8 poin oleh GN⁺ 2025-03-20 | 1 komentar | Bagikan ke WhatsApp
  • git-who adalah alat CLI untuk menemukan penanggung jawab atas keseluruhan komponen atau subsistem dalam sebuah codebase
  • Berbeda dengan git blame, git-who bekerja pada tingkat pohon file untuk mengidentifikasi penulis kode
  • Menyediakan tiga subcommand, dan masing-masing memberikan sudut pandang berbeda terhadap kepengarangan dalam repositori Git
    • table

      • Sebagai nilai default, menampilkan tabel yang merangkum kontribusi semua penulis yang melakukan commit di repositori
      • Anda dapat menentukan path untuk memfilter hanya commit pada file di path tertentu
      • Anda juga dapat menentukan nama branch, nama tag, atau "commit-ish" untuk memfilter hanya commit yang dapat dijangkau dari commit tertentu
      • Gunakan flag -m, -c, -l, -f untuk mengurutkan tabel berdasarkan berbagai metrik
    • tree

      • Menampilkan pohon file, dan setiap node menunjukkan penulis dengan kontribusi terbesar pada path tersebut
      • Gunakan flag -a untuk memberi anotasi pada semua file
      • Mendukung flag -l, -f, -m, -c
    • hist

      • Menampilkan histogram/timeline aktivitas commit untuk menunjukkan riwayat kontribusi pada repositori
      • Mendukung flag -l dan -f
  • Opsi tambahan untuk pemfilteran commit
    • Gunakan opsi --author dan --nauthor untuk menentukan penulis yang ingin disertakan atau dikecualikan
    • Gunakan opsi --since dan --until untuk memfilter commit sebelum atau sesudah tanggal tertentu
  • Caching: menyimpan data per repositori di XDG_CACHE_HOME. Untuk menonaktifkan cache, atur GIT_WHO_DISABLE_CACHE=1
  • Jika biner git-who dipasang di path, Anda dapat menjalankan git who tanpa konfigurasi tambahan. Jika dipasang dengan nama lain atau ingin diatur secara eksplisit, Anda dapat menambahkan alias di konfigurasi Git
  • Jika file .mailmap ada di repositori Git, git who akan menghormatinya sehingga commit dari orang yang sama dihitung bersama
  • Metrik

    • Jumlah commit: menunjukkan jumlah commit yang memodifikasi path
    • Jumlah file: menunjukkan jumlah file unik yang dimodifikasi oleh penulis
    • Jumlah baris yang ditambahkan dan jumlah baris yang dihapus: menunjukkan jumlah baris yang ditambahkan atau dihapus pada path
  • Perbedaan dengan git blame

    • git blame mengidentifikasi commit yang memperkenalkan setiap baris berdasarkan kode di working tree, sedangkan
    • git who menelusuri sebagian log commit untuk mengagregasikan kontribusi
    • Kedua alat ini bekerja pada tingkat yang berbeda dan memberikan informasi yang berbeda

1 komentar

 
GN⁺ 2025-03-20
Komentar Hacker News
  • Terkait analisis "siapa yang menulis vim", tergantung alur kerja, kontributor internal bisa terlihat seolah berkontribusi lebih banyak

    • Jika patch atau pull request diformat ulang oleh kontributor internal sebelum digabungkan, pekerjaan yang sama bisa terhitung dua kali atau kontribusinya hanya diatribusikan kepada orang yang melakukan pemformatan ulang
    • Hasilnya bukan berarti salah, tetapi perlu berhati-hati saat menarik makna dari hasil tanpa meninjau proses kontribusinya
  • Alat ini benar-benar keren. Saya sempat mencobanya sebentar sebelum mengakhiri hari

    • Wishlist pribadi saya adalah sebagai berikut
      • Statistik berbasis blame. Melihat kontribusi Bob dan Alice memang bagus, tetapi akan lebih berguna jika bisa menunjukkan pemilik nyata dari modul/file
      • Dukungan include/exclude berbasis pola. Misalnya, saya tidak ingin melihat statistik untuk file json yang digunakan untuk pengujian atau file yang dibuat otomatis
      • Dukungan file konfigurasi. Akan bagus jika ada file berbasis TOML untuk menyimpan pengaturan preferensi di repositori git
      • Packaging yang lebih baik. Misalnya, tarball Linux v0.6 menyertakan "sampah" terkait Apple, dan gnu tar memberi peringatan tentang ketidakcocokan format arsip
  • Banyak orang salah paham tentang git blame. Ini bukan soal siapa yang melakukannya, melainkan commit mana yang menjadi penyebabnya

  • git-who bisa dipanggil sebagai git who. Cukup atur alias di konfigurasi Git global

    • Bahkan tanpa alias pun tetap berfungsi. Secara default, git whatever akan mencari dan menjalankan git-whatever dari path
  • Versi low-tech-nya adalah memakai alias "nerdwars" untuk menjalankan "git shortlog -ns --no-merges". Ini cara yang bagus untuk mengetahui kontributor utama suatu proyek

  • Gitlab/Github seharusnya menambahkan fitur yang secara otomatis mengirim email kepada penulis terakhir dari baris kode yang dimodifikasi ketika merge request yang diajukan diperbarui

  • Alat ini hebat. Saya menggunakan akuntansi git-blame untuk melacak jumlah kode yang ditulis AI dan manusia di setiap rilis aplikasi

    • "Skrip blame" menjadi semakin lambat seiring membesarnya ukuran repositori. Saya sempat mencoba menambahkan caching
    • Saya penasaran apakah ada rencana menambahkan fitur untuk membatasi statistik berdasarkan pola file
  • tig adalah frontend git TUI yang keren, dan memiliki subperintah tig blame yang indah

  • Yang kurang dari git bukanlah jumlah baris atau jumlah commit yang ditulis pengembang. Justru yang dibutuhkan adalah hal-hal seperti berikut

    • Siapa yang menghapus baris ini
    • Siapa pemilik metode ini
  • Sebagian orang melakukan commit dengan dua alamat email berbeda. Misalnya, mereka memakai email berbeda di komputer rumah dan komputer kantor. Akan bagus jika itu bisa didefinisikan sebagai identitas yang sama