繁体   English   中英

致命:不是 git 存储库:当 git pre-commit 钩子触发但在命令行上运行良好时出现“.git”错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM