在軟體開發世界中,瞭解誰編寫了哪些程式碼對於協作、除錯和知識共享至關重要。雖然 Git 內建的 blame
命令長期以來一直是這一目的的首選工具,但一個名為 git-who
的新開源命令列工具正因提供更深入的程式碼所有權和貢獻模式洞察而受到關注。
理解 Git Blame 與 Git Who 的區別
許多開發者對 Git blame 存在誤解。正如一位評論者指出,很多人都誤解了 Git blaming;它不是關於誰做了這件事,而是關於哪個提交應該負責——這是不同的。雖然 git blame 顯示最後修改程式碼每一行的提交,但 git-who 採用不同的方法,透過分析整個檔案和目錄的貢獻模式,提供更全面的程式碼所有權檢視。
根本區別在於 git blame 專注於逐行歸屬,而 git-who 幫助回答關於誰對程式碼庫特定部分做出最顯著貢獻的更廣泛問題。這種區別在擁有眾多貢獻者的大型程式碼庫中尤為重要,因為在這些專案中理解所有權的全域性檢視可能具有挑戰性。
傳統 Git Blame 的問題
傳統的 git blame 有一些限制,git-who 試圖解決這些問題。例如,當開發者進行大規模重構、程式碼重新格式化或檔案移動時,git blame 會將所有這些行歸因於進行這些更改的人,即使他們並沒有編寫原始程式碼。
「在我目前的工作中,'git blame' 最令人沮喪的事情之一是清理舊程式碼庫時:我必須移動很多檔案,合併倉庫,重新格式化程式碼等。'git blame' 和類似工具經常總是顯示我的名字,儘管我並沒有編寫這些程式碼。」
這個問題在大型組織中尤為突出,因為在這些組織中,瞭解真正的程式碼所有權對知識共享和維護至關重要。Git-who 提供了對貢獻模式的不同檢視,可以幫助克服這些限制。
功能和能力
Git-who 提供了幾個子命令,為程式碼所有權提供不同的視角。log
子命令比標準 git 工具更有見地地總結檔案和提交結構。user
子命令幫助檢查對檔案樹中特定路徑的貢獻,而 tag
子命令根據編輯的檔案數量識別作者。
一個特別有用的功能是能夠使用 bug
子命令視覺化貢獻時間線,該子命令生成任務資料庫,對專案貢獻的時間線進行排序。這對於瞭解專案如何隨時間演變以及誰在不同時期負責不同元件非常寶貴。
該工具還支援按作者、時間範圍和其他引數進行過濾,使其適用於各種用例。此外,它在每個倉庫的基礎上快取資料,提高重複查詢的效能。
git-who 的安裝選項:
- 預編譯二進位制檔案:可在 Releases 部分獲取
- 包管理器:
- Homebrew:
brew install onkarshirge/tap/git-who
- Homebrew:
- 從原始碼:
- 需要 Go、Make 和 Go 工具鏈
go install github.com/sinclairtarget/git-who@latest
- Docker:
- 構建:
docker build -t git-who .
- 執行:
docker run -it --rm -v "$(pwd):$(pwd)" -w "$(pwd)" onkarshirge/git-who
- 構建:
主要子命令:
log
:總結檔案/提交結構user
:顯示對檔案樹路徑的貢獻bug
:生成貢獻時間線tag
:根據編輯的檔案數量標記作者
Git 別名設定:
[alias]
who = "!f(){ git-who \"$@\"; }; f"
wlog = "!f(){ git-who log \"$@\"; }; f"
![]() |
---|
一張 GitHub 倉庫的截圖,展示了與 git-who 功能相關的程式碼結構和貢獻者歷史 |
社群反應和建議
開發者社群對 git-who 反應積極,許多使用者讚賞其速度和洞察力。一位使用者報告說,對於一個大約 18 年曆史、擁有 1,695 名提交者和超過 220,000 次提交的 Rails 程式碼庫,git-who 在不到 3 秒內完成了分析。
使用者還提出了潛在的改進建議,例如新增基於 blame 的統計資料以顯示模組或檔案的實際所有者,支援基於模式的包含/排除(類似於 .gitignore 功能),以及儲存首選設定的配置檔案。
一些開發者指出,git-who 補充了現有工具,如 git shortlog -sn
,它提供了按貢獻者的簡單提交計數。然而,正如一位評論者指出的,提交數量並不是衡量貢獻的很好指標。只有當存在約定的提交風格且每個人都遵守時,它才有效。
與現有工作流程的整合
Git-who 可以輕鬆整合到現有的 Git 工作流程中。該工具可以透過 Homebrew 等包管理器安裝或從原始碼編譯。使用者可以設定 Git 別名,使其更易於使用,允許使用 git who
或 git wlog
等命令,而不是完整的 git-who
語法。
對於在容器化環境中工作的人來說,git-who 可以作為 Docker 容器執行,無需直接安裝在主機上。這種靈活性使其對各種環境和不同工作流程偏好的開發者都很容易使用。
隨著開發團隊繼續尋求更好的方式來理解程式碼所有權和貢獻模式,像 git-who 這樣的工具代表了我們思考和分析程式碼作者身份方式的演變。透過提供超越簡單逐行歸責的更深入見解,git-who 幫助團隊更好地理解他們的程式碼庫並更有效地協作。
參考:git-who