使用和製作patch檔案

2021-09-06 21:14:19 字數 3651 閱讀 3295

字型: 小 中 大 | 列印

原文今天上qq的時候發現eva不能用了,後來又看到了解決方法,所以想打個補丁,只是不會:-)。後來查了查明確了,寫了個總結,分享一下,也不知道曾經有沒有這方面的東西,希望我這個不是多餘的。

建立補丁檔案:

code:

diff -naur 舊的資料夾 新的資料夾 > patch檔案

或者diff -naur 舊的檔案 新的檔案 > patch檔案

對於檔案夾層數的一些限制

在建立patch的時候資料夾的層數應當是一樣的,比方

code:

--- old/modules/pcitablemon sep 27 11:03:56 1999

+++ new/modules/pcitabletue dec 19 20:05:41 2000

這樣是能夠的。

而code:

--- old/try1/other/modules/pcitablemon sep 27 11:03:56 1999

+++ new/modules/pcitabletue dec 19 20:05:41 2000

這樣做可能會有一些問題。

怎樣使用patch

對於乙個patch檔案,有兩種經常使用用法:

1.code:

cat new-patch | patch -p02.

2、code:

patch -p0 < new-patch

patch命令裡面的層數(-p0?-p1?)

引數-p來指定從第幾層開始比較。比方有乙個patch檔案的補丁頭是這種:

code:

--- old/modules/pcitablemon sep 27 11:03:56 1999

+++ new/modules/pcitabletue dec 19 20:05:41 2000

假設使用引數-p0,就表示從當前資料夾,找乙個叫作new的資料夾,在它以下找乙個叫modules的資料夾,再在它以下找乙個叫pcitablemon的資料夾。

假設使用引數-p1,就表示忽略第一層,從當前資料夾找乙個叫modules的資料夾,在它以下找乙個叫modules的資料夾。這樣會忽略掉補丁頭提到的new資料夾。

依此類推。

patch檔案的結構

補丁頭補丁頭是分別由---/+++開頭的兩行,用來表示要打補丁的檔案。

乙個補丁檔案裡的多個補丁

乙個補丁檔案裡可能包括以---/+++開頭的非常多節,每一節用來打乙個補丁。所以在乙個補丁檔案裡能夠包括好多個補丁。

塊塊是補丁中要改動的地方。它通常由一部分不用改動的東西開始和結束。他們僅僅是用來表示要改動的位置。他們通常以@@開始,結束於還有乙個塊的開始或者乙個新的補丁頭。

塊的縮排

塊會縮排一列,而這一列是用來表示這一行是要新增還是要刪除的。

塊的第一列

+號表示這一行是要加上的。

-號表示這一行是要刪除的。

沒有加號也沒有減號表示這裡僅僅是引用的而不須要改動。

乙個patch的樣例

code:

diff -u old/modules/pcitable new/modules/pcitable

--- old/modules/pcitablemon sep 27 11:03:56 1999

+++ new/modules/pcitabletue dec 19 20:05:41 2000

@@ -1,4 +1,6 @@

0x0e110xae10"cpqarray""compaq|smart-2/p raid controller"

+0x10000x0010"cpqarray""compaq|integrated array controller"

+0x10110x0046"cpqarray""compaq|smart-2/p raid controller"

0x0e110xae32"tlan""compaq|netelligent 10/100"

0x0e110xae34"tlan""compaq|netelligent 10"

0x0e110xae35"tlan""compaq|integrated netflex-3/p"

@@ -21,6 +23,7 @@

0x10000x000f"ncr53c8xx""symbios|53c875"

0x10000x0012"ncr53c8xx""symbios|53c895a"

0x10000x008f"ncr53c8xx""symbios|53c875j"

+0x10000x000a"sym53c8xx""symbios|53c1510"

0x10000x0701"yellowfin""symbios|83c885 gigabit ethernet"

0x10000x0702"yellowfin""symbios|yellowfin g-nic gigabit ethernet"

0x10110x0001"tulip""dec|decchip 21050"

--- old/usr/share/kudzu/pcitablesun sep 26 17:11:23 1999

+++ new/usr/share/kudzu/pcitabletue dec 19 20:05:41 2000

@@ -15,6 +15,8 @@

0x0e110x3034"unknown""compaq|qvision 1280/p"

0x0e110x4000"unknown""compaq|4000 [triflex]"

0x0e110xa0f3"ignore""compaq|triflex pci to isa bridge"

+0x10000x0010"cpqarray""compaq|integrated array controller"

+0x10110x0046"cpqarray""compaq|smart-2/p raid controller"

0x0e110xae10"cpqarray""compaq|smart-2/p raid controller"

0x0e110xae29"unknown""compaq|mis-l"

0x0e110xae2a"unknown""compaq|mpc"

@@ -46,6 +48,7 @@

0x10000x000f"ncr53c8xx""symbios|53c875"

0x10000x0012"ncr53c8xx""symbios|53c895a"

0x10000x008f"ncr53c8xx""symbios|53c875j"

+0x10000x000a"sym53c8xx""symbios|53c1510"

0x10000x0701"yellowfin""symbios|83c885 gigabit ethernet"

0x10000x0702"yellowfin""symbios|yellowfin g-nic gigabit ethernet"

0x10000x0901"unknown""symbios|61c102"

分析這個樣例是由命令

code:

diff -u old/modules/pcitable new/modules/pcitable

使用和製作patch檔案

字型 小 中 大 列印 原文今天上qq的時候發現eva不能用了,後來又看到了解決方法,所以想打個補丁,只是不會 後來查了查明確了,寫了個總結,分享一下,也不知道曾經有沒有這方面的東西,希望我這個不是多餘的。建立補丁檔案 code diff naur 舊的資料夾 新的資料夾 patch檔案 或者dif...

patch補丁檔案製作 使用和常見問題

1.給原始碼樹加 patch 進入原始碼樹的根目錄下 cd src dir patch p 1 path to your patch p 1 指定忽略的目錄個數,如你的patch頭為 diff urn orig include linux module.h tgt include linux mod...

Linux下使用diff和patch製作及打補丁

diff 是對兩個集合的差運算 patch 是對兩個集合的和運算 diff a b c表達了c a b a 表達了原始檔案,b 表示修改後的檔案。c 表示補丁檔案 由於歷史原因,diff有三種格式 正常格式 normal diff 上下文格式 context diff 合併格式 unified di...