应用git补丁时忽略上下文行中的空格差异

3

我正在尝试应用从某个git仓库生成的补丁。补丁上下文行看起来像这样:

else if ( o is Item )

在我的代码中,它看起来像这样

else if (o is Item)

当我应用补丁时。
$ git apply -v --check --directory=myroot --ignore-space-change --ignore-whitespace ../patches/0003-some-name.patch

它说

error: while searching for:

提供上下文块,该块仅在上面提到的空格方面存在差异。当我修复空格问题时,问题消失了。有没有一种方法可以指定上下文行内的空格可以被忽略?


不确定 git apply 如何工作,但我原以为忽略空格对你的例子不起作用。如果你假设它在忽略空格时使用某种形式的“标记化”,那么第一行有 7 个“标记”,第二行有 5 个。“你需要以某种方式解析你正在使用的语言,以识别这两行在语法上是相同的。” - icabod
我得出结论,使用git是不可能的。正如你所说,它无法区分例如“elseif”和“else if”之间的差异,这两者可能具有完全不同的含义,并且在合并后会破坏功能。 - Soteric
1个回答

0

只要我们谈论空格问题:git apply选项有--ignore-whitespace:

在应用补丁时,如果需要,在上下文行中忽略空格更改。

这应该会帮助你。读起来就像是有人之前也遇到了同样的问题 :-)

如果不仅仅是上下文行中的空格问题,我通常会使用git apply--reject选项:可以应用的块将被应用,而那些有问题的块则存储在与修补文件平行的.rej文件中。


1
谢谢,但是--ignore-whitespace选项并没有帮助。使用--reject选项,我必须手动解决所有补丁。也许将我的代码和那个存储库的代码统一风格是值得的,但首先我想找出git是否可以为我处理它。 - Soteric
最终我得出结论,使用git是不可能的。我使用了"git apply"命令,并加上了--reject选项,正如这个答案中所提到的。 - Soteric

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