2020年8月22日 星期六

[Linux 文章收集] Diff 和 Patch 的簡易操作使用筆記

 Source From Here

Preface
diff patch 很方便, 在此紀錄幾個基本用法:
1. diff 產生 patch 檔
2. 將 patch 寫入
3. 移除此次 patch 的內容

Diff 和 Patch 的簡易操作使用筆記

產生檔案比較 patch 檔案
// Diff 產生 patch, 檔案, 資料夾都可以
// 或 diff -Naur dir1 dir2 > project.patch # Diff 產生 patch

# diff -Naur file1 file2 > project.patch

// 將 patch 寫入
# patch -p0 < project.patch

// 再做一次會詢問是否自動加上 -R 來移除之前 patch 寫入的(恢復回上一步的資料)
# patch -p0 < project.patch

// 移除回復修改 (同上一步驟, 此次就是確定要移除上次的 project.patch)
# patch -R -p0 < project.patch

兩個資料夾(檔案也可以使用此步驟) diff, patch 案例
先建立 dir1, dir2 (一樣內容), 修改 dir2, 然後產生 diff 後, patch 寫回 dir1.
# mkdir dir1
# touch dir1/a.txt
# touch dir1/b.txt
# mkdir dir2
# cp dir1/* dir2/

// 隨便寫
# vim dir2/a.txt
# vim dir2/b.txt

// 產生 diff patch
# diff -Naur dir1 dir2 > dir.patch

// dir1 就會寫入此 patch, 此時與 dir2 會是相同的內容
# patch -p0 < dir.patch

// 會詢問是否要移除之前 patch 寫入的, 可以先 'n' 都否決, 用下個指令恢復
# patch -p0 < dir.patch

// 移除回復修改 (同上一步驟, 此次就是確定要移除 dir.patch 的內容)
# patch -R -p0 < dir.patch

兩個檔案 diff, patch 案例
# echo "Hello John" > file1
# echo "Hello Peter.\nSee you" > file2

// -u, -U NUM, --unified[=NUM]: output NUM (default 3) lines of unified context
// -r, --recursive: recursively compare any subdirectories found
// -N, --new-file: treat absent files as empty
# diff -urN file1 file2 > f.patch
# cat f.patch
--- file1 2020-08-22 12:37:18.417081806 +0000
+++ file2 2020-08-22 12:37:28.580920038 +0000
@@ -1 +1 @@
-Hello John
+Hello Peter.\nSee you


# patch < f.patch // 輸入要 patch 的檔案位置 (假設輸入 file1, 此時 file1 = file2)
patching file file1

// Check content of file1
# cat file1
Hello Peter.\nSee you

# patch < f.patch // 輸入要 patch 的檔案位置 (假設輸入 file1, 此時會詢問是否要移除 f.patch 的內容)
patching file file1
Reversed (or previously applied) patch detected! Assume -R? [n]
 y

# cat file1
Hello John

Supplement
吉米花生醬: 原始碼 diff and patch
patch 與 diff 的簡單應用
patch 跟 diff 用法 @ 工作小錦囊 :: 隨意窩 Xuite日誌
Jserv's blog: quilt - 強大的 patch 管理工具

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...