git - 自定义 git diff 以忽略一些冲突

标签 git merge diff

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

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

  1. 导入新的 freebsd src 作为供应商分支
  2. 在 HEAD 上 merge 更改

我尝试用 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:.*$'

提前谢谢你。

最佳答案

我不确定您能否在 merge 期间避免由于这些更改而发生的冲突。

不过,您可以做的是一个能够列出所有要 merge 的文件的小脚本,对每个文件执行 diff -q -I'[$]FreeBSD:.*$'他们,以及那些没有差异的人,做一个

git checkout --theirs theFreeBSDFile

那么 merge 的resume就可以完成冲突的 merge 。

'git checkout --theirs' 检查第 3 阶段(他们的)未 merge 的路径。

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

关于git - 自定义 git diff 以忽略一些冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/912534/

相关文章:

C++ 字符串差异(一种 Python 的差异库)

Github rebase upstream/master 与 origin/master

Excel - 两个图形合二为一(并排)

r - 合并 R 中的不同数据帧以消除 NA

javascript - 删除/忽略 Istanbul 尔 html 或 lcov 覆盖率报告页脚时间戳

unicode - 比较不同编码的文件

即使存在于 ssh-agent 中,Git 也会要求提供 SSH 密码

git - 尝试使用备用 hexo 主题时无法在 Netlify 上部署网站

linux - 如何从 gitbash 生成多个 SSH 公钥并在 Windows 机器上配置这些公钥?

Git: merge 和子模块