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概要:相信大家都知道,通过检测和采集带有注释的视觉抓取数据集来训练现代机器学习算法可以说是非常耗时、昂贵的。相信大家都知道,通过检测和采集带有注释的视觉抓…

java gui 打开另一个,java – 从另一个JFrame Gui访问vars

好的,我已根据您的说法对我的代码进行了一些更改.我有3个班:第二类(和第一个GUI):我有4个JButton – Simulare,CazParticular,Start和HandSelection,一些JLabel和3个JTextField;当我按下HandSelection按钮时,另一个框架会创建不同的内容.第三类(和第二个…

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

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

lc filter在matlab哪,基于python实现matlab filter函数过程详解

matlab中的filter函数:y filter(b,a,x)python实现matlab中的filter函数def filter_matlab(b,a,x):y []y.append(b[0] * x[0])for i in range(1,len(x)):y.append(0)for j in range(len(b)):if i > j :y[i] y[i] b[j] * x[i - j ]j 1for l in range(len(b)-1…

php多商户限时抢购,GitHub - 617746883/thinkphp5.0_shop: 基于thinkphp5,多商户商城。积分商城、团购、秒杀、拍卖、夺宝等多插件(持续开发中)...

SUL1SS_shopAuthor:SUL1SSEmail:617746883qq.com简介与现状自营多商户上传管理后台api接口核心功能组件化积分商城预计后续实现功能:团购、拍卖、秒杀、夺宝等插件。客户端-web手机端将采用vue搭建脚手架框架。由于个人能力有限,所以应用的代码在有些地方设计可能存…

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

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

matlab设置固定的窗宽窗位,python实现CT窗宽窗位的调整(即指定HU值保存图像)...

最近一直在做实验,所以好久没有更新了,先把上周做的一些小的实验贴出来供大家分享。在医生诊断时,是会将CT图像调整成不同的窗来处理的。比如说肺部CT吧,肺窗(窗宽为2000,窗位为-400)用于看小的肺结节;腹部…

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

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

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

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

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

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

pay.onzan.en app.php,IBOS 协同办公平台PHP版 v1.0

/** 基于本地数据拼音匹配引擎* Version 0.3 简体中�?繁体中文* Date: 2011-09-19* 链接已屏蔽* (c) 2009-2010 TangBin, 链接已屏蔽** This is licensed under the GNU LGPL, version 2.1 or later.* For details, see: http://creativecommons.org/licenses/LGPL…

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

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

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

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

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

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

php 商品显示,php – WooCommerce仅显示购买的商品

您可以采取至少两种不同的方法来解决此问题.第一种是从每个帖子中获取产品,然后从每个产品中获取产品ID,然后使用if语句过滤使用wc_customer_bought_product或woocommerce_customer_bought_product(如果您使用的是旧的WooCommerece).第一种方法的一个例子是$user_id get_curre…

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

来源:亿欧概要:四年前,当第一份独角兽名单产生时,名单上有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…

swift怎么调用Java,Swift完成UIAlertController的调用

Swift完成UIAlertController的调用iOS8中的UIAlertView和UIActionSheet已经都被UIAlertViewController代替了,所以,本篇blog就来探讨下如何用swift生成提示框。我们先来看一下Apple的UIAlertController的文档:import Foundationimport UIKit/…