1

我已经设置了一个开发/测试服务器,开发人员可以在其中通过 gitolite/git 将存储库推送到远程 repo/webserver。在存储库站点上一切正常,但是开发人员可以使用服务器:

问题:

我想将代码部署到 apache 文档根目录(chown'd apache:apcahe 和 chmod'd 755)。我正在遵循这些说明,并在编辑我的接收后挂钩时,如下所述:

#!/bin/sh
echo "deploying to DocumentRoot"
GIT_WORK_TREE=/var/www/www.example.com git checkout -f

但是现在当我从我的本地仓库运行 git push 时,我得到了权限错误,例如:

error: git checkout-index: unable to create file .gitignore (Permission denied)
error: git checkout-index: unable to create file .htaccess (Permission denied)

而且我的文档根目录是空的...... post-receive 挂钩以用户'gitolite'身份运行(不确定这是否重要)。

gitolite 已经在 sudoers 列表中,所以我想运行类似:

GIT_WORK_TREE=/var/www/www.example.com sudo git checkout -f

但这似乎也不起作用,如果可能的话,我想避免调用单独的 shell 脚本

任何想法都会非常感激。

4

1 回答 1

3

首先,确保 git 帐户与 apache 帐户在同一组中。
(或者你需要回到我之前想要避免的答案)

您报告此作品:

 sudo GIT_WORK_TREE=..... git checkout -f

但是通过一个裸仓库,您还可以看到:

 fatal: You are on a branch yet to be born

(我不建议尝试让你的 gitolite 管理的仓库成为非裸仓库,就像在这篇博文中一样

git config core.worktree /home/user/myproject
git config core.bare false
git config receive.denycurrentbranch ignore

)

我更喜欢确保/var/www/www.example.com目录是一个 git repo,您​​可以在其中拉取,而不是尝试结帐。
所以我喜欢的钩子更多:

cd /var/www/www.example.com
git --git-dir=/var/www/www.example.com/.git --git-work-tree=/var/www/www.example.com pull

(with origin, 默认使用的远程名称,git pull参考 gitolite bare repo)

于 2013-03-14T14:06:55.060 回答