git php自动发布,使用 Git Hooks 实现自动部署PHP项目

最近正在寻找一种简便的自动部署代码到服务器的方式,然后就发现了git hooks这个方法,查了一些资料再自己尝试过后,觉得还不错,记录下。

什么是git hooks

在git上是这么介绍的:

和其它版本控制系统一样,Git能在特定的重要动作发生时触发自定义脚本。有两组这样的钩子:客户端的和服务器端的。客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。

我觉得可以这么理解,一个钩子就像是js中的回调,每当git完成一个动作,如commit,push等,就可以触发相对应的事件。

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 中的文件夹,但不能像前者那样直接浏览或修改仓库中的代码。

d18205f53ed8a7f6534190cff5254e4d.png

使用 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/sh

unset GIT_DIR

cd /var/www/html/project

git pull origin master

编辑完成后,给该脚本添加可执行权限

$ chmod +x post-receive

测试是否能自动部署

为开发的本地仓库添加remote源

这个客户端本地仓库,即开发的机子的本地仓库,添加remote源,以后往这个remote push代码时,就会自动触发上面的脚本。

$ git remote add deploy user@ip:/gitrepo_dir

$ git push deploy master

测试

在开发机上浏览项目:

8571a42bb03183bed1326038fa59dba9.png

修改后再测试

在 index.php 中添加一句 echo "这是第二次push
";。然后像平时一样,commit,push到代码仓库中(该仓库是origin而不是deploy,是平时托管代码的仓库,如github等),再push到deploy仓库中。

根据返回的信息,可以看出,远程服务器中已经部署成功了。

再次刷新浏览器,可以看到网页已经被修改了。

f953bcfa3fa3e58d599540dcfc27a8dd.png

好了,一个简单的自动部署PHP项目的教程就到这了。其实,通过合理的设置 git hooks 可以实现很多功能,大家可以去慢慢挖掘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab读取时间数据,Matlab有关数据库读取及时间项的设定

