[英]fatal: Not a git repository: '.git' error when git pre-commit hook fires but runs fine on commandline
我在本地克隆了一个现有项目。
我在 .git/hooks 文件夹中有一个预提交的 bash 脚本。
这是它的样子:
#!/bin/bash
cd api && php artisan enforcer:check --githook
我正在切换到 api 文件夹,因为我的 git root 是上一级,而 api 包含 laravel 框架,我可以在其中使用 php artisan 命令。
每当我在命令行上提交某些内容时,当我转到代码中的行时:
$projectGitRoot = trim(shell_exec("git rev-parse --show-toplevel"));
它给了我致命的错误:不是 git 存储库:'.git' 错误。
每当我通过执行 ./.git/hooks/pre-commit 在命令行上运行实际的预提交时,它就可以正常工作。
然后我将预提交更改为使用 Sudo,一切正常(但这不是一个好的解决方案)
#!/bin/bash
cd api && sudo php artisan enforcer:check --githook
我已经使用 whoami 进行了验证,在这两种情况下它都是同一个用户。 我试过用我的命令行用户 chowning .git 文件夹。 什么都行不通。
我能做什么? 我查看了其他问题,例如fatal: Not a git repository: '.git' error
但还是很失落。
更新:
似乎 git pre-commit 钩子不想对 GIT 做任何事情。 它甚至无法返回 git 状态。
我在结帐后挂钩中遇到了同样的错误:
fatal: not a git repository: '.git'
我通过只在钩子脚本启动的工作目录中运行 git 命令来修复它。下面的第一个git rev-parse
是在pushd
更改目录之前,第二个是在popd
切换回原始目录之后。
#!/bin/bash
pushd $(git rev-parse --show-toplevel)/mydir
# Do something inside mydir.
./do_something.sh
# Run git commands in the original directory.
popd
git rev-parse --show-toplevel
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.