【发布时间】:2017-08-16 19:34:27
【问题描述】:
我有一个 git pre-commit 钩子,它在提交之前对任何修改过的文件进行一些样式检查。
实现无关紧要,但它首先调用git diff。这是我在(repo)/.git/hooks/pre-commit 中的内容。
#!/bin/sh
echo "=== Running script..."
git diff
echo "=== Done running script..."
# Other stuf
# ....
# Always exit with 1 so pre-commit hook always fails.
# Useful for testing
exit 1
当我实际尝试提交某些内容时,pre-commit 挂钩正确触发,但 git diff 命令不输出任何内容(肯定有修改过的文件)
> git commit --all -m "foo"
=== Running script...
=== Done running script...
但是,如果我直接/手动运行 pre-commit 挂钩脚本,它确实工作
> ./.git/hooks/pre-commit
=== Running script...
(... outputs git diff ...)
=== Done running script...
git 调用钩子与我手动调用它有什么不同?无论哪种方式,它都以相同的用户身份运行(我的用户名)
我也尝试了this thread 的建议,但unset GIT_DIR、--git-dir= 和work-tree= 没有解决任何问题。
谢谢!
【问题讨论】: