IM は、コミットされる予定のファイルで Astyle (コード美化ツール) を実行するための単純な git pre-commit フックを書き込みます。コードは次のとおりです。
#!/bin/sh
echo "git diff:"
FICHEROS=`git diff --name-only`
if [ -z "${FICHEROS}" ]; then
echo "Files not found"
else
echo "files are:"
echo "$FICHEROS"
cp $FICHEROS ${FICHEROS}_copy
echo "Running astyle"
/home/robgon/astyle/build/gcc/bin/astyle --indent=force-tab --pad-oper --pad-paren --delete-empty-lines --suffix=none --indent-namespaces --indent-col1-comments -n ${FICHEROS}_copy
echo "Formatted"
fi
たとえば、「file1.c」という名前のファイルを git commit -a -m "test1" でコミットしようとすると、コンソールに次のように表示されます。
git diff:
Files not found
[master d3d2526] test1
1 file changed, 1 insertion(+), 1 deletion(-)
したがって、 git diff --name-only は FICHEROS で出力を設定していません。事前コミットが astyle のみを実行しようとすると、スクリプトは出力をスキップし、ファイルをフォーマットしません...
コンソールから .git/hooks/pre-commit を実行すると、次のようになります。
git diff:
files are:
file1.c
Running astyle
Formato /home/robgon/gitTuto/gitRepo1/proj/file1.c_copy
Formatted
git が astyle を実行して pre-commit スクリプトで変数を設定できないのはなぜですか?コンソールから pre-commit を実行すると機能しますか?