使用Git部署站点:更新后挂钩第一次使用,然后再也不会

时间:2012-02-25 18:04:45

标签: git deployment mediatemple

git post-update挂钩有一个奇怪的问题。我在我的服务器上创建了存储库(/var/www/vhosts/git/master.git),并在此存储库中添加了一个更新后的挂钩,其中包含以下代码:

#!/bin/sh

echo $1
echo "*UPDATE*"

case " $1 " in
*'refs/heads/master'*)
    GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
    echo
    echo "Master was updated!"
    echo
    ;;
esac

case " $1 " in
*'refs/heads/sandbox'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
    echo
    echo "Sandbox was updated!"
    echo
    ;;
esac

我确保此文件是可执行的。然后我使用以下方法在我的机器上创建了一个本地存储库:

$ mkdir website && cd website
$ git init
$ echo 'Testing.' > index.html
$ git add index.html
$ git commit -q -m "Initial commit"
$ git remote add web ssh://username@website.com/var/www/vhosts/website.com/git/master.git
$ git push web +master:refs/heads/master

无论出于什么原因,第一次推送工作正常 - /var/www/vhosts/website.com/sandbox.website.com使用索引文件进行更新 - 但是以下任何推送都不起作用。我从post-update钩子回复说“Master已更新!”但目录实际上并未更新。

建议?

1 个答案:

答案 0 :(得分:0)

您似乎有权限问题。查看/var/www/*路径上的权限,确保您的git用户有权读取/写入/删除文件。

我使用了很多simpler technique(这里是一个详细的script),它允许我将我的服务器用作gitolite的git服务器并在push上部署而无需克隆{{{ 1}}路径。它适用于我/var/www/myprojectgit 1.7.9 Ubuntu 12.04.1 LTS

  1. 在服务器上创建您的存储库:

    Apache/2.2.22
  2. 配置存储库:

    mkdir myproject.git && cd myproject.git
    git init --bare
    
  3. 编辑或创建git config core.worktree /var/www/myproject git config core.bare false git config receive.denycurrentbranch ignore 并使其可运行

    hooks/post-receive
  4. 以下是文件内容:

    touch hooks/post-receive
    chmod u+x hooks/post-receive
    

    你准备好推动并让它发挥作用。

    我的git用户名为#!/bin/sh git checkout -f ,我的apache使用git用户。我必须在ubuntu上编辑apache配置(您也可以在/etc/apache2/conf.d/security上执行此操作)以包含:

    /etc/apache2/http.conf

    现在我的User git Group git 部署了push上的所有文件,使用/var/www/myproject用户/组创建文件,我的apache使用相同的用户/组来运行。

    现在您只需重新启动服务器或执行git:git

    即可