Git-使用 git pull 进行后接收挂钩“无法找到有效的 git 目录”

Git-使用 git pull 进行后接收挂钩“无法找到有效的 git 目录”

这很奇怪,但是在设置 git 存储库并使用以下命令创建 post-receive 钩子时:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

钩子确实运行了,但是它始终无法正确运行 git pull:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

所以我现在问自己,如何才能让钩子用 post-receive 来更新克隆?

在这种情况下,运行进程的用户是相同的,并且所有内容都在用户文件夹中,所以我真的不明白……因为如果我手动进入

cd ~/websites/testing
git pull

它可以正常工作...

任何帮助都将不胜感激

多谢

答案1

当钩子运行时,GIT_DIR并且(如果明确定义了工作树)GIT_WORK_TREE已设置。这意味着您的拉取不会在您更改到的目录中的第二个存储库中运行。

尝试git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull;或者用这个取消设置 git 的 repo-local 环境:

unset $(git rev-parse --local-env-vars)

有关这些环境变量的更多信息男人1 git

答案2

我遇到的一件事是,使用post-update钩子 '--git-dir' 效果很好,但 git 仍然抱怨缺少工作树(尽管使用了 '--work-tree')

简而言之,这没有用:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

而这有效:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull

答案3

这不管用吗?

cd /home/smb/websites/testing
env -i git pull

已编辑

更好的是

cd /home/smb/websites/testing
unset GIT_DIR
git pull

答案4

脚本可能使用 调用/bin/sh,但无法识别~。请尝试使用 的完整路径~

相关内容