基于Git的网站部署工作流程

时间:2011-03-25 23:51:47

标签: git workflow nginx hook

在我的服务器上,我有两个用户www-data(由nginx使用)和gitgit用户拥有一个包含我网站代码的存储库,www-data用户拥有该存储库的克隆(用作nginx的webroot)。我想设置一个工作流,以便推送到git的存储库导致www-data的存储库更新,从而更新我的网站。

为这些存储库设置挂钩的正确方法是什么(这也考虑了这两个用户的权限和权限)?

2 个答案:

答案 0 :(得分:5)

删除www-data拥有的存储库,并按照此webpage上的解决方案在git拥有的存储库中设置post-receive挂钩。

答案 1 :(得分:2)

我最终制作了git用户拥有的公开内容,并且所有人都可以阅读。然后,我做了以下设置钩子:

假设存储库名为mysite

  1. 创建一个分离的工作树,作为webroot(作为用户git

    mkdir /var/www/mysite
    cd /path/to/repository/mysite.git
    git config core.worktree /var/www/mysite
    git config core.bare false
    git config receive.denycurrentbranch ignore
    
  2. 添加一个post-receive hook,它将更新网站并为其设置正确的权限

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

    收件后脚本:

    #!/bin/sh
    git checkout -f
    chmod -R o+rX /var/www/mysite
    
  3. 参考:
    http://www.deanoj.co.uk/programming/git/using-git-and-a-post-receive-hook-script-for-auto-deployment/


    更新:这是better solution

      

    注意:本方法的早期版本依赖于将git config变量core.worktree设置为目标目录,core.bare设置为false,并将receive.denycurrentbranch设置为忽略。但是,如果您使用GIT_WORK_TREE(在我第一次编写howto时无效),则不需要进行这些更改,并且远程存储库可以保持不变。