使用Git / Gitolite部署网站[post-receive hook无法正常工作]

时间:2013-12-19 17:57:48

标签: git deployment web-deployment gitolite git-post-receive

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

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

我有2个分支掌握和发展。

我已经创建了一个post-receive hook脚本,以便将每个分支部署到正确的web目录中:

/var/www/<mysite>/ for branch Master [live version] /var/www/<mysite>/dev用于分支开发[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" ]; 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总是得到主分支,如果我使用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 [这里开发]?

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

谢谢。

2 个答案:

答案 0 :(得分:0)

在这种类型的钩子中,试试t:

  • 在脚本开头添加unset GIT_DIR
  • 除{ - 1}}选项外,始终使用--git-dir=/path/to/your/repo.git

这样,任何work-tree=命令都会确切地知道它应该执行的位置(git)和git repo(--work-tree)。

答案 1 :(得分:0)

试试这个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 ?