Deploy website using Git/Gitolite [post-receive hook doesn't work properly]

谁都会走 提交于 2019-12-06 09:44:58

问题


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.


回答1:


In this type of hook, try t:

  • add unset GIT_DIR at the beginning of the script
  • always use the --git-dir=/path/to/your/repo.git in addition of the --work-tree= option.

That way, any git command will know exactly where (--work-tree) and for which git repo (--git-dir) it is supposed to be executed.




回答2:


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 ?


来源:https://stackoverflow.com/questions/20688537/deploy-website-using-git-gitolite-post-receive-hook-doesnt-work-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!