Can';t在gitolite post接收钩子中执行git命令

Can';t在gitolite post接收钩子中执行git命令,git,hook,gitolite,Git,Hook,Gitolite,我真的不明白为什么会这样 在我的系统中,我使用gitolite获得了“git”用户。所有git repos、用户和repos的权限都工作得很好,gitolite似乎配置得很好,至少在基本用途上是这样的 现在,我需要在带有gitolite的机器上设置一个Web服务器,我设置了apache,并使用git用户在www目录中克隆了一个repo,以便通过浏览器访问文件 克隆一点问题都没有,我还可以手动执行git拉取操作,git将从repo中拉取 问题是每次用户推送时,我都试图自动将项目部署到www目录。我

我真的不明白为什么会这样

在我的系统中,我使用gitolite获得了“git”用户。所有git repos、用户和repos的权限都工作得很好,gitolite似乎配置得很好,至少在基本用途上是这样的

现在,我需要在带有gitolite的机器上设置一个Web服务器,我设置了apache,并使用git用户在www目录中克隆了一个repo,以便通过浏览器访问文件

克隆一点问题都没有,我还可以手动执行git拉取操作,git将从repo中拉取

问题是每次用户推送时,我都试图自动将项目部署到www目录。我编写了一个~/.gitolite/hooks/common/post-receive脚本,代码如下:

#!/bin/sh
dir=/var/www/onlinerepo
if [ ! -d $dir ] ; then
        echo "the directory $dir does not exist"
        exit 1
fi

cd $dir
git pull
touch DONE
我还进行了
gl设置
,将脚本传播到所有存储库。 当用户按下时,我确信脚本会被执行,因为我看到/var/www/onlinepo/DONE文件正在被写入,但没有执行
git pull
。我试图看到命令的输出执行git pull>>输出,但它只创建了一个空文件

如果我通过命令行执行git pull命令,或者甚至从命令行手动执行post receive脚本,我会看到通常的“ready-update”信息消息


我做错什么了吗?我真的不明白为什么脚本中只有
git-pull
命令失败。

我决定用

env -i git pull ssh://git@localhost/home/git/repositories/myrepo.git

也许,
git pull
只写入stderr,而您并没有捕获它。尝试
git pull>>输出2>&1
以获得更好的诊断输出。附加和不相关的备注:目录存在性检查没有用。如果
cd
无法更改为提供的目录,它将告诉您原因。您的脚本可以重写为cd/var/www/onlinepo&&git pull&&touch DONE而不会丢失任何功能。我对这里的所有内容都很陌生,因此感谢您的反馈!我照你说的做了,错误是:“致命的:不是git存储库:”。“我记得在克隆时也从命令行得到了这个错误,但我决定以更好的方式指定git repo。然后,我用
git pull更改了上面脚本代码中的
git pull
ssh://git@localhost/home/git/repositories/myrepo.git
但不幸的是,我在输出中得到了完全相同的错误。不过,该命令在命令行中运行良好。我改为
env-igit-pull
,它似乎可以工作!这是因为
env-i
抛出了所有其他环境变量。但是,这是一个非常大的锤子(例如,它抛出了
$HOME
)。需要取消设置的特定变量是
GIT_DIR
,因此在其他位置执行其他GIT命令之前,请先取消设置GIT_DIR。