Answers:
《使用Git管理网站》中对此进行了总结。
该过程的关键是服务器端钩子“ post-receive”(有关Customizing Git的 git hooks -Git Hooks和githooks手册页的更多信息)。服务器接收到所有数据后,此挂钩将运行。
服务器接收到数据后,它将运行git checkout -f
-f选项将强制检出到磁头,即使存在局部差异也是如此。
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
将其放在hooks/
目录中post-receive
并作为可执行文件。当然,路径会更改为您拥有Web服务器文件的位置(使用GIT_WORK_TREE
设置环境变量的方式,因此您无需在服务器上处理点文件和git设置)。
为了回滚,应该为每个发行版加上标签(这也可以作为提交后挂钩的一部分来完成)。通过标记发布,可以轻松地确定要回滚的位置,尽管这可能涉及登录服务器并签出该标签。
post-receive
挂钩中完成所有操作,实际上这只是一个脚本,您可以在其中放入所需的任何内容。
更新要推送到的存储库的工作树的最简单方法是
git config receive.denyCurrentBranch updateInstead
在接收方设置
。参见
https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch
Ryan对post commit hooks的回答比较好,因为它允许签出到其他不同的位置(您可能不想在Web文件夹中使用.git)。但是在此级别上,最好使用一些现有的部署工具,例如sleske在评论中说的。