使用Git / Gitolite部署网站[后接收挂机无法正常工作] [英] Deploy website using Git/Gitolite [post-receive hook doesn't work properly]

查看:179
本文介绍了使用Git / Gitolite部署网站[后接收挂机无法正常工作]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用git / gitolite来部署我的网站。



我创建了一个远程存储库,将其克隆到本地计算机上。 >

我有2个分支硕士和开发。



我创建了一个后接收钩子的脚本,以便在正确的Web目录中部署每个分支:



/ var / www /< mysite> / [live version]
/ var / www /< mysite> / dev for branch develop [dev version]



因为我在 .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];然后
sudo git --work-tree = $ prodroot checkout -f
sudo chown -R webuser:psacln $ prodroot
else
echopush on dev branch
sudo git --work-tree = $ devroot checkout -f
sudo chown -R webuser:psacln $ devroot
fi
done

如果我这样使用它,它不能正常工作,因为 checkout -f 总是得到主分支,在另一方,如果我使用 checkout -f $ branch 我收到错误说:

 致命:'/home/git/repositories/<mysite>.git'似乎不是git仓库
致命:无法从远程存储库读取。

请确保您具有正确的访问权限
并且存储库存在。

每一件事情都跌倒了,我不得不创建存储库[使用gitolite]。



我想要理解的是:如果它不是git目录,为什么它适用于 checkout -f MASTER]而不是 checkout -f $ branch [here DEVELOP]?



我错过了什么?请帮助我。



谢谢。

解决方案

  if [master==$ branch];然后
cd $ prodroot
sudo git pull //第一次做git clone
sudo chown -R webuser:psacln $ prodroot //什么组是psacln?


I'm trying to deploy my website using git/gitolite.

I've created a remote repository, I cloned it to my local machine.

I've 2 branches Master and develop.

I've created a script of post-receive hook in order to deploy each branch in the correct web directory :

/var/www/<mysite>/ for branch Master [live version] /var/www/<mysite>/dev for branch develop [dev version]

for that I'm using this script in .gitolite/hooks/common/post-receive file :

#!/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

If I use it this way, it doesn't work properly, because checkout -f always get master branch, in other side if I use checkout -f $branch I'm getting an error saying :

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.

And every thing fall down, I'm obliged to create repositories [Using gitolite].

What I want to understand is : if it's not a git directory, why it works for checkout -f [MASTER] and not for checkout -f $branch [here DEVELOP] ?

Am I missing something ? Please help me.

Thank you.

解决方案

Try this Coloq

if [ "master" == "$branch" ]; then
    cd $prodroot  
    sudo git pull //first time do git clone
    sudo chown -R webuser:psacln $prodroot  // what group is psacln ?

这篇关于使用Git / Gitolite部署网站[后接收挂机无法正常工作]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