git でコミットが行われた際にスクリプトを実行する方法のメモ。
やりたいこと
- git でコミットが行われた際にコミットの時刻、コミット SHA をファイルに出力し、バージョン的情報として利用
フック
git commit を実行した際に、コミット前に実行したい処理を以下に記述しておけば、コミット前に実行してくれます。
.git/hooks/pre-commit
一方、git commit を実行した際に、コミット後に実行したい処理を以下に記述しておけば、コミット後に実行してくれます。
.git/hooks/post-commit
pre-commit の例
コミット直前に static/pre.txt に '{日時};{ブランチ名};{コミットSHA}' を出力します。
#!/bin/sh
OUT_FILE=static/pre.txt
DATE_TIME=$(date --utc '+%Y-%m-%dT%H:%M:%SZ')
BRANCH=$(git rev-parse --abbrev-ref HEAD)
COMMIT_SHA=$(git rev-parse HEAD)
echo -n "${DATE_TIME};${BRANCH};${COMMIT_SHA}" > ${OUT_FILE}
実行すると、static/pre.txt に以下のような文字列が出力されます。
2025-03-30T03:41:32Z;test1;ceb633a8c7100c7a6c651ba08aa269aa31c90019
post-commit の例
コミット直後に static/post.txt に '{日時};{ブランチ名};{コミットSHA}' を出力します。
#!/bin/sh
OUT_FILE=static/post.txt
DATE_TIME=$(date --utc '+%Y-%m-%dT%H:%M:%SZ')
BRANCH=$(git rev-parse --abbrev-ref HEAD)
COMMIT_SHA=$(git rev-parse HEAD)
echo -n "${DATE_TIME};${BRANCH};${COMMIT_SHA}" > ${OUT_FILE}
実行例
README.txt を編集してコミットします。
git add README.txt
git commit -m "test"
static/pre.txt には以下が出力されています。
2025-03-30T03:41:32Z;test1;ceb633a8c7100c7a6c651ba08aa269aa31c90019
static/post.txt には以下がされています。
2025-03-30T03:41:32Z;test1;ae93cd8f713c78142beeaa38c2730f3c85076c85
git log でコミットログを見てみると以下のようになっています。
pre.txt、post.txt にコミット前後のコミットSHAが出力されていることがわかります。
commit ae93cd8f713c78142beeaa38c2730f3c85076c85 (HEAD -> test1)
Author: ...
Date: Sun Mar 30 12:41:32 2025 +0900
test
commit ceb633a8c7100c7a6c651ba08aa269aa31c90019
Author: ...
Date: Sun Mar 30 12:40:03 2025 +0900
test
なお、ここでは pre.txt、post.txt は git で管理しないことを想定しています。
pre.txt はコミット前のため、コミットSHA がひとつ前のコミットで、post.txt はコミット後のため、リポジトリに反映されないためです。