patch补丁命令学习

1.介绍

patch 是一个 Unix/Linux 工具,用于将补丁文件应用到原始文件中,从而更新文件内容。常用于软件开发中,特别是在维护和分发软件补丁时。

2.生成和应用patch文件

2.1 diff命令

:~$ cat testfile1
Hello,This is the firstfile!
:~$ cat testfile2
Hello,Thisisthesecondfile!
:~$ diff testfile1 testfile2 > testfile.patch

:~$ cat testfile.patch
1c1
< Hello,This is the firstfile!
---
> Hello,Thisisthesecondfile!

diff生成的文件内容:

1c1: 表示第一行内容不同,c表示不同。

diff 的normal 显示格式有三种提示:

  • a - add
  • c - change
  • d - delete 
$ patch -p0 testfile1 testfile.patch      
patching file testfile1  
$cat testfile1                  #再次查看testfile1的内容  
#testfile1文件被修改为与testfile2一样的内容  
Hello,This is the secondfile!  
  • -p<剥离层级>或--strip=<剥离层级> 设置欲剥离几层路径名称。

2.2 git diff命令

# 未commit的更改
git diff > changes.patch

#已commit的更改,
# -1:表示生成最近一次提交的补丁文件。可以更改数字来生成更多次提交的补丁。
# 这会在当前目录生成一个 .patch 文件,文件名会以提交的哈希值或提交消息命名。
git format-patch -1


# 提交区间的更改
git format-patch <start_commit>..<end_commit>

生成的patch文件格式如下:

--- a/hello.c 2024-08-19 12:00:00.000000000 +0000
+++ b/hello.c 2024-08-19 12:00:00.000000000 +0000
@@ -1,4 +1,4 @@
 #include <stdio.h>
 
 int main() {
-    printf("Hello, World!\n");
+    printf("Hello, Universe!\n");
     return 0;
 }
  • --- 表示旧文件的路径和时间戳。
  • +++ 表示新文件的路径和时间戳。

文件名可能带有路径信息,a/ 和 b/ 是对比的文件前缀,分别代表旧版本和新版本。

应用patch文件,走到对应的目录下:

patch -p1 < changes.patch
  • -p1:在应用补丁时应当忽略路径名中的第一个部分。在补丁文件中,通常会包含文件路径,例如 a/file.cb/file.c-p1 选项会移除路径中的第一部分 a/b/,这样就可以匹配你当前的文件系统结构。

上一篇:【C++】类和对象(类的默认成员函数)


下一篇:C语言[斐波那契数列2]