【问题标题】:Why does this patch applied with a fuzz of 1, and fail with fuzz of 0?为什么这个补丁在 fuzz 为 1 时应用,而在 fuzz 为 0 时失败?
【发布时间】:2011-09-07 03:08:42
【问题描述】:
$ 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


    【解决方案1】:

    Patch 会对 diff 和您的文件的一致性进行一些基本检查,如果这些检查失败,您会得到偏移或模糊。

    您的偏移量为 -1,因为 patch 需要文件的 diff 匹配行 2--4 的内容。但是,在您的文件中,它们是第 1--3 行。

    你有 fuzz>0,因为上下文的第一行(两个空格和一个*/)与实际文件中的行(一个空格和一个*/)不匹配。因此,patch 进行了第二次传递,它忽略了上下文的第一行和最后一行。

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

    【讨论】:

    • 当时还不确定实际问题..我只是继续前进
    • 这发生在我将补丁文件内容复制/粘贴到我的编辑器中时。有些行只有空格,但它们被修剪为空行,因此补丁文件正确应用,但带有模糊因素警告......
    • 补丁的第一行没有两个空格。第一个空格仅将其标识为上下文行。第二个空格是行的一部分。
    【解决方案2】:

    patch 文件中的索引(@@ 之间的数字)错误。

    • 正如@xofon所说,你的起跑线有问题,你有2,但应该是1
    • 但第二个数字也应该是 3 而不是 4,因为在应用补丁之前,您的 patch 文件中有 3 行代码和 3 行代码应用补丁后,patch 文件中的代码。
    • 但第一行*/ 没有问题。 patch 文件中有 2 个空格,但这是意料之中的,因为第一列用于具有 - + 字符。 您收到的 fuzz 是关于使用的偏移量(将所有行向上移动 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多