From 782c99d99529eb1cb41879786ace0c43d4bd4ad4 Mon Sep 17 00:00:00 2001 From: jingfelix Date: Wed, 13 Mar 2024 19:10:02 +0800 Subject: [PATCH] docs: add `Helping patch Find Inexact Matches` Signed-off-by: jingfelix --- ...\256\347\232\204\345\214\271\351\205\215.md" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "articles/\345\270\256\345\212\251 patch \346\237\245\346\211\276\344\270\215\347\262\276\347\241\256\347\232\204\345\214\271\351\205\215.md" diff --git "a/articles/\345\270\256\345\212\251 patch \346\237\245\346\211\276\344\270\215\347\262\276\347\241\256\347\232\204\345\214\271\351\205\215.md" "b/articles/\345\270\256\345\212\251 patch \346\237\245\346\211\276\344\270\215\347\262\276\347\241\256\347\232\204\345\214\271\351\205\215.md" new file mode 100644 index 0000000..924290a --- /dev/null +++ "b/articles/\345\270\256\345\212\251 patch \346\237\245\346\211\276\344\270\215\347\262\276\347\241\256\347\232\204\345\214\271\351\205\215.md" @@ -0,0 +1,17 @@ +> 本文是对[这篇 diff 文档](https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html)的翻译 + +对于上下文差异和长度较小的正常补丁,`patch` 可以检测 patch 中的行号何时是不正确的,并且会尝试找到应用每个 hunk 的正确位置。 +第一次尝试时,`patch` 会使用 hunk 的原有行号加上或减去应用先前的 hunk 产生的偏移。如果这不是正确的位置,`patch` 会分别向前向后扫描来寻找和 hunk 中的上下文匹配的位置。 + +首先,`patch` 寻找上下文的所有行都能匹配上的位置。如果找不到这样的位置,并且 `patch` 读取的是上下文补丁或标准补丁,同时最大模糊参数(fuzz factor)被设置为大于等于1, +则 `patch` 会进行下一次扫描。本次扫描时,忽略(即不包含)上下文部分的第一行和最后一行。如果依然找不到合适的位置,且模糊参数大于等于2,则进行下一次扫描, +并忽略上下文的前两行和最后两行。如果依旧找不到且模糊参数更大,则会继续此过程。 + +`--fuzz=lines`(`-F lines`) 选项设置最大模糊参数为 `lines`。这个选项仅对有上下文的补丁和标准化补丁生效。`lines` 代表在搜索应用 hunk 的位置时最大忽略的上下文行数。 +注意,较大的模糊参数将会增加补丁应用出错的概率。默认的模糊参数为2。将其设置为超过 `diff` 上下文的值(一般为3)是没有意义的。 + +如果 `patch` 找不到应用 hunk 的位置,则它会将无法应用的 hunk 写入对应的拒绝文件(.rej)文件。无论补丁是什么格式,拒绝文件都会以上下文格式写入无法应用的 hunk。 +拒绝文件中的行号与 patch 文件中的行号不同:它显示的是`patch`认为失败的 hunk 在新文件中的大致位置。 + +如果使用了`--verbose`选项,那么 `patch` 将会在运行结束时给出一些关于失败和成果的更详细的信息。如果应用 hunk 失败了,则会打印出 `patch` 认为 hunk 在新文件中应该在哪一行。 +如果这与 diff 中指定的行号不一致,则会打印出偏移量。如果某个偏移量过大,则该 hunk 应用的位置可能是错误的。`patch` 还会指出它在应用时是否使用了模糊因子进行匹配。