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

sim*_*ico 4 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).
Run Code Online (Sandbox Code Playgroud)

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

xof*_*fon 15

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

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

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

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


Jul*_*ien 7

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

  • 正如@xofon所说,你的起跑线有问题,你有2,但应该是1
  • 但第二个数字也应该是3而不是4,因为在应用补丁之前您的文件中有 3 行代码,而在应用补丁之后patch您的文件中有 3 行代码。patch
  • 但第一行没有问题*/。文件中有 2 个空格patch,但这是预期的,因为第一列用于包含- +字符。您收到的模糊是关于所使用的偏移量(将所有行向上移动 1)

所以你的patch文件应该是

$ cat patch
--- toPatch
+++ toPatch
@@ -1,3 +1,3 @@
  */
-final public class XMLWriter {
+public class XMLWriter {
   public static float CURRENT_VERSION=2.2f;
Run Code Online (Sandbox Code Playgroud)

并使用给定的toPatch文件

$ cat toPatch
 */
final public class XMLWriter {
  public static float CURRENT_VERSION=2.2f;
Run Code Online (Sandbox Code Playgroud)

然后补丁将在没有模糊警告的情况下应用......

$ patch -p0 -ui patch
patching file toPatch
Run Code Online (Sandbox Code Playgroud)