我们目前使用以下 git hook 来运行 astyle 格式化源代码,然后才允许用户提交。但这种方法有个缺点,就是用户必须先提交代码,再格式化代码,最后再次提交,这有点麻烦。理想情况下,我们希望钩子可以格式化代码,并将已格式化的代码包含在原始提交中。我尝试重新添加更改后的文件,但会导致引用错误(显然)。我还尝试在 pre-commit 钩子中获取历史记录,退出钩子并重新运行 git commit 命令,但没有成功。
# Run astyle on changed .cs files, ignoring $ignored
res=$(exec git diff --cached --name-only | \
grep -Ev $ignored | \
xargs astyle --options=conf/astylerc | \
tail -n 1)
num_formatted=$(echo $res | cut -b 1) # We are only interested in the number preceeding 'formatted'.
[[ $num_formatted -ne 0 ]] && echo "WARNING: Code has been automatically formatted. Please re-add and re-commit" && exit 1 || echo "No code to format! Continuing commit"
有人有什么想法吗?