得到“致命的:不是一个混帐存储库:'。'”当使用后更新钩执行'git拉'在另一个回购

如果我在这里误用术语,我很抱歉(请纠正我),但我会尽我所能。

我试图在Web服务器上build立一个裸Git回购(hub)和一个开发网站工作副本(prime)。 这篇文章之后,我试图devise它。 我希望当推送到中心仓库时更新开发工作副本。 我的印象是,正确的钩子是post-update ,我创build了这样的:

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

更新

当我从本地回购更改到裸集线器时,我从更新后脚本得到以下输出:

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

但是,如果我作为用户'网站'SSH进入服务器,并手动执行这个脚本,它是伟大的任何想法,可能会出现这个钩子或脚本错了吗?

这是最终工作的脚本。 我认为我最初遗漏的一点阻止它远程工作的是未unset GIT_DIR

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

改为:

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

尽pipe未设置的GIT_DIR正常工作。

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

你可以添加,而不是:GIT_DIR = .git /它会工作

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

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

 git config --unset core.worktree 

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

重要的是要注意,

除非你自己通过使用自定义工作树在你周围挖这个洞,否则这个问题几乎没有变化。

嘲笑:

这意味着在某些情况下,git内部使用相对于worktree + .git/path。 根据我的经验,除了git最基本的部分之外,工作树并没有得到很好的支持。 我没有彻底尝试,Git可能会performance如果我设置任何git目录configurationvariables是正确的,我没有玩过。

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

可以select这个来找出挂钩运行时你是什么用户:

 echo `whoami`