プロジェクトによっては、そう安々と変更してほしくないファイルが有ったりします。
そこで、特定のファイルの変更をコミット出来なくするGitフックの紹介です。
例えば、.htaccessとlibディレクトリ配下の全てのファイルの変更を禁止するには以下の様なpre-commitフックを作成します。
.git/hooks/pre-commit
#!/bin/sh
unchangeable_files=(
^\\.htaccess$
^lib/.*
)
containsElement () {
local e
for e in "${@:2}"; do [[ "$1" =~ $e ]] && return 0; done
return 1
}
for FILE in `git diff --cached --name-status $against -- | cut -c3-`; do
if containsElement $FILE "${unchangeable_files[@]}"; then
echo "$FILE"
CHANGE_DETECTED=1
fi
done
if [ "$CHANGE_DETECTED" ]; then
echo "Failed to commit because of modification of files above."
exit 1
fi
変更禁止ファイルを変更してコミットしようとするとエラーメッセージが表示され、コミットが失敗します。