概述
本文介紹如何在 Git Fork 中顯示提交編號。
撰寫原因
我在公司使用 Unreal Engine 進行遊戲開發時,會使用 Perforce。我發現 Perforce 相較於 Git 有一個便利之處,就是提交(Submit)是透過數字(Changelist 編號)來管理的。
例:CL12345
在團隊內溝通時,會說:「那個修正從 CL12345 以後已經反映了。」
這樣可以一目了然看出哪個提交較新、哪些內容已經反映,搜尋時也因為編號越大越新而更方便。
另一方面,Git 只顯示 SHA Hash 值,確認哪個提交較新相當麻煩。
雖然可以用 git show <提交 SHA>
來查,但每次這麼做很繁瑣。
在 Git Fork 中,提交會如下圖所示:
另外,據說遊戲的包裝版版本號通常採用 Major.Minor.Patch.Changelist
格式(GPT 是這麼說的)。
我覺得如果能把提交編號放進 Changelist 部分就好了。
這次就來介紹如何在 Git 中實現顯示提交編號的機制。
環境
- Unreal Engine 5.6.0
- Git Fork 2.9.0.0
- Windows 11 Pro
正文
我使用名為 Git Fork 的 Git 圖形介面客戶端,以下以 Git Fork 為例說明。
其他像 GitHub Desktop、Sourcetree 等客戶端應該也可以做類似設定,歡迎試試看。
透過 git tag
指令,可以在提交旁邊顯示自訂資訊。
通常,右鍵點選提交後選擇 "Add Tag" 就能手動加上標籤。
此外,
使用 git rev-list --count HEAD
指令可以取得目前的提交數。
只要自動將這個數字加到標籤上,目的就達成了。
舉例來說,確認已經提交(Commit)了 4 次:
接下來會建立一個簡單機制,自動取得這個數字並在每次提交時加上標籤。
使用 Git Hook
Git 有個稱為 "Hook" 的功能,能在特定事件發生時自動執行腳本。
請編輯以下檔案:
ProjectFolder/.git/hooks/post-commit
新增以下腳本:
project/.git/hooks/post-commit1# 取得總提交數 2count=$(git rev-list --count HEAD) 3 4# 建立類似 CL123 的標籤 5tag_name="CL$count" 6 7# 建立或更新標籤 8git tag -f "$tag_name" 9 10# 若需要自動推送可取消註解 11# git push origin "$tag_name" 12 13echo "Tagged commit as $tag_name"
若想讓整個團隊共用標籤,請將 # git push origin "$tag_name"
前面的 #
移除。
完成後,每次提交時,Git Fork 上會在提交旁顯示 CL<提交編號>
。
結果展示
批次刪除標籤
需要注意的是,如果標籤數量成千上萬,Git 的效能可能下降。
此時建議批次刪除不需要的舊標籤,並從最新提交重新標記。
刪除所有本地標籤
1git tag | xargs -L 1 | xargs git tag --delete
刪除所有遠端標籤
1git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
結論
不得不說 Perforce 真的很方便。
用著 Git 的同時,還是忍不住想要擁有像 Perforce 一樣的體驗。