はじめに
git commit -am "コミットメッセージ" をよく使うのですが、コミットメッセージに自動で今の時間が追加されて、その後にpushまでしてくれたら嬉しいですよね。
gitのhooksでそれを実現しました。なお、このスクリプトはBSD版シェルで動作します。
作ったもの
git commit -am "コミットメッセージ" を実行すると、
2021-12-04-00:00:00
コミットメッセージ
というコミットメッセージでコミットされる。同時にgit pushが実行される。
やり方
1. .git/hooks/にprepare-commit-msgを作る。
2. prepare-commit-messageを次のように編集する。
# !/bin/sh
COMMIT_MSG_FILE=$1
echo "prepare-commit-msg"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
sed -i '' -e "1i\\
$DATE" $COMMIT_MSG_FILE
cat $COMMIT_MSG_FILE
これはコミットメッセージの1行目に現在時刻を挿入するスクリプトです。OSXのBSD版shellでsedコマンドを正常に動かすためにsedの途中で改行を入れています。
ここでは確認のために内容を出力しています。
3. .git/hooks/にpost-commitを作る。
4. post-commitを次のように編集する。
# !/bin/sh
echo "hook post-commit"
git push
補足
初回pushでの--set-upstreamを自動で設定するために、
git config push.default current
を予め実行しておくとより使いやすいと思います。
また、hooksの実行を停止するオプションはありません。pre-commitとcommit-messageフックは--no-verifyオプションでオフにできますが、post-commitとprepare-commit-messageには効かないからです。
これは、この2つのフックの想定されている使い道がこのような自動化でないからだと考えられます(参考:Git Hooks)。使用する際は、個人リポジトリで使うのが賢明かもしれません。