手把手教你 Linux 下打 Patch

开发 项目管理
在项目中,如果和其他人一起维护一个项目,有时候别人修改了一些代码,更换 .c 文件也很麻烦,这时就需要用到 patch 了,别人只要发一个 patch ,你打上即可。

本文转载自微信公众号「嵌入式Linux系统开发」,作者Jasonangel 。转载本文请联系嵌入式Linux系统开发公众号。

在项目中,如果和其他人一起维护一个项目,有时候别人修改了一些代码,更换 .c 文件也很麻烦,这时就需要用到 patch 了,别人只要发一个 patch ,你打上即可。

patch:补丁,用来显示两个文件不同的地方。

制作补丁有两种方法,diff 和 quilt,本文我们讨论 diff。

1、创建两个文件,a.c 和 b.c

a.c

  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.  printf("Jason 20220116\r\n"); 
  5.  return 0; 

b.c

  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.  printf("Jason 20220116\r\n"); 
  5.  printf("test diff patch\r\n"); 
  6.  return 0; 

2、生成补丁

  1. diff -u a.c b.c > test.patch 

上图可以看到 test.patch 的内容,包括修改时间,修改的哪一行,都标注的很明显。

diff

比较两个文件的不同,然后记录下来,也就是所谓的 diff 补丁。

  1. diff [options] from-file to-file 

from-file:源文件

to-file:根据源文件修改后的文件

option:

-u 显示有差异行的前后几行(上下文), 默认是前后各 3 行, 这样, patch 中带有更多的信息

-p 显示代码所在的 c 函数的信息

-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况

-a 逐行比较文本文件

-r 比较子目录中的文件

打 patch

两个文件:需要打补丁的文件 a.c 和 patch 文件 test.patch

打补丁命令如下:

  1. patch a.c < test.patch 

实际操作如下:

补充:

patch -RE < test.patch 取消 patch 对源文件的修改

patch -p1 < test.patch

p 表示跳过几级目录,0 标识不去掉为全路径,1 标识去掉第一层路径。路径信息包含了你的 Linux 源码根目录的名称,但其他人的源码根目录可能是其它名字,所以,打补丁时,要进入你的 Linux 源码根目录,并且告诉 patch 工具,请忽略补丁中的路径的第一级目录。

注意:patch -p 后面是不能带负数 的。不使用 p 参数的时候,patch 命令会 忽略 任何目录,直接使用文件。

多文件打 patch

本文是两个文件做比较,打 patch,比较简单。如果是一个工程,有多个文件修改,需要在 diff 后面增加两个属性:

-r 递归地对比一个目录和它的所有子目录(即整个目录树).

 

-N 如果某个文件缺少了,就当作是空文件来对比. 如果不使用本选项,当 diff 发现旧代码或者新代码缺少文件时,只简单的提示缺少文件。如果使用本选项,会将新添加的文件全新打印出来作为新增的部分。

 

责任编辑:武晓燕 来源: 嵌入式Linux系统开发
相关推荐

2011-01-10 14:41:26

2009-06-15 16:58:57

Java安装Linux

2021-09-18 14:26:49

Linux Linux 启动流程Linux 系统

2010-07-06 09:43:57

搭建私有云

2011-05-03 15:59:00

黑盒打印机

2021-07-14 09:00:00

JavaFX开发应用

2020-07-27 10:15:51

LinuxJenkins命令

2020-06-01 16:25:43

WindowsLinux命令

2020-12-21 09:47:16

UbuntuMinicondalinux

2011-02-22 13:46:27

微软SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中断唤醒系统Linux 系统

2023-04-26 12:46:43

DockerSpringKubernetes

2022-03-14 14:47:21

HarmonyOS操作系统鸿蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

拦截系统调用

2022-12-07 08:42:35

2020-05-22 08:52:08

LinuxPython工具

2010-01-20 10:44:01

linux DHCP服务器

2010-01-07 14:24:54

Linux防火墙
点赞
收藏

51CTO技术栈公众号