Git 预提交hook don';t返回正确的输出
我试图使用git的预提交钩子来强制执行一些规则。我想使用Git 预提交hook don';t返回正确的输出,git,bash,pre-commit-hook,Git,Bash,Pre Commit Hook,我试图使用git的预提交钩子来强制执行一些规则。我想使用git diff--name only检查任何未老化的已更改文件,如果存在,请使提交过程失败。但是,在我的预提交文件中: #!/bin/bash cd "$(git rev-parse --show-toplevel)" pwd test=$(git diff --name-only) echo "Untracked files: $test" exit 0 git diff--name only返回一个空字符串。如果在shell中运行该
git diff--name only
检查任何未老化的已更改文件,如果存在,请使提交过程失败。但是,在我的预提交
文件中:
#!/bin/bash
cd "$(git rev-parse --show-toplevel)"
pwd
test=$(git diff --name-only)
echo "Untracked files: $test"
exit 0
git diff--name only
返回一个空字符串。如果在shell中运行该命令,则会看到未老化的文件发生更改。将命令更改为使用sudo
似乎行为正确,这使我相信问题在于用户权限。但是chmod u+x
ing甚至chmod 777
ingpre-commit
文件似乎不会影响结果
我还在git repo根目录中创建了一个类似的bash文件来测试该命令,它可以正常工作。我认为应该使用
git diff--staged
来显示staged文件
并确保git commit
触发了预提交脚本执行。当git提交时,只需检查第一行是repository direcotry
我已经测试了你的剧本,没什么问题。因此,我想您可能会注意到重命名
pre-commit.sample
为pre-commit
?我无法重现您的问题。不过,我要注意的是,git diff--name only
将索引与工作树进行比较,因此它会找到修改过但未老化的文件(您的文本说这是您想要的)。到目前为止还不错,但你确实做到了:echo“Untracked…”
这个词的意思是Untracked而不是unstage。@torek good catch,意思是unstage。