得到“致命:不是git存储库:'。'”当使用更新后挂钩在另一个repo上执行'git pull'时

时间:2010-10-28 14:00:42

标签: git githooks

我是git的新手,所以如果我在这里滥用术语,我会道歉(请纠正我),但我会尽我所能。

我正在尝试在Web服务器上设置一个裸git repo(hub)和一个开发站点工作副本(prime)。我试过在this article之后设计它。我希望每当推送集线器repo时都要更新开发工作副本。我的印象是,正确的钩子是post-update,我已经创建了这样:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

更新

当我将更改从本地存储库推送到裸集线器时,我从更新后的脚本中获得以下输出:

remote: sites
remote: fatal: Not a git repository: '.'

但是,如果我以用户“站点”的身份SSH进入服务器并手动执行此脚本,那么对于此挂钩或脚本可能出错的任何想法都会很有效吗?

5 个答案:

答案 0 :(得分:163)

这是最终有效的脚本。我认为我最初失踪的那个阻止它远程工作的是unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

答案 1 :(得分:27)

尝试改为:

#!/bin/sh
cd /path/to/working-copy/
env -i git pull

答案 2 :(得分:0)

尽管如此 取消GIT_DIR 只是工作。

在其他地方错误地设置GIT_DIR时会出现问题。

你可以添加它: GIT_DIR =的.git / 它会起作用

答案 3 :(得分:0)

在我的情况下,我已经指定了一个工作树,这打破了一些命令,如pull(或者更确切地说是fetch)。

要取消设置工作树,如果它在你的git配置中是通过:

git config --unset core.worktree

(还有其他设置工作树的方法)

需要注意的重要事项,

除非您自己首先使用自定义工作树在自己周围挖洞,否则不会有任何变化。

谐谑:

这对我来说意味着git内部在某些情况下使用相对于工作树+ .git/的路径。根据我的经验,除了git的最基本部分之外,工作树没有得到很好的支持。我没有彻底地进行过实验,如果我设置了git目录配置变量是正确的,我没有玩过,Git可能会表现得很好。

答案 4 :(得分:-1)

您可能有权限问题。我不确定您是如何设置裸git repo的,但如果它在git用户下运行,请确保允许git用户在项目目录中执行git pull

可选择尝试此操作以找出运行挂钩时的用户:

echo `whoami`