概要
この記事では、Git Fork で、コミットに番号を付けて表示する方法を紹介します。
この投稿を書いた理由
自分は会社で Unreal Engine を使ったゲーム開発をする際、Perforce を利用しています。その中で Git と比べて便利だと感じた点があります。それは、サブミットが数字(チェンジリスト番号)で管理されていることです。
例:CL12345
チーム内でコミュニケーションを取る際も、「その修正は CL12345 以降なら反映されています」といった形でやり取りしています。
どのサブミットが新しいのか、どこまで反映されているのかが一目で分かりやすく、検索する時も番号が大きい方が新しいので便利です。
一方で、Git はコミットの SHA ハッシュ値しかなく、どのコミットが新しいかを確認するのが面倒です。
git show <コミットSHA>
で確認できますが、毎回調べるのは手間です。
Git のコミット表示は、 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 の GUI クライアントを使っていますので、今回は Git Fork を例に紹介します。
GitHub Desktop や Sourcetree など、他のクライアントでも同様のことができるはずなので、ぜひ試してみてください。
git tag
を使うことで、コミットの横に好きな情報を表示できます。
普段、手動でタグを付ける場合は、コミットを右クリックして「Add Tag」を選べば OK です。
さらに、
git rev-list --count HEAD
を使えば、現在のコミット数を取得できます。
この数値を自動でタグに付ければ、目的達成です。
以下のように、4 回コミットしていることが確認できます。
毎回コミットするたびに、この数値を取得し自動でタグを付ける仕組みを作ります。
とても簡単です。
Git Hook を使う
Git には「Hook」という機能があります。特定の Git イベントで自動実行されるスクリプトのことです。
以下のファイルを編集します:
プロジェクトフォルダ/.git/hooks/post-commit
以下のスクリプトを追加してください。
project/.git/hooks/post-commit1# 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コミット番号
が表示されます。
結果
タグを一括削除したい場合
注意点として、タグが何千、何万個と増えると 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 のような体験を求めているのか…自問自答してしまいます。