我遇到了一个问题,其中一个大型提交更改了大约一千行代码,从行尾删除空格并在制表符之前删除空格。
这个项目还有大约 50 个拉取请求,当我的提交被合并时,所有这些请求都会发生冲突。有什么方法可以设置 git,以便在合并未来的提交时,它会忽略其中一个只是空白更改的冲突?
修改 git 本身或使用第三方工具是不可能的,但使用钩子就可以了。
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 中的文件,但无法复制它。
如果您发现合并中有很多空白问题,您可以简单地中止它并再次执行此操作,这次使用 -Xignore-all-space 或 -Xignore-space-change。第一个选项在比较行时完全忽略空格,第二个选项将一个或多个空格字符的序列视为等效。
不定期副业成功案例分享
git merge -Xignore-space-change
- 好吧,我可以肯定地说这个did not work...。我试图删除的一块空白仍然存在。 Git绝对烂。--no-commit
合并并在实际提交之前查看合并。