为什么这个补丁应用了1的模糊,并且模糊失败为0?

时间:2011-06-02 14:20:03

标签: diff patch

$ 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).

为什么模糊和线偏移?这是一个试图理解差异和补丁的演示案例,因为工具有时/通常看起来不像预期的那样工作。

2 个答案:

答案 0 :(得分:15)

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

你有偏移-1,因为补丁期望你的文件的diff匹配行2-4的内容。但是,在您的文件中,它们是1--3行。

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

这并不能解释为什么你看到fuzz = 2而不是1.也许错误复制粘贴文件?任何其他想法,任何人?

答案 1 :(得分:4)

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

  • 正如@xofon所说,你的起跑线有问题,你有 2 ,但应该 1
  • 但第二个数字应该是 3 而不是 4 ,因为在应用补丁之前,patch文件中有3行代码,而3应用补丁后,patch文件中的代码行。
  • 但第一行*/没有问题。 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