在項目中,如果和其他人一起維護一個項目,有時候別人修改了一些代碼,更換 .c 文件也很麻煩,這時就需要用到 patch 了,別人只要發一個 patch ,你打上即可。
patch:補丁,用來顯示兩個文件不同的地方,因為比源文件小很多。
制作補丁有兩種法法,diff 和 quilt,本文我們討論 diff
1、創建兩個文件,a.c 和 b.c
a.c
#include
int main()
{

printf("Jason 20220116\r\n");
return 0;
}
b.c
#include
int main()
{

printf("Jason 20220116\r\n");
printf("test diff patch\r\n");
return 0;
}
2、生成補丁
diff -u a.c b.c > test.patch
上圖可以看到 test.patch 的內容,修改時間,修改的哪一行,都標注的很明顯。
diff
比較兩個文件的不同patch直接在源文件上打補丁patch直接在源文件上打補丁,然后記錄下來,也就是所謂的 diff 補丁。
diff [options] from-file to-file
from-file:源文件
to-file:根據源文件修改后的文件
:
-u 顯示有差異行的前后幾行(上下文), 默認是前后各 3 行, 這樣, patch 中帶有更多的信息.
-p 顯示代碼所在的 c 函數的信息
-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。
-a 逐行比較文本文件
-r 比較子目錄中的文件
打 patch
存在兩個文件,需要打補丁的文件 a.c 和 patch 文件 test.patch
打補丁命令如下:
patch test.c < 01_test.patch
實際操作如下:
補充:
patch -RE < .patch 取消patch對源文件的修改
patch -p1 < .diff
p表示跳過幾級目錄,0標識不去掉為全路徑,1標識去掉第一層路徑
注意:patch -p后面是不能帶負數 的。不使用p參數的時候,patch命令會 忽略 任何目錄,直接使用文件。
上圖為打 patch 和撤銷的操作。