合并没有空格冲突
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
下设置各种过滤选项。
【讨论】:
以上是关于合并没有空格冲突的主要内容,如果未能解决你的问题,请参考以下文章