LoginSignup
33
31

commit.templateのすすめ

Last updated at Posted at 2023-08-13

はじめに

commit.templateとは

8.1 Git のカスタマイズ - Git の設定

システム上のファイルへのパスをここに設定すると、Git はそのファイルをコミット時のデフォルトメッセージとして使います。
~
コミットメッセージについてチーム内に所定の決まりがあるのなら、その決まりに従ったテンプレートをシステム上に作って Git にそれを使わせるようにするとよいでしょう。そうすれば、その決まりに従ってもらいやすくなります。

つまり、コミットメッセージのテンプレートを設定しておけるということです。
git commitコマンドを打つと設定しているエディタに表示されます。
git commit -m "〇〇〇"のようにコミットメッセージをあらかじめ入力する場合は表示されません。)

commit.templateの使用手順

8.1 Git のカスタマイズ - Git の設定を参考に記載します。

1.~/.gitmessage.txtファイルを作成する(ファイル名や場所は任意でOKです)

~/.gitmessage.txt
subject line

what happened

[ticket: X]

2.git configに設定する

$ git config [--global] commit.template ~/.gitmessage.txt
# --global, --local等は任意で。

3.コミットコマンドを打つと…

$ git commit

4.コミットメッセージの雛形として以下のような内容が設定しているエディタに表示されます

subject line        # ★ここから

what happened

[ticket: X]         # ★ここまでがテンプレート内容
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   lib/test.rb
#
~
~
".git/COMMIT_EDITMSG" 14L, 297C

解除方法

gitのconfigファイルから以下の記述を削除すればOKです。

global設定した場合は、~/.gitconfig
~
[commit]
	template = ~/.gitmessage.txt
~

活用例① prefixや絵文字のカンペを書いておく

やりたいこと

コミットメッセージにprefixや絵文字を使う有用性についてはすでに色々な方が記事を書かれています。

そのルールを一々どこかへ確認しに行くのは面倒なので、コミットテンプレートに書いておこうというわけです。

設定例

Angular.jsの公式ドキュメントのprefixを参考にされている記事が多く個人的にもわかりやすいと思ったので、Angular.jsの例を記載します。
絵文字はAngular.jsの例に対応するものを書きました。

~/.gitmessage.txt
# ==== Prefix ====
# fix:      A bug fix
# feat:     A new feature
# docs:     Documentation only changes
# style:    Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
# refactor: A code change that neither fixes a bug nor adds a feature
# perf:     A code change that improves performance
# test:     Adding missing or correcting existing tests
# chore:    Changes to the build process or auxiliary tools and libraries such as documentation generation
#
# 参考:https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type

# ==== Emojis ====
# :bug:         🐛 バグ修正 (fix)
# :sparkles:    ✨ 部分的な機能追加 (feat)
# :memo:        📝 ドキュメント修正 (docs)
# :lipstick:    💄 Lintエラーの修正やコードスタイルの修正 (style)
# :recycle:     ♻️ リファクタリング (refactor)
# :rocket:      🚀 パフォーマンス改善 (perf)
# :green_heart: 💚 テストやCIの修正・改善 (test)
# :bento:       🍱 依存パッケージなどのアップデート (chore)
#
# 絵文字一覧:https://gitmoji.dev/

絵文字はUnicode文字の一部であり、GitクライアントやテキストエディタがUnicodeに対応している場合、絵文字は正しく表示されます。

活用例② ブランチ名に従い特定の文言をコミットメッセージの先頭に自動付与

やりたいこと

ブランチ名にチケット番号を記載し、コミットメッセージはチケット番号から開始する運用ルールがあるとします。

例)
ブランチ名         ticket-1234567
コミットメッセージ  refs #1234567 [コミットメッセージを記載]

このとき、毎回「refs #1234567」という文字を打つのは面倒ですよね。
なのでこれを自動化します。

git hooksという仕組みを用います

Git - Git フック

~
Gitにも特定のアクションが発生した時にカスタムスクリプトを叩く方法があります。このようなフックは、クライアントサイドとサーバーサイドの二つのグループに分けられます。
クライアントサイドフックはコミットやマージといったクライアントでの操作の際に、サーバーサイドフックはプッシュされたコミットの受け取りといったネットワーク操作の際に、それぞれ実行されます。 これらのフックは、さまざまな目的に用いることができます。

フックにはいろいろな種類がありますが、その中のprepare-commit-msgを使います。

設定手順

1.prepare-commit-msgファイルを作成する

.git\hooks\prepare-commit-msg
#!/bin/sh

# git rev-parse --abbrev-ref HEAD 現在のブランチ名を取得するgitのコマンド
current_branch=$(git rev-parse --abbrev-ref HEAD)

# ブランチ名が「ticket-」を含むなら
if [[ "$current_branch" == *ticket-* ]]; then

    # ブランチ名の文字列の添字7(=8文字目)から7文字を抽出
    ticket_number=${current_branch:7:7}

    # 文字列結合
    prefix="refs #${ticket_number}"

    # sed s=スクリプト/変更前/変更後 $1=スクリプト実行対象
    sed -i "s/\[prefix\]/$prefix/" $1
fi

2.コミットテンプレート用のファイルに、prepare-commit-msgで指定した変数名を書いておく

~/.gitmessage.txt
[prefix]

3.コミットコマンドを打つと…

$ git commit

4.開いたエディタの先頭に「refs #チケット番号」と記載されています
2023-08-13-17-11-03.png
素晴らしい◎
(画像はVSCodeのエディタです)

課題

  • 7桁以外のチケット番号に非対応
    先ほどのprepare-commit-msgの書き方だと、7桁以外のチケット番号の場合は対応できていません(私がシェルスクリプトに慣れていないだけですが…)。
    改良できたら追記します。

  • VSCodeだとcommit.templateに反映されているか分からない
    こちらの設定をするとVSCodeのサイドバーのコミットメッセージ入力欄に[prefix]という文字が表示されます。
    2023-08-13-17-17-23.png
    設定が効いていればここから直接コミットしてもコミットメッセージでは「refs #~」と変換してくれるのですが、
    実際にコミットを打つまで変換できているのか若干不安です。
    こちらも改良できたら追記します。

以上!

どなたかの参考になれば幸いです。

33
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
31