IM 编写了一个简单的 git pre-commit 钩子来在将要提交的文件中运行 Astyle(一个代码美化器)。这是代码:
#!/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
例如,当我尝试使用 git commit -a -m "test1" 提交名为“file1.c”的文件时,我进入控制台:
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 并设置变量,当我从控制台运行预提交时,它可以工作?