Key

scroll

Key Blog

  • Key 主頁>
  • 博客>
  • git forkでコミット番号を自動表示させる方法|gitタグでperforce風changelistを再現
  • Git Fork 自動加上提交編號教學|用 Git 標籤重現 Perforce Changelist 機制

    @kiikey4(Key Zhao)

    Git Fork 自動加上提交編號教學|用 Git 標籤重現 Perforce Changelist 機制

    發佈日期 2025年7月2日

    0

    概述

    本文介紹如何在 Git Fork 中顯示提交編號。

    撰寫原因

    我在公司使用 Unreal Engine 進行遊戲開發時,會使用 Perforce。我發現 Perforce 相較於 Git 有一個便利之處,就是提交(Submit)是透過數字(Changelist 編號)來管理的。

    例:CL12345

    PerforceChangelist_hsbl5d

    在團隊內溝通時,會說:「那個修正從 CL12345 以後已經反映了。」
    這樣可以一目了然看出哪個提交較新、哪些內容已經反映,搜尋時也因為編號越大越新而更方便。

    另一方面,Git 只顯示 SHA Hash 值,確認哪個提交較新相當麻煩。
    雖然可以用 git show <提交 SHA> 來查,但每次這麼做很繁瑣。

    在 Git Fork 中,提交會如下圖所示:

    GitForkCommit_qpjhfi

    另外,據說遊戲的包裝版版本號通常採用 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" 就能手動加上標籤。

    GitForkGUIAddTag_rvpqvy

    此外,
    使用 git rev-list --count HEAD 指令可以取得目前的提交數。
    只要自動將這個數字加到標籤上,目的就達成了。

    舉例來說,確認已經提交(Commit)了 4 次:

    ShowCommitCountCommand_bxuwjr

    接下來會建立一個簡單機制,自動取得這個數字並在每次提交時加上標籤。

    使用 Git Hook

    Git 有個稱為 "Hook" 的功能,能在特定事件發生時自動執行腳本。

    什麼是 Git Hook

    請編輯以下檔案:

    ProjectFolder/.git/hooks/post-commit

    PostCommitDirectory_y233th

    新增以下腳本:

    project/.git/hooks/post-commit
    1# 取得總提交數 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<提交編號>

    結果展示

    GitForkCommitAutoTagResult_zd6s4w

    批次刪除標籤

    需要注意的是,如果標籤數量成千上萬,Git 的效能可能下降。

    標籤太多會造成 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 一樣的體驗。

    參考資料

    0

    評論

    沒有評論

    發表閣下的感受