The Issue of the Day Before

打補丁

shell -

打補丁,打補丁,打補丁。重要說三遍,但要怎麼打補丁?

> diff -u oldFile newFile > mods.diff
> patch < mods.diff

Why

直接修改不小心打錯字怎麼辦? 結合 diffpatch 指令,可以快速正確的修改。

What

diff

diff 比對兩個檔案或目錄的差異。

patch

patch 將差異寫入。

How

a.txt
hello, world.
b.txt
hi, world.
// 製造差異檔
> diff -u old/a.txt new/b.txt > txt.diff
// --- old/a.txt       2022-08-31 03:41:03.896391024 +0000
// +++ new/b.txt       2022-08-31 03:41:25.650525481 +0000
// @@ -1 +1 @@
// -hello, world.
// +hi, world.

// 為檔案打補丁
> patch < txt.diff
// patching file a.txt
> cat old/a.txt
// hi, world.

// 再執行一次,則
// 回復修改
> patch < txt.diff
// patching file a.txt
// Reversed (or previously applied) patch detected!  Assume -R? [n] y
// or 直接回復修改
> patch -R < txt.diff
// patching file a.txt

> cat a.txt
// hello, world.

patch 會依照差異檔中的檔名進行處理。

從目前目錄開始用 -p0 指示,這裡就是 old/a.txt

忽略第一層可以用 -p1 指示,這裡就是 a.txt

同理,也可以比較兩個目錄的差異。

> diff -Naur dir1 dir2 > dir.patch

-r 遞迴子目錄。 -a 將視為文件來處理 -N 指示處理新文件

閱讀在雲端