最好的扁平化网站,外国网站上做Task,wordpress主题 错误,郑州市建设厅官方网站最近正在寻找一种简便的自动部署代码到服务器的方式#xff0c;然后就发现了git hooks这个方法#xff0c;查了一些资料再自己尝试过后#xff0c;觉得还不错#xff0c;记录下。什么是git hooks在git上是这么介绍的#xff1a;和其它版本控制系统一样#xff0c;Git能在…最近正在寻找一种简便的自动部署代码到服务器的方式然后就发现了git hooks这个方法查了一些资料再自己尝试过后觉得还不错记录下。什么是git hooks在git上是这么介绍的和其它版本控制系统一样Git能在特定的重要动作发生时触发自定义脚本。有两组这样的钩子客户端的和服务器端的。客户端钩子由诸如提交和合并这样的操作所调用而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。我觉得可以这么理解一个钩子就像是js中的回调每当git完成一个动作如commitpush等就可以触发相对应的事件。git hooks的种类git中有两种类型的钩子客户端的和服务器端的。客户端的钩子有pre-commit 钩子在键入提交信息前运行。prepare-commit-msg 钩子在启动提交信息编辑器之前默认信息被创建之后运行。post-commit 钩子在整个提交过程完成后运行。applypatch-msg 你可以用该脚本来确保提交信息符合格式或直接用脚本修正格式错误。pre-applypatch 在 git am 运行期间被调用post-applypatch 运行于提交产生之后是在 git am 运行期间最后被调用的钩子。pre-rebase 钩子运行于变基之前以非零值退出可以中止变基的过程。post-rewrite 钩子被那些会替换提交记录的命令调用。post-checkout 在 git checkout 成功运行后调用。post-merge 在 git merge 成功运行后调用。pre-push 在 git push 运行期间 更新了远程引用但尚未传送对象时被调用。pre-auto-gc 会在垃圾回收开始之前被调用可以用它来提醒你现在要回收垃圾了或者依情形判断是否要中断回收。服务器端的钩子有pre-receive 处理来自客户端的推送操作时最先被调用。update 它会为每一个准备更新的分支各运行一次。post-receive 在整个过程完结以后运行可以用来更新其他系统服务或者通知用户。如何使用git hooks所有的钩子脚本都存放在 .git/hooks 文件夹中。当使用 git init 初始化一个新版本库时Git 默认会在这个目录中放置一些示例脚本。这些示例的名字都是以 .sample 结尾如果你想启用它们得先移除这个后缀。简单的自动部署在服务器初始化一个远程git仓库git init 和 git init --bare 的区别初始化出来的仓库是不一样的前者初始化的是一个普通的仓库其中 .git 文件夹是隐藏的并且能看见该仓库下所有的源码。而后者初始化出来的仓库中的文件就是 .git 中的文件夹但不能像前者那样直接浏览或修改仓库中的代码。使用 git init --bare 初始化一个远程仓库。该仓库是用于项目部署的。在我们本地开发完成后将项目push至该仓库后将自动部署网站。$ cd ~/workspace$ mkdir project$ cd project$ git init --bare在服务器初始化一个本地仓库因为php的项目基本不需要编译后运行所以将网站的根目录作为本地仓库了。$ cd /var/www/html/project$ git clone ~/workspace/project之前看教程都是新建一个 project 文件夹再 clone但是这样会将项目目录就变成了 /var/www/html/project/project 所以直接在根目录 clone 即可。为远程仓库设置一个 hook设置一个 post-receive 钩子当仓库收到push请求后就会自动执行该钩子中的脚本。现在就通过该钩子实现简单的项目部署。#!/bin/shunset GIT_DIRcd /var/www/html/projectgit pull origin master编辑完成后给该脚本添加可执行权限$ chmod x post-receive测试是否能自动部署为开发的本地仓库添加remote源这个客户端本地仓库即开发的机子的本地仓库添加remote源以后往这个remote push代码时就会自动触发上面的脚本。$ git remote add deploy userip:/gitrepo_dir$ git push deploy master测试在开发机上浏览项目修改后再测试在 index.php 中添加一句 echo 这是第二次push ;。然后像平时一样commitpush到代码仓库中(该仓库是origin而不是deploy是平时托管代码的仓库如github等)再push到deploy仓库中。根据返回的信息可以看出远程服务器中已经部署成功了。再次刷新浏览器可以看到网页已经被修改了。好了一个简单的自动部署PHP项目的教程就到这了。其实通过合理的设置 git hooks 可以实现很多功能大家可以去慢慢挖掘。