题 Git - 带git pull的post-receive hook“无法找到有效的git目录”


这很奇怪但是在设置git存储库并创建一个post-receive hook时:

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

它没有任何问题......

任何帮助都会非常感激

非常感谢


17
2018-01-29 16:44






答案:


当钩子在运行时 GIT_DIR 和(如果工作树是明确定义的) GIT_WORK_TREE 已设定。这意味着您的pull不会与您更改的目录中的第二个存储库一起运行。

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

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

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


23
2018-01-29 21:35



非常感谢Tobu,它确实有效,我也会查看更多有关它的信息。干杯 - zanona


我经历过的一件事是使用 post-update hook'--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


6
2018-03-16 14:25





这不行吗?

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

编辑

更好的是

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

1
2018-04-20 13:37





你试过完整的路径而不是〜?

cd /home/smb/websites/testing
git pull

0
2018-01-29 19:20





可能会调用该脚本 /bin/sh,这是不明白的 ~。尝试完整的路径 ~ 代替。


0
2018-01-29 21:02





第一个推荐的答案是正确的 - 当一个钩子运行时,GIT_DIR等被设置。但是,如果您希望能够在另一个存储库中使用该脚本,那么该方法是有缺陷的,因为它硬编码重置GIT_DIR。 正如他们暗示的那样,另一种方法是使用env删除变量,如下所示: env -i git reset --hard 显然你在那里运行的命令取决于你 - 这只是'env -i'位,这是重要的一点。


0
2018-02-07 08:18