自定义git diff忽略一些冲突

时间:2009-05-26 20:21:02

标签: git merge diff

我正在开始测试从cvs转到git,我的所有测试都有问题。

我们维护FreeBSD源的自定义副本,因此在cvs中,我们在发布新的FreeBSD版本时执行以下操作:

  1. 将新的freebsd src导入为供应商分支
  2. 合并HEAD的更改
  3. 我尝试用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会产生许多需要手动修复的冲突。 / p>

    我想知道是否有办法配置git来忽略这些行上的差异并使用新的但不问。

    我可以使用diff命令忽略这些行,如下所示:

    diff -q -I'[$]FreeBSD:.*$'

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

由于这些变化,我不确定您是否可以在合并期间避免冲突。

但是,您可以做的是一个小脚本,能够列出要合并的所有文件,对每个文件执行diff -q -I'[$]FreeBSD:.*$',对于没有差异的文件,请执行

git checkout --theirs theFreeBSDFile

然后合并的简历将能够补充冲突的合并。

'git checkout --theirs'查看未合并路径的第3阶段(他们的)。

实际上,git mergetool对于这项工作来说是完美的:在涉及FreeBSD文件的合并之前,将mergetool实用程序设置为该脚本,如问题Is it possible for git-merge to ignore line-ending differences?中所述。 如果您设置mergetool配置以信任该脚本的退出代码,那么除了FreeBSD自定义行之外不显示任何差异的任何文件将是“git checkout --theirs”并且据报道“合并”,另一个文件将不会合并相同的脚本 最后,如果简历仍然显示冲突的文件,请将您的合并工具重置为您喜欢的difftool,并解决剩余的冲突文件。