为什么这个补丁在模糊度为1的情况下可以应用,但在模糊度为0的情况下失败了?

9
$ vim patch
Index: toPatch
===================================================================
--- toPatch
+++ toPatch
@@ -2,4 +2,4 @@
  */
-final public class XMLWriter {
+public class XMLWriter {

$ vim toPatch
 */
final public class XMLWriter {

  public static float CURRENT_VERSION=2.2f;
    $ patch -p0 -ui patch
patching file toPatch
Hunk #1 succeeded at 1 with fuzz 2 (offset -1 lines).

为什么会出现模糊和行位移?这是一个演示案例,旨在理解diff和patch,因为工具有时/经常不像预期一样工作。

2个回答

18

补丁会对差异和文件的一致性进行基本检查,如果检查失败,你会得到偏移或模糊。

由于补丁期望差异内容匹配你文件的第2-4行,但在你的文件中是1-3行,因此你有偏移量为-1。

由于上下文的第一行(两个空格和一个*/)与实际文件中的行(一个空格和一个*/)不匹配,因此你有fuzz>0。因此,补丁进行了第二次处理,忽略上下文的第一行和最后一行。

这并没有解释为什么你看到的是fuzz=2而不是1。可能是复制粘贴文件时出错了?还有其他想法吗,大家?


当时我仍然不确定实际问题所在... 我只是继续前进。 - simpatico
当我将补丁文件内容复制粘贴到我的编辑器中时,发生了这种情况。有些行只有空格,但它们被修剪成空行,因此补丁文件应用正确,但带有模糊因素警告... - Julien
补丁中的第一行没有两个空格。第一个空格仅将其标识为上下文行。第二个空格是该行的一部分。 - user253751

7
您的patch文件中的索引(在@@之间的数字)是错误的。
如@xofon所说,您的起始行有问题,您有2,但应该是1
但是第二个数字也应该是3而不是4,因为在应用补丁之前,您的patch文件中有3行代码,在应用补丁之后,您的patch文件中也有3行代码。
但是第一行*/没有问题。在patch文件中有2个空格,但这是预期的,因为第一列用于具有- +字符。您收到的模糊是关于使用的偏移量(将所有行向上移动1行)。
因此,您的patch文件应该是:
$ cat patch
--- toPatch
+++ toPatch
@@ -1,3 +1,3 @@
  */
-final public class XMLWriter {
+public class XMLWriter {
   public static float CURRENT_VERSION=2.2f;

通过给定的toPatch文件进行操作

$ cat toPatch
 */
final public class XMLWriter {
  public static float CURRENT_VERSION=2.2f;

然后补丁将会被应用,不会出现任何模糊警告...
$ patch -p0 -ui patch
patching file toPatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接