95

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

我正在尝试在 Web 服务器上设置一个裸 git repo(集线器)和一个开发站点工作副本(prime)。在这篇文章之后,我尝试对其进行模式化。我希望每当推送到集线器存储库时更新开发工作副本。我的印象是,正确的钩子是post-update,我这样创建的:

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

更新

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

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

但是,如果我以用户“站点”的身份通过 SSH 连接到服务器并手动执行此脚本,则效果很好关于此挂钩或脚本可能出现什么问题的任何想法?

4

5 回答 5

185

这是最终起作用的脚本。我认为我最初错过的阻止它远程工作的一点是unset GIT_DIR

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

exec git-update-server-info
于 2010-11-04T19:40:47.287 回答
29

请尝试:

#!/bin/sh
cd /path/to/working-copy/
env -i git pull
于 2010-12-26T04:14:07.120 回答
0

尽管未设置 GIT_DIR 只是有效。

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

你可以添加它: GIT_DIR=.git/ 它会工作

于 2014-05-15T11:40:07.717 回答
0

在我的情况下,我指定了一个工作树,这会中断某些命令,例如pull(或更准确地说fetch)。

如果工作树在您的 git 配置中,则取消设置工作树是通过:

git config --unset core.worktree

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

重要的是要注意,

除非您自己首先使用自定义工作树在您周围挖了这个洞,否则这几乎不会改变您的问题。

嘲笑:

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

于 2014-09-24T23:22:31.743 回答
-1

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

可以选择尝试这个来找出你在钩子运行时是什么用户:

echo `whoami`
于 2010-10-28T14:06:06.420 回答