背景
諸事情でファイルのタイムスタンプを厳密に管理する必要があるプロジェクトで
ファイルのタイムスタンプ = commiter date
としたい状況になった
最初は既にコミット済みのファイルについて、まとめてタイムスタンプを変更したり、
個別にシェルを実行してタイムスタンプを変更していたが、
タイムスタンプを変更するシェルを実行し忘れるのでhookを利用する
なお、Windows環境
今まで
- ファイル編集…A
- add & commit…B
- ファイルのタイムスタンプはA
- 個別に(まとめて)手動でファイルのタイムスタンプをB時点に変更するシェルを実行(←これ面倒で忘れる)
hook仕込み後
- ファイル編集…A
- add & commit…B
- ファイルのタイムスタンプはA
- post-commitでcommitしたファイルのタイムスタンプをB時点に都度変更
コード
post-commitに以下のコードを記載する
.git\hooks\post-commit
# !/bin/bash
# for post-commit
# ファイルのタイムスタンプをcommiter dateに変更する
for FILE in $(git diff --name-only HEAD HEAD^); do
TIME=$(git log --pretty=format:%ci -n1 $FILE)
STAMP=`date +%y%m%d%H%M.%S --date "$TIME"`
touch -t $STAMP $FILE
done
git使ってるくせに、ファイルのタイムスタンプなんか気にするな
ってとても思いますが諸事情、諸事情