自定义git diff以忽略某些冲突

4
我正在进行从cvs到git的迁移测试,但是我在所有测试中遇到了问题。
我们维护FreeBSD源代码的定制副本,在cvs中,当发布新的FreeBSD版本时,我们会执行以下操作:
1. 将新的freebsd src作为供应商分支导入 2. 合并HEAD上的更改
我尝试使用git做同样的事情,并且成功了,但几乎所有FreeBSD文件都有一个自定义的ID,如下所示: $FreeBSD: release/7.0.0/COPYRIGHT 175036 2008-01-01 09:36:30Z imp $
这些行总是变化的,并且由于它们存储在svn仓库中的位置(release/7.0.0、7.1.0、7.2.0),git会生成很多需要手动修复的冲突。
我想知道是否有一种方法可以配置git,使其忽略这些行上的差异,并在不询问的情况下使用新的行。
我可以使用diff命令来忽略那些行,像这样:
diff -q -I'[$]FreeBSD:.*$'
提前感谢您。

谢谢你的“已接受”答案,但是你是否想到了一个能够实现你想要的功能的脚本?如果是的话,你可以在这里发布让我们其他人使用 ;) - VonC
我将测试它并发布评论。 - Renato Aquino
1个回答

1

我不确定在合并过程中是否可以避免冲突,因为这些更改。

但是,您可以编写一个小脚本来列出所有要合并的文件,对每个文件执行diff -q -I'[$]FreeBSD:.*$'命令,并对那些没有差异的文件执行

git checkout --theirs theFreeBSDFile

那么,合并的摘要将能够完成冲突的合并。

'git checkout --theirs'检出未合并路径的第3个阶段(theirs)。

实际上,git mergetool非常适合这项工作:在涉及FreeBSD文件的合并之前,设置您的mergetool实用程序为该脚本,如git-merge是否可以忽略换行符差异?所述。
如果您将mergetool配置设置为信任该脚本的退出代码,则除了FreeBSD自定义行之外不显示任何差异的文件将被'git checkout --theirs'并报告为“已合并”,而其他文件将不会被同一脚本合并。
最后,如果简历仍然显示有冲突的文件,请将您的合并工具重置为您喜欢的差异工具,并解决其余冲突文件。


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