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

在我的服务器上,我有两个用户, www-data (由nginx使用)和gitgit用户拥有一个包含我的网站代码的存储库, www-data用户拥有该存储库的副本(作为nginx的webroot)。 我想build立一个工作stream,推送到git的存储库会导致www-data的存储库更新,从而更新我的网站。

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

移除www-data所拥有的资源库,并按照此网页上的解决方案在git拥有的资源库中设置post-receive钩子。

我最终制作了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. 添加一个后期接收挂钩,将更新网站,并设置正确的权限

     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 

参考:
http://www.deanoj.co.uk/programming/git/using-git-and-a-post-receive-hook-script-for-auto-deployment/


更新:这是一个更好的解决方案 。

注意:这个howto的早期版本依赖于将git config变量core.worktree设置为目标目录,core.bare为false,并且receive.denycurrentbranch忽略。 但是,如果使用GIT_WORK_TREE(在首次编写howto时不起作用),则不需要这些更改,并且远程存储库可以保持裸露状态。