【发布时间】:2013-12-19 17:57:47
【问题描述】:
我正在尝试使用 git/gitolite 部署我的网站。
我已经创建了一个远程存储库,我将它克隆到我的本地机器上。
我有 2 个分支 Master 和 development。
我创建了一个 post-receive 挂钩脚本,以便将每个分支部署到正确的 Web 目录中:
/var/www/<mysite>/ for 分支 Master [live version]
/var/www/<mysite>/dev 分支开发 [开发版]
为此,我在.gitolite/hooks/common/post-receive 文件中使用了这个脚本:
#!/bin/bash
prodroot="/var/www/<mysite>"
devroot="/var/www/<mysite>/dev"
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
sudo git --work-tree=$prodroot checkout -f
sudo chown -R webuser:psacln $prodroot
else
echo "Push on dev branch"
sudo git --work-tree=$devroot checkout -f
sudo chown -R webuser:psacln $devroot
fi
done
如果我以这种方式使用它,它将无法正常工作,因为checkout -f 总是得到 master 分支,另一方面,如果我使用 checkout -f $branch,我会收到一条错误消息:
fatal: '/home/git/repositories/<mysite>.git' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
每件事情都失败了,我不得不创建存储库 [使用 gitolite]。
我想了解的是:如果它不是 git 目录,为什么它适用于 checkout -f [MASTER] 而不适用于 checkout -f $branch [这里 DEVELOP] ?
我错过了什么吗?请帮帮我。
谢谢。
【问题讨论】:
标签: git deployment web-deployment gitolite git-post-receive