4

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 を実行すると機能しますか?

4

2 に答える 2

2

これが新しいスクリプトで、現在実行されています。

!/bin/sh
echo `git status`
echo "git diff:" 
FICHEROS=`git diff --cached --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
于 2014-03-26T13:23:35.563 に答える
1

git diffを使用してコミットしようとしているものに対して行う必要があると思います--cached

FICHEROS=`git diff --cached --name-only`
于 2014-03-26T12:55:50.767 に答える