使用Git / Gitolite部署网站[后接收挂机无法正常工作] [英] Deploy website using Git/Gitolite [post-receive hook doesn't work properly]
问题描述
我创建了一个远程存储库,将其克隆到本地计算机上。 >
我有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屋!