合并没有空格冲突

Posted

技术标签:

【中文标题】合并没有空格冲突【英文标题】:Merging without whitespace conflicts 【发布时间】:2012-04-04 07:31:36 【问题描述】:

我遇到了一个问题,我有一个大型提交,它更改了大约一千行代码,从行尾删除空格并删除制表符之前的空格。

这个项目还有大约 50 个拉取请求,当我的提交被合并时,它们都会发生冲突。有什么方法可以设置 git,以便在合并未来的提交时,它会忽略其中一个只是空白更改的冲突?

修改 git 本身或使用第三方工具是不可能的,但使用钩子就可以了。

【问题讨论】:

git whitespace woes的可能重复 【参考方案1】:
 git merge -Xignore-all-space

或者(更精确)

 git merge -Xignore-space-change

应该足以在合并期间忽略所有与空间相关的冲突。

见git diff:

--ignore-space-change

忽略空格数量的变化。 这将忽略行尾的空格,并认为一个或多个空格字符的所有其他序列是等效的。

--ignore-all-space

比较行时忽略空格。 即使一行有空白而另一行没有空白,这也会忽略差异。

ks1322 在 cmets 中添加了一个好建议:

值得与 --no-commit 合并并在实际提交之前检查合并


OP Callum Macrae 报告说,在这种情况下,合并不会中断,并且拉取请求补丁中包含的尾随空格将应用于本地文件。 但是,OP 使用了一个预提交钩子来处理所述尾随空格。 (我想有点类似于this one,也有referenced here)。


OP 的预提交钩子是referenced here:

除了删除尾随空格外,它还删除制表符前的一到三个空格(我将制表符宽度设置为 4),并添加 EOL。 我有报告说添加 EOL 的代码会删除 Windows 中的文件,但无法复制它。

【讨论】:

从我到目前为止的测试来看,它似乎删除了文件中的所有空白更改。但是,我现在使用 pre-commit 挂钩来删除尾随空格,所以这不是问题。 @CallumMacrae:好的,感谢您的反馈。同样,我在答案中添加了您的链接以获得更多可见性。 git merge -Xignore-space-change - 好吧,我可以肯定地说did not work...。我试图删除的一块空白仍然存在。 Git 真的很烂。 值得与--no-commit合并,并在实际提交之前审查合并。 -Xignore-all-space 似乎对空白没有任何作用,并且 --ignore-space-change 未被 git 识别为选项【参考方案2】:

如果您发现合并中有很多空白问题,您可以 只需中止它并再次执行此操作,这次使用 -Xignore-all-space 或 -Xignore-space-change。首先 选项在比较行时完全忽略空格,第二个处理一个或 更多空白字符等价。

【讨论】:

【参考方案3】:

我喜欢使用meld 来合并涉及的冲突,并且可以在Meld>Preferences>TextFilters 下设置各种过滤选项。

【讨论】:

以上是关于合并没有空格冲突的主要内容,如果未能解决你的问题,请参考以下文章

MSAccess 将 2 个表合并为 1 个,没有空格

需要水平合并两个 .TXT 文件,没有空格,结果在终端中不可见

将多个空间合并为单个空间;删除尾随/前导空格

在表格中垂直堆叠两个字符,它们之间没有空格

删除所有空格并将多行合并为 SQL 中的单行

Pandas:取消组合并融化空格缩进的记录