这很奇怪,但是在设置 git 存储库并使用以下命令创建接收后挂钩时:
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
它工作没有任何问题......
对此的任何帮助将不胜感激
非常感谢
当钩子运行时,
GIT_DIR
并且(如果工作树被明确定义)GIT_WORK_TREE
被设置。这意味着您的 pull 不会与您更改到的目录中的第二个存储库一起运行。试试
git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull
;或取消设置 git 的 repo-local 环境:有关这些环境变量的更多信息man 1 git。
我经历过的一件事是使用
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
这不行吗?
已编辑
更好的是
您是否尝试过使用完整路径而不是〜?
该脚本可能是用 调用的
/bin/sh
,它不理解~
。尝试使用完整路径来~
代替。第一个推荐的答案是正确的——当一个钩子运行时,设置了 GIT_DIR 等。但是,如果您希望能够在另一个存储库中使用该脚本,那么该方法是有缺陷的,因为它硬编码重置 GIT_DIR。正如他们暗示的那样,另一种方法是使用 env 删除变量,如下所示: .