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 を利用しています。その中で Git と比べて便利だと感じた点があります。それは、サブミットが数字(チェンジリスト番号)で管理されていることです。

    例:CL12345

    PerforceChangelist_hsbl5d

    チーム内でコミュニケーションを取る際も、「その修正は CL12345 以降なら反映されています」といった形でやり取りしています。
    どのサブミットが新しいのか、どこまで反映されているのかが一目で分かりやすく、検索する時も番号が大きい方が新しいので便利です。

    一方で、Git はコミットの SHA ハッシュ値しかなく、どのコミットが新しいかを確認するのが面倒です。
    git show <コミットSHA> で確認できますが、毎回調べるのは手間です。

    Git のコミット表示は、 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 の GUI クライアントを使っていますので、今回は Git Fork を例に紹介します。
    GitHub Desktop や Sourcetree など、他のクライアントでも同様のことができるはずなので、ぜひ試してみてください。

    git tag を使うことで、コミットの横に好きな情報を表示できます。
    普段、手動でタグを付ける場合は、コミットを右クリックして「Add Tag」を選べば OK です。

    GitForkGUIAddTag_rvpqvy

    さらに、
    git rev-list --count HEAD を使えば、現在のコミット数を取得できます。
    この数値を自動でタグに付ければ、目的達成です。

    以下のように、4 回コミットしていることが確認できます。

    ShowCommitCountCommand_bxuwjr

    毎回コミットするたびに、この数値を取得し自動でタグを付ける仕組みを作ります。
    とても簡単です。

    Git Hook を使う

    Git には「Hook」という機能があります。特定の Git イベントで自動実行されるスクリプトのことです。

    Git Hook とは

    以下のファイルを編集します:

    プロジェクトフォルダ/.git/hooks/post-commit
    

    PostCommitDirectory_y233th

    以下のスクリプトを追加してください。

    project/.git/hooks/post-commit
    1# Get the total commit count 2count=$(git rev-list --count HEAD) 3 4# Create a tag like CL123 5tag_name="CL$count" 6 7# Create (or update) the tag 8git tag -f "$tag_name" 9 10# Optional: push it automatically if desired 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

    コメント

    この記事にコメントはありません。

    感想をコメントしましょう