你的位置:【欧冠体育体育手机网页登陆】 > 办公设备 > 手把手教你 Linux 下打 Patch
手把手教你 Linux 下打 Patch
发布日期:2022-08-06 23:53    点击次数:197

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

在名目中,假定和其余人一起回护一个名目,偶尔间他人编削了一些代码,变更 .c 文件也很麻烦,这时候就需求用到 patch 了,他人只需发一个 patch ,你打上即可。

patch:补钉,用来体现两个文件差异之处。

制作补钉有两种编制,diff 和 quilt,本文我们探究 diff。

一、创立两个文件,a.c 和 b.c a.c
#include <stdio.h>  int main() {  printf("Jason 20220116\r\n");  return 0; } 
b.c
#include <stdio.h>  int main() {  printf("Jason 20220116\r\n");  printf("test diff patch\r\n");  return 0; } 
二、生成补钉
diff -u a.c b.c > test.patch 

上图可以或许看到 test.patch 的内容,蕴含编削时光,编削的哪一行,都标注的很分明。

diff

相比两个文件的差异,然后记实上去,也就是所谓的 diff 补钉。

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

打补钉敕令以下:

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 缔造旧代码或许新代码缺乏文件时,只俭朴的提示缺乏文件。假定运用本选项,会将新增加的文件全新打印进去作为新增的部份。