Dalam dunia pengembangan perangkat lunak, memahami siapa yang menulis kode tertentu sangat penting untuk kolaborasi, debugging, dan berbagi pengetahuan. Meskipun perintah blame
bawaan Git telah lama menjadi alat utama untuk tujuan ini, sebuah utilitas command-line open-source baru bernama git-who
mulai mendapatkan perhatian karena menawarkan wawasan yang lebih mendalam tentang kepemilikan kode dan pola kontribusi.
Memahami Git Blame vs. Git Who
Git blame telah banyak disalahpahami oleh banyak pengembang. Seperti yang diungkapkan seorang komentator, Git blaming benar-benar disalahpahami oleh banyak orang; ini BUKAN tentang siapa yang melakukannya, tapi tentang commit mana yang harus disalahkan -- itu berbeda. Sementara git blame menunjukkan commit mana yang terakhir memodifikasi setiap baris kode, git-who mengambil pendekatan berbeda dengan menganalisis pola kontribusi di seluruh file dan direktori, memberikan pandangan yang lebih holistik tentang kepemilikan kode.
Perbedaan mendasarnya adalah git blame berfokus pada atribusi baris per baris, sementara git-who membantu menjawab pertanyaan yang lebih luas tentang siapa yang telah berkontribusi paling signifikan pada bagian-bagian tertentu dari basis kode dari waktu ke waktu. Perbedaan ini menjadi sangat penting dalam basis kode besar dengan banyak kontributor di mana memahami gambaran besar kepemilikan bisa menjadi tantangan.
Masalah dengan Git Blame Tradisional
Git blame tradisional memiliki keterbatasan yang coba diatasi oleh git-who. Misalnya, ketika pengembang melakukan refactoring besar, pemformatan ulang kode, atau pemindahan file, git blame akan mengatribusikan semua baris tersebut kepada orang yang membuat perubahan itu, meskipun mereka tidak menulis kode aslinya.
Salah satu hal yang lebih membuat frustrasi tentang 'git blame' muncul ketika membersihkan basis kode lama: Dalam pekerjaan saya saat ini, saya harus memindahkan banyak file, menggabungkan repo, memformat ulang kode, dll. 'git blame' dan alat serupa sering selalu menampilkan nama saya, meskipun saya tidak menulis kodenya.
Masalah ini sangat akut di organisasi besar di mana memahami kepemilikan kode yang sebenarnya sangat penting untuk berbagi pengetahuan dan pemeliharaan. Git-who menyediakan berbagai pandangan tentang pola kontribusi yang dapat membantu mengatasi keterbatasan ini.
Fitur dan Kemampuan
Git-who menawarkan beberapa subperintah yang memberikan perspektif berbeda pada kepemilikan kode. Subperintah log
merangkum struktur file dan commit dengan lebih informatif daripada alat git standar. Subperintah user
membantu memeriksa kontribusi ke jalur tertentu dalam struktur file, sementara subperintah tag
mengidentifikasi penulis berdasarkan jumlah file yang diedit.
Salah satu fitur yang sangat berguna adalah kemampuan untuk memvisualisasikan timeline kontribusi dengan subperintah bug
, yang menghasilkan database tugas yang mengurutkan timeline kontribusi proyek. Ini bisa sangat berharga untuk memahami bagaimana sebuah proyek telah berkembang dari waktu ke waktu dan siapa yang bertanggung jawab atas komponen yang berbeda selama periode yang berbeda.
Alat ini juga mendukung pemfilteran berdasarkan penulis, jangka waktu, dan parameter lainnya, menjadikannya fleksibel untuk berbagai kasus penggunaan. Selain itu, alat ini menyimpan data dalam cache berdasarkan repositori, meningkatkan kinerja untuk kueri yang berulang.
Pilihan Instalasi untuk git-who:
- Binary Terkompilasi: Tersedia di bagian Releases
- Package Managers:
- Homebrew:
brew install onkarshirge/tap/git-who
- Homebrew:
- Dari Source:
- Memerlukan Go, Make, dan Go toolchain
go install github.com/sinclairtarget/git-who@latest
- Docker:
- Build:
docker build -t git-who .
- Run:
docker run -it --rm -v "$(pwd):$(pwd)" -w "$(pwd)" onkarshirge/git-who
- Build:
Subperintah Utama:
log
: Merangkum struktur file/commituser
: Menampilkan kontribusi ke jalur pohon filebug
: Menghasilkan timeline kontribusitag
: Menandai penulis berdasarkan jumlah file yang diedit
Pengaturan Git Alias:
[alias]
who = "!f(){ git-who \"$@\"; }; f"
wlog = "!f(){ git-who log \"$@\"; }; f"
|  |
---|
*dari bahasa Inggris ke bahasa Indonesia, dengan mempertahankan struktur dan mengikuti aturan terjemahan yang diberikan. |
Tangkapan layar repositori GitHub yang mengilustrasikan struktur kode dan riwayat kontributor yang relevan dengan kemampuan git-who
Penerimaan dan Saran Komunitas
Komunitas pengembang telah merespons positif terhadap git-who, dengan banyak pengguna menghargai kecepatan dan wawasannya. Seorang pengguna melaporkan bahwa untuk basis kode Rails yang berusia sekitar 18 tahun dengan 1.695 committer dan lebih dari 220.000 commit, git-who menyelesaikan analisisnya dalam waktu kurang dari 3 detik.
Pengguna juga telah menyarankan perbaikan potensial, seperti menambahkan statistik berbasis blame untuk menunjukkan pemilik de-facto modul atau file, dukungan untuk inklusi/eksklusi berbasis pola (mirip dengan fungsionalitas .gitignore), dan file konfigurasi untuk menyimpan pengaturan yang disukai.
Beberapa pengembang mencatat bahwa git-who melengkapi alat yang sudah ada seperti git shortlog -sn
, yang memberikan hitungan sederhana commit berdasarkan kontributor. Namun, seperti yang ditunjukkan oleh seorang komentator, Jumlah commit bukanlah metrik yang sangat baik untuk mengukur kontribusi. Itu hanya akan berfungsi ketika ada gaya commit yang disepakati dan semua orang mematuhinya.
Integrasi dengan Alur Kerja yang Ada
Git-who dapat dengan mudah diintegrasikan ke dalam alur kerja Git yang ada. Alat ini dapat diinstal melalui package manager seperti Homebrew atau dikompilasi dari sumbernya. Pengguna dapat mengatur alias Git untuk membuatnya lebih mudah digunakan, memungkinkan perintah seperti git who
atau git wlog
alih-alih sintaks git-who
lengkap.
Untuk mereka yang bekerja di lingkungan terkontainerisasi, git-who dapat dijalankan sebagai kontainer Docker tanpa perlu menginstalnya langsung di mesin host. Fleksibilitas ini membuatnya dapat diakses oleh pengembang di berbagai lingkungan dan dengan preferensi alur kerja yang berbeda.
Saat tim pengembangan terus mencari cara yang lebih baik untuk memahami kepemilikan kode dan pola kontribusi, alat seperti git-who mewakili evolusi dalam cara kita berpikir dan menganalisis kepengarangan kode. Dengan memberikan wawasan yang lebih mendalam di luar blame sederhana baris per baris, git-who membantu tim lebih memahami basis kode mereka dan berkolaborasi lebih efektif.
Referensi: git-who