【发布时间】:2014-02-05 15:53:31
【问题描述】:
我真的不明白为什么会这样。
在我的系统中,我得到了带有 gitolite 的“git”用户。所有 git 存储库、用户和存储库的权限都可以正常工作,似乎 gitolite 配置得很好,至少对于基本使用而言。
现在我需要使用 gitolite 在机器上设置一个网络服务器,我设置了 apache,并使用 git 用户在 www 目录中克隆了一个 repo,以便我可以通过浏览器访问文件。
克隆完全没有问题,我也可以手动执行git pull 并且 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-setup 将脚本传播到所有存储库。
当用户推送时,我确定脚本已执行,因为我看到 /var/www/onlinerepo/DONE 文件正在写入,但没有执行 git pull。我试图查看执行 git pull >> OUTPUT 的命令的输出,但它只创建一个空文件。
如果我通过命令行执行 git pull 命令,或者即使我从命令行手动执行 post-receive 脚本,我也会看到通常的“Already up-to-date”信息消息。
我做错了吗?我真的不明白为什么git pull 是脚本中唯一失败的命令。
【问题讨论】:
-
也许
git pull只写入标准错误,而您没有捕获。尝试git pull >> OUTPUT 2>&1以获得更好的诊断输出。 -
附加无关备注:目录存在检查没有用。如果
cd无法更改为提供的目录,它会告诉您原因。您的脚本可以仅重写为cd /var/www/onlinerepo && git pull && touch DONE而不会丢失任何功能。 -
我对这里的一切都很陌生,所以感谢您的反馈!我按照你说的做了,错误是:“致命:不是 git 存储库:'。'”我记得在克隆时也从命令行收到该错误,但我以更好的方式解决了指定 git 存储库的问题。然后我在上面的脚本代码中用
git pull ssh://git@localhost/home/git/repositories/myrepo.git更改了git pull,但不幸的是我在输出中得到了完全相同的错误。该命令在命令行中运行良好。 -
我改成
env -i git pull,好像可以了!