Matlab有关数据库的读取需下载mysql-connector-java-5.1.26-bin.jar文件放到指定位置,并修改classpath.txt相关文件,具体可网上自行查找。看一下实例:conndatabase(‘photo‘, ‘root‘, ‘123321‘, ‘com.mysql.jdbc.Driver‘, ‘jdbc:mysq…

GAN还有这种操作!谷歌大脑和X实验室利用模拟条件和域适应提高机器抓取效率(附论文)

来源:机器人圈作者:Coogle Brain,Google X概要:相信大家都知道,通过检测和采集带有注释的视觉抓取数据集来训练现代机器学习算法可以说是非常耗时、昂贵的。相信大家都知道,通过检测和采集带有注释的视觉抓…

英伟达的雄心:成为AI时代的计算平台

9 月 26 日,NVIDIA英伟达在北京举行GTC大会,NVIDIA 创始人兼首席执行官黄仁勋在演讲中展示了能够加快人工智能大规模采用速度的全新技术,并介绍了为云服务商、电商和智慧城市提供的各项计算平台服务。发布AI 推理软件TensorRT 3:可…

Gartner公布云计算市场排位:亚马逊微软阿里前三

来源:网易科技概要:Gartner认为,亚马逊、微软和阿里云三大巨头引领了增长,预估IaaS、PaaS和SaaS的5年增长分别为28%、22%和19%。9月27日,美国权威研究机构Gartner发布2016年全球公共云市场份额报告,全球云计…

重磅 | 周志华最新论文:首个基于决策树集成的自动编码器,表现优于DNN

来源: AI科技大本营概要:深度神经网络需要花大力气调参,相比之下 gcForest 要容易训练得多。此外,深度神经网络需要大规模的训练数据,而 gcForest 在仅有小规模训练数据的情况下也照常运转。今年 2 月,南京…

adv是php系统标签,whatsns开源php系统网站SEO优化之网站首页,问题详情,文章详情,标签详情,栏目详情TDK优...

网站首页优化TDK可以进入后台,系统设置--站点设置中,设置网站首页别名官方首页名称优化--长尾关键词【whatsns知识库开源内容付费php问答系统】,这样百度搜索问答系统,开源php问答系统,php问答系统,付费问答…

MIT联合波士顿咨询:全球21个行业,对话3000名高管,AI如何重塑商业形态? | 雷报

来源:雷锋网概要:目前只有14%的调查对象认为,AI对他们现在的产品或服务已经有了很大的影响。但对于5年后的情况,这一比例上升到63%。人工智能已经成了一个新的风口,人人都在谈论人工智能,但是,企…

智能体到底是什么?这里有一篇详细解读

来源:机器人圈概要:根据我们希望实现的目标以及衡量其成功的标准,我们可以采用多种方法来创建人工智能。根据我们希望实现的目标以及衡量其成功的标准,我们可以采用多种方法来创建人工智能。它涵盖的范围极其广泛,从自…

人类PK机器:人工神经网络和生物神经网络的比较

原文作者:MADELINESCHIAPPA译者:李凌概要:通过对生物学习与人工智能进行的比较,我们可以建立一个更安全的基础设施系统。 通过对生物学习与人工智能进行的比较,我们可以建立一个更安全的基础设施系统。 本文由Sophos的…

h5大转盘 php,HTML5 canvas实现中奖转盘的实例代码

本篇文章给大家带来的内容是关于HTML5 canvas实现中奖转盘的实例代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。最近在学canvas做动画,于是就写个转盘练下手。上个简陋的成果图(中间那个是转的指针&#xff…

硬件巨头正在崛起,中国独占鳌头

来源:亿欧概要:四年前,当第一份独角兽名单产生时,名单上有39家创业公司,其中只有一家是硬件公司。今天,世界上有大约213家独角兽,其中有18家是硬件创业公司。考虑到硬件只占全球科技创业公司的一…

MATLAB显示错误使用untitled,使用Matlab 2016a阻止集合构建错误

matlab R2016a.OS:我所生成的Windows 10All是Master Block,除了用于测试用例之外,没有其他任何东西,我得到以下错误:请帮助我完成这项工作,因为我确实需要完成一些工作。Ali以上来自于百度翻译以下为原文Hi…

神经网络:你的大脑是一台计算机吗?

原作者:ShamliPrakash译者:彭婷概要:大约三年前,当我怀孕盼着儿子出生的时候,朋友送了我Lise Eliot写的“What’s Going on in There?”的书。大约三年前,当我怀孕盼着儿子出生的时候,朋友送了我Lise Elio…

深度 | 三大痛点左右着中国服务机器人产业发展

来源: 机器人内参概要: 从全球角度看,以智能服务机器人为主的机器人产业在不断发展,产业规模及市场空间持续扩张。目前全世界至少有48个国家在发展机器人,其中25个国家已涉足服务机器人开发,掀起一波服务机…

php fork 相关函数,C语言fork函数创建进程详解

在linux下,C语言创建进程用fork函数,接下来我们通过代码来一步步了解fork函数的各个知识点。1、依赖的头文件#include 2、fork的原理和概念fork子进程就是从父进程拷贝一个新的进程出来,子进程和父进程的进程ID不同,但用户数据一样…

华为云AI开发部总经理罗华霖:华为人工智能的实践与创新

来源:亿欧作者:罗华霖概要:9月21-22日,由深圳市罗湖区人民政府指导、亿欧公司主办的“GIIS-全球产业创新峰会”在罗湖区京基100瑞吉酒店盛大启幕。9月21-22日,由深圳市罗湖区人民政府指导、亿欧公司主办的“GIIS-全球产…

oracle drop 提交,oracle drop 存储过程

Oracle中删除用户遇到的问题我新建了一个用户xy,并导入了一些表,序列,存储过程在其中。现在我用删除该用户出现问题执行drop user xy,报错ORA-01922: 必须指定 CASCADE 以删除 XY问题原因CASCADE众所周知是级联的意思,…

Michael I. Jordan——计算思维、推断思维与数据科学

来源:图灵人工智能概要: Michael I. Jordan 是机器学习、统计机器学习泰斗,是贝叶斯网络、概率图模型、层次随机过程等多个重要方向的主要奠基者之一,也是统计学与机器学习交叉融合的主要推动者之一。Michael I. Jordan 是机器学习…

Google Brain 团队的研究方法

来源:全球人工智能概要:大约一年之前,Google Brain 团队首次分享了我们的使命:让机器拥有智慧,造福人类生活。大约一年之前,Google Brain 团队首次分享了我们的使命:让机器拥有智慧,…

Gartner重磅发布近40页PPT,详解2017年十大战略技术趋势

来源:中国大数据概要:Gartner将战略科技发展趋势定义为具有颠覆性潜力、脱离初级阶段且影响范围和用途不断扩大的战略科技发展趋势,这些趋势在未来五年内迅速增长、高度波动、预计达到临界点。 近日Gartner公司着重介绍了在2017年对多个组织具…