利用GIT钩子函数实现自动部署或其他操作

2023-11-18

1.Server端

第一步.创建初始化一个裸仓库(用来添加钩子函数)

git init --bare test_git_hook_function.git

第二步.通过裸仓库创建一个用来存放代码的仓库

git init test_git_hook_function
#/home/git/test_git_hook_function.git是上面创建的仓库地址
git remote add origin /home/git/test_git_hook_function.git
git clean -df
git pull origin master:master

第三步.创建钩子并赋权限

cd /home/git/test_git_hook_function.git/hooks
touch post-receive
chmod +x post-receive #赋予可执行权限

第四步.编辑钩子内容

#!/bin/sh
app_dir=你的代码目录 (例如: app_dir=/home/git/test_git_hook_function)
cd $app_dir || exit
unset GIT_DIR
# dosomething
...

第五步.测试钩子是否能运行

sh post-receive #或者 ./post-receive

2.client端(新玩法)

此处用的ssh方式,亦可以使用http

玩法说明:本人在gitee上面已有一份代码库,想将代码上传递到服务器(线上打包部署)

gitee上面的仓库代码留作备份,服务器上面的仓库用来作钩子部署

第一步:克隆代码

方法一:
git clone origin git@gitee.com:gitee_user_name/test_git_hook_function.git
方法二:
git init test_git_hook_function #关联远程代码仓库
git pull origin master:master #拉取代码

git remote -v #查看现在对应的远程仓库
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (fetch)
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (push)

第二步:新增一个推送仓库地址

 git remote set-url --add origin your_user_name@your_server_ip:origin_code_library_address
 例如: git remote set-url --add ssh://git@166.12.35.98[:端口]//home/git/test_git_hook_function.git
git remote -v #查看有没有添加上去(此时有三个)
	origin  git@gitee.comgitee_user_name/test_git_hook_function.git (push)
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (fetch)
    origin  ssh://git@166.12.35.98//home/git/test_git_hook_function.git (push)

第三步:推送代码 (前提条件有配置ssh,否则可能会出现推送失败)

#远程仓库的钩子函数也会被触动(有日志的话,会显示)
git push origin master:master

3.课外话

修改远程地址: git remote set-url  origin 你的新地址
	
hooks目录下的文件讲解(加上sample后缀,是为了避免触发)
ClientSide hooks:
  pre-commit:当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。
  prepare-commit-msg: 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。
  commit-msg:当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。
  post-commit:当commit完成后被触发,可以用此hook发送notification等。
  pre-rebase: rebase之前会被触发,可以用此hook来拒绝所有的已经push的commits进行rebase操作。
  post-merge:当merge成功后,会触发此hook。
  pre-push:当push时,remote refs被更新,但是在所有的objects传输前被触发。
  pre-auto-gc:当git gc --auto执行前被触发。在垃圾回收之前做一些验证或备份是挺不错的。

ServerSide hooks:
 pre-receive:当收到push动作之前会被执行。
 update:也是收到push动作之前被执行,但是有可能被执行多次,每个branch一次。
 post-receive:当push动作已经完成的时候会被触发,可以用此hook来push notification等,比如发邮件,通知持续构建服务器等。


4.小提示

  • 建议地址尽量写全,例如:git push origin master:master 可由 git push 代替
  • 更多git相关指令学习可参考 Pro Git
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用GIT钩子函数实现自动部署或其他操作 的相关文章

随机推荐

  • 代码走查和代码审查_代码审查随时间而变化

    代码走查和代码审查 我们已经进行了大约4年的代码审查 代码审查入门 从一开始 开发人员就会互相帮助 在有人询问时查看代码 或者有时主管或高级开发人员会介入并检查代码 如果我们发现测试存在问题 或者是否有人刚刚加入团队并且我们期望他们需要一些
  • android 透明状态栏方法及其适配键盘上推(二)

    在上一篇文章中介绍了一种设置透明状态栏及其适配键盘上推得方法 但是上一篇介绍的方法中有个缺点 就是不能消除掉statusbar的阴影 很多手机如 三星 Nexus都带有阴影 即使我用了
  • GD32F303调试小记(五)之ADC+DMA+硬件过采样

    前言 单片机的大多数的功能都是基于数字信号去控制的 然而许多的场合下 我们也需要有模拟信号的参与 因为许多变量的控制是需要连续的而非阶跃式的 常见的若想得到电压值 温度值 电流值等等都需要用到A D转换 如果外围器件不是特定IC而是自己搭的
  • Mask R-CNN详解

    一 Mask R CNN网络介绍 Mask R CNN是何凯明2017年提出的一个实例分割 Instance segmentation 算法 可以用来做 目标检测 目标实例分割 目标关键点检测 是ICCV2017的best paper Ma
  • 小科普

    买固态硬盘 我们会比较关注颗粒寿命 机械硬盘虽然几乎不用考虑长寿与否 除了考虑SMR PMR记录方式外 最怕的其实就是坏 盘一挂数据未必能找回来 所以其故障率指标就显得尤为重要 各种寿命指标 那这个指标一般就是MTBF了 全称平均无故障间隔
  • 文件传输协议FTP与TCP/IP协议之间有什么关系

    TCP IP协议是目前网络所采用的一种框架协议 包括五层 应用层 传输层 网络层 链路层 物理层 FTP协议是TCP IP协议的一部分 严格意义上来说是应用层协议 FTP是一种应用程序 基于TCP IP协议 它定义了本地登录户机与远程服务器
  • Verilog HDL运算符

    一 逻辑运算符 逻辑与 逻辑或 逻辑非 二 关系运算符 逻辑相等 逻辑不等 全等 不全等 和 可以比较含有x和z的操作数 在模块的功能仿真中有着广泛的应用 三 位运算符 非 与 或 异或 同或 四 拼接运算符 s1 s2 sn 五 一元约简
  • Python数据可视化:豆瓣电影TOP250

    欢迎关注天善智能 我们是专注于商业智能BI 人工智能AI 大数据分析与挖掘领域的垂直社区 学习 问答 求职一站式搞定 对商业智能BI 大数据分析挖掘 机器学习 python R等数据领域感兴趣的同学加微信 tstoutiao 邀请你进入数据
  • eclipse 使用maven构建 springboot +swagger

    swagger用于定义API文档 好处 1 前后端分离开发 2 API文档非常明确 3 测试的时候不需要再使用URL输入浏览器的方式来访问Controller 4 传统的输入URL的测试方式对于post请求的传参比较麻烦 当然 可以使用po
  • vue 记住密码下次自动登录

    div div
  • <HarmonyOS第一课>运行Hello World课后作业

    前言 HarmonyOS应用开发者基础认证课程课后习题 仅供参考 也欢迎各位小伙伴讨论指正 习题 判断题 1 DevEco Studio是开发HarmonyOS应用的一站式集成开发环境 正确 True 2 main pages json存放
  • [Qt]基础数据类型和信号槽

    文章目录 1 Qt基本结构 1 1 Qt本有项目 1 1 1 项目文件 pro 1 1 2 main cpp 1 1 3 mainwindow ui 1 1 4 mainwindow h 1 1 5 mainwindow cpp 1 2 Q
  • 使用libvirt管理KVM虚拟机

    使用libvirt管理KVM虚拟机 一 安装虚拟化管理工具 1 yum install virt manager libvirt libvirt python python virtinst 1 kmod kvm kvm kernel mo
  • 微信小程序wx.canvasToTempFilePath压缩上传图片,ios压缩成功但是数据sm2加密后无法发起请求,安卓一切正常

    问题以及解决 吐槽遇到的问题 在写微信小程序的时候 采用wx canvasToTempFilePath压缩图片且上传的时候 安卓一切正常 我在开发工具上也一切正常 偏偏ios上就不正常 不正常不是指压缩失败 而是明明也压缩成功了 竟然发不起
  • linux设备驱动makefile入门解析

    以下内容仅作参考 能力有限 如有错误还请纠正 对于一个普通的linux设备驱动模块 以下是一个经典的makefile代码 使用下面这个makefile可以 完成大部分驱动的编译 使用时只需要修改一下要编译生成的驱动名称即可 只需修改obj
  • 关于socket大数据收发解决方案

    关于socket大数据收发 现在遇到个问题 我们这边是做客户端的 服务器端是socket 不是我们写的 看不到源码 走的是tcp协议 我们的socket客户端在接收大数据 大约大于5000个byte 的时候总是不能一次性的接收所有的数据 一
  • 知乎 爬虫

    import requests from pyquery import PyQuery as pq def getHtml url try headers User Agent Mozilla 5 0 Macintosh Intel Mac
  • 远程桌面出现了内部错误有哪些解决方法?

    远程桌面连接出现了内部错误解决方法 在使用Windows自带远程桌面连接时 有时会遇到 远程桌面出现了内部错误 这一问题 许多用户不知道如何解决远程桌面连接出现了内部错误 这里我们整理了五种有效的解决方法 分享出来以供参考 方法一 重启远程
  • ETL使用Kettle处理银行信用卡申请项目

    一 项目概述 对当天申请信用卡人员进行信息校对 对不符合人员进行风险标注 无风险人员信息根据所在地区进行分表 交付 信息来源 1 web端 银行网页申请 2 移动端 网银 手机银行 3 三方 各类门户网站 手机APP 4 柜台 人工柜台 A
  • 利用GIT钩子函数实现自动部署或其他操作

    1 Server端 第一步 创建初始化一个裸仓库 用来添加钩子函数 git init bare test git hook function git 第二步 通过裸仓库创建一个用来存放代码的仓库 git init test git hook