用 diff 產生 patch 補丁
首先你必須先擁有 新/舊檔案 (file.old / file.new),然後用 diff 比較兩隻檔案的差異
$ diff -Naur file.old file.new > file.patch
-a 將所有檔案都視為文字檔
-u 輸出預設三行的相同文字行
-r 遞迴比較所有的子目錄
-N 將缺少的檔案視為空檔案
所產生的 file.patch 就是 patch 補丁檔。
如何使用 Patch 工具進行補丁更新
由我之前所產生的 patch 檔案當做範例
diff -Naur nginx_old/src/event/ngx_event_openssl.c nginx_new/src/event/ngx_event_openssl.c
--- nginx_old/src/event/ngx_event_openssl.c 2016-12-13 23:21:24.000000000 +0800
+++ nginx_new/src/event/ngx_event_openssl.c 2016-12-26 11:21:23.256483991 +0800
@@ -4069,7 +4069,7 @@
BIO_write(bio, "Tue ", sizeof("Tue ") - 1);
ASN1_TIME_print(bio, asn1time);
- len = BIO_get_mem_data(bio, &value);
+ len = BIO_get_mem_data(bio, (char **) &value);
time = ngx_parse_http_time(value, len);
diff -Naur nginx_old/src/event/ngx_event_openssl_stapling.c nginx_new/src/event/ngx_event_openssl_stapling.c
--- nginx_old/src/event/ngx_event_openssl_stapling.c 2016-12-13 23:21:24.000000000 +0800
+++ nginx_new/src/event/ngx_event_openssl_stapling.c 2016-12-26 11:21:43.014381862 +0800
@@ -793,7 +793,7 @@
BIO_write(bio, "Tue ", sizeof("Tue ") - 1);
ASN1_GENERALIZEDTIME_print(bio, asn1time);
- len = BIO_get_mem_data(bio, &value);
+ len = BIO_get_mem_data(bio, (char **) &value);
time = ngx_parse_http_time(value, len);
由於我在產生 patch 檔的時候 nginx_old 和 nginx_new 都不是真實 nginx 原始碼路徑,由 src 這邊開始才是,所以 patch 提供了 -p 的參數
$ cd nginx/
$ patch -p1 < nginx.patch
到要 patch 的 nginx 原始碼包的根目錄,然後使用 -p1 的參數,略過 nginx_old 和 nginx_new 這一層,這樣就會從 src 底下開始進行 patch 比較
Orignal From: 用 diff 建立 patch 檔案上補丁
沒有留言:
張貼留言