ChatGPT解决这个技术问题 Extra ChatGPT

合并没有空格冲突

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

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

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

git whitespace woes 的可能重复项

C
Community
 git merge -Xignore-all-space

或者(更精确)

 git merge -Xignore-space-change

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

请参阅git diff

--ignore-space-change

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

--ignore-all-space

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

ks1322 在评论中添加了一个很好的建议:

值得与 --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 识别为选项
V
Vaibhav

如果您发现合并中有很多空白问题,您可以简单地中止它并再次执行此操作,这次使用 -Xignore-all-space 或 -Xignore-space-change。第一个选项在比较行时完全忽略空格,第二个选项将一个或多个空格字符的序列视为等效。


B
Beat Scherrer

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