如何使用git命令打patch

以下的说明只针对于centos/frdora/kylinos等rpm包管理的操作系统

在我们平时的业务开发和维护中,遇到业务的一些问题的时候,就需要去修改源代码。像我平时中,修改的方式就两个,一个直接去源码中修改,一个就是打patch。前面的方式就是方便,带来的问题就是别人拿到修改的源码,不知道哪里修改了。常用的还是打patch,打patch呢,一个使用diff命令打,还有一个就是使用git的方式。

准备工作:

一个src包,这里我们以portainer-2.0.0-3.ky10.src.rpm为例

在打patch之前,我们都需要把原有的patch先打到源码中去,使用rpmbuild -bp xxxx.spec命令

现在我们介绍一下两种打patch的方式,像rpm的使用就不细说了啊

1. diff方式

这个其实很简单的,看下面的步骤

[root@host157 BUILD]# cp portainer/ portainer.bk -af
[root@host157 BUILD]# vim portainer/public/index.html
[root@host157 BUILD]#
[root@host157 BUILD]# diff -urN portainer.bk/ portainer > 1.patch
[root@host157 BUILD]# cat 1.patch
diff -urN portainer.bk/public/index.html portainer/public/index.html
--- portainer.bk/public/index.html      2020-08-31 16:58:59.000000000 +0800
+++ portainer/public/index.html 2021-08-13 19:31:24.241043659 +0800
@@ -4,7 +4,7 @@<meta charset="utf-8" /><title>Portainer</title><meta name="description" content="" />
-    <meta name="author" content="Portainer.io" />
+    <meta name="author" content="leechm" /><!-- HTML5 shim, for IE6-8 support of HTML5 elements --><!--[if lt IE 9]>
[root@host157 BUILD]#

这样一个简单的patch就打好了,然后直接就可以去用了。

2.git方式

git的方式最大的有点就是通过git log可以看到的之前的操作

[root@host157 BUILD]# cd portainer
[root@host157 portainer]# ls
portainer  public
[root@host157 portainer]# git init
已初始化空的 Git 仓库于 /root/rpmbuild/BUILD/portainer/.git/
[root@host157 portainer]# git add .
[root@host157 portainer]# git commit -a -m "abc"
[master(根提交) a70d308] abc33 files changed, 307 insertions(+)create mode 100755 portainercreate mode 100644 public/07745d55b001c85826eedd479285cdbb.svgcreate mode 100644 public/249bec13697c484bcfe40241cabfd053.pngcreate mode 100644 public/24b23490023e318f9c08cf94253542a0.pngcreate mode 100644 public/2ab6d77445159e590879381735de9ff1.pngcreate mode 100644 public/412a43d6840addd683665ec12c30f810.woff2create mode 100644 public/4806ce9049e1e082dd3da4063ceb0eea.xmlcreate mode 100644 public/4a5d4d855d11fae79cc864bdacb2f479.eotcreate mode 100644 public/4c1da237bdae0773309df93b2cd48e09.ttfcreate mode 100644 public/5734d789b25228cbafc64a58ae971aca.woffcreate mode 100644 public/5b98afb96054e0fa36a8299869f7f464.pngcreate mode 100644 public/5ba13dcb526292ae707310a54e103cd1.pngcreate mode 100644 public/5da83cfb4883a59354abeff852cb7394.pngcreate mode 100644 public/6b03ffb82223ffdcc7fc093f199f758b.pngcreate mode 100644 public/8d4556f217181796cf3d542e7726e425.svgcreate mode 100644 public/91a23e8bf2b4b84c39311cb5eb23aaa0.woff2create mode 100644 public/9a1672a8a8d91fbf82c71f451d495253.eotcreate mode 100644 public/a371dc5d333617ab2eca53d8db50b5da.svgcreate mode 100644 public/c2a38918194e73e3ddaf75bbc84a25b7.svgcreate mode 100644 public/c65d154888aa166982dac3e72e7380ec.ttfcreate mode 100644 public/dc4d092847be46242d8c013d1bc7c494.pngcreate mode 100644 public/e18bbf611f2a2e43afc071aa2f4e1512.ttfcreate mode 100644 public/eb45a68ab4c8d154c69396d27d5721be.pngcreate mode 100644 public/f0a03e151fb4eec3a5e655fae9886ac5.ttfcreate mode 100644 public/f0ea477ef046ba5fef9249ec3172903e.svgcreate mode 100644 public/f3a7d3b5880544a91e9a7e6f8f35d4d2.woffcreate mode 100644 public/f461b0cc3c2692b7b8475389b6a051ec.pngcreate mode 100644 public/f9508a64a1beb81be174e194573f7450.pngcreate mode 100644 public/index.htmlcreate mode 100644 public/main.df5487ae7f62fcda715d.csscreate mode 100644 public/main.df5487ae7f62fcda715d.jscreate mode 100644 public/vendor.1.csscreate mode 100644 public/vendor.df5487ae7f62fcda715d.js
[root@host157 portainer]# vim public/index.html
[root@host157 portainer]# git commit -a -m "change index.html"
[master d865846] change index.html1 file changed, 1 insertion(+), 1 deletion(-)
[root@host157 portainer]# git format-patch -1
0001-change-index.html.patch
[root@host157 portainer]#
[root@host157 portainer]# cat 0001-change-index.html.patch
From d865846a31d9019bea8e70b7609b3c154aa57283 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Fri, 13 Aug 2021 19:35:47 +0800
Subject: [PATCH] change index.html---public/index.html | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/public/index.html b/public/index.html
index b185cf9..9128b16 100644
--- a/public/index.html
+++ b/public/index.html
@@ -4,7 +4,7 @@<meta charset="utf-8" /><title>Portainer</title><meta name="description" content="" />
-    <meta name="author" content="Portainer.io" />
+    <meta name="author" content="leechm" /><!-- HTML5 shim, for IE6-8 support of HTML5 elements --><!--[if lt IE 9]>
--
2.23.0
[root@host157 portainer]#

这个方式我看龙芯公司经常用,因为像diff那样的方式,有时候遇到patch打不进源码中去的现象,用git的话,倒是没怎么遇到过。

git的话,有几个注意的地方

1. git format-patch -1 表示单次提交

2. 记得-bp完之后,git init初始化一下

详细的git format-patch操作,可以查阅官方文档https://git-scm.com/docs/git-format-patch

rpm打patch的方式相关推荐

  1. nginx patch补丁方式添加 nginx_upstream_check_module 模块,并测试健康检查

    原创博客地址:陈帅同学-nginx patch补丁方式添加 nginx_upstream_check_module 模块,并测试健康检查 我的测试环境 contos:6.7nginx:1.63 che ...

  2. 使用RPM包安装(yum方式)

    注意:使用RPM包安装(yum方式)的前提:虚拟机能够访问互联网. 特点:不需要手动卸载系统自带的 MariaDB,yum 工具会自动帮我们卸载. 配置 Yum 源 首先,下载配置 yum 仓库的 r ...

  3. rpm安装包安装方式

    全文来自参考xmind的安装方式链接 1.安装alien sudo apt-get install alien 2.到下载的文件目录下将.rpm格式的软件包转换成.deb格式 sudo alien X ...

  4. linux mysql5.7.9下载_关于linux-Centos 7下mysql 5.7.9的rpm包的安装方式

    环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7.1 mysql数据 ...

  5. 关于linux-Centos 7下mysql 5.7.9的rpm包的安装方式

    环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7.1 mysql数据 ...

  6. 破解VProtect所有版本,PATCH HWID方式过注册

    运行后: 本机机器码"195F9059606EEB4723128A216ED1426B",在内存中搜索该字符串,可以得到3个地方,我这里以最后搜索到的地方为切入点, 为什么? 找到 ...

  7. Enigma所有版本过注册 高版本通过PATCH HWID方式

    软件打开界面: V2.0以下的貌似只要跳过注册框即可,无需解码.(以下内容摘自本人发自upk的原创,并非抄袭) 以下以V3.7为例子PATCH HWID: 一,查找HWID生成地址: 1, 先在.rs ...

  8. Centos安装MySQL(RPM安装方式)

    Centos安装MySQL(RPM安装方式) 1.centos中以rpm安装包的方式进行安装测试 2.在MySQL官网下载安装包官网下载 Product Version:5.7.33 Operatin ...

  9. rpm包与deb包的制作过程

    制作RPM包 第一步: BUILD目录:tar.gz包的解压后存放的位置,并在此目录进行编译安装 SPECS目录:存放SPEC文件(important) RPMS目录:存放制作好的rpm包 SOURC ...

最新文章

  1. 第五周周记(国庆第一天)
  2. 如何利用Partitioner将消息路由到分区?
  3. 如何避免表单重复提交
  4. linux tail 命令,Linux tail命令的巧妙应用
  5. Calibration校准halcon算子,持续更新
  6. android监听器作用,android - 监听器和接收器(Android)有什么区别?
  7. PHP简单方法判断文件是否是图片 PHP best way to check if file is an image
  8. JSP标准标签库、通用标签
  9. 这款国产神器,我爱了
  10. 经济应用文写作【10】
  11. 公司/组织苹果开发者账号申请流程
  12. 数据分析-PART1--数据获取和步骤
  13. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应
  14. 分布式数据结构与算法面试题
  15. 【转】140种Python标准库、第三方库和外部工具
  16. SQL语句之单行函数
  17. Xftp安装或卸载报1605和1628问题
  18. 科幻大作明日边缘首曝预告
  19. 修复Microsoft Office的Word、Excel、PPT丢失图标
  20. Android——Handler、Loop、MessageQueue的工作原理

热门文章

  1. NO5的士高-(疯狂哨子) DJ极品哨子战歌舞曲 qq空间背景音乐
  2. ibatis.cache接口实现:RedisCache,MemcachedCache,EhcacheCache
  3. LoveChat独立部署即时通讯IM 私人部署 完善的售后体系
  4. 程序员去国企面试,看到工作环境后:给多少工资也不去,评论炸锅
  5. cpu架构----通俗理解
  6. ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数
  7. 为什么我们要做小程序?
  8. uni-app(1)— 环境搭建(安装编辑器,创建项目,项目运行)
  9. Programming Language Pragmatics 习题解答七(类型系统)、八(子程序和控制抽象)
  10. 国科大学习资料--模式识别--2016-2017期末试卷及解析(刘成林)