【问题标题】:Creating a diff which ignores differences between sentinel lines创建一个忽略标记线之间差异的差异
【发布时间】:2011-07-29 04:51:43
【问题描述】:

我正在寻找一种可能的方法来解决通过不同分支工作时出现的一些合并冲突。

某些文件中的某些信息(尤其是版本号)不太可能不会散布在不同的分支中,因此我正在寻找某种方法来输出差异,忽略定义明确的前哨行之间的文本,我会想知道周围是否有任何东西,而无需编写我自己的解决方案。

这就是我想要的:假设两个源文件看起来像

some text
DIFF_IGNORE_START
foo bar
DIFF_IGNORE_END
some other text
one

some text
DIFF_IGNORE_START
different text
DIFF_IGNORE_END
some other text
two

我希望差异是

--- original    2011-04-04 15:34:06.000000000 +0200
+++ modified    2011-04-04 15:35:13.000000000 +0200
@@ -3,4 +3,4 @@
 foo bar
 DIFF_IGNORE_END
 some other text
-one
+two

我需要一个允许被忽略的块也具有不同大小的解决方案。

【问题讨论】:

    标签: language-agnostic version-control diff


    【解决方案1】:

    实现这一点的一种方法是通过custom diff driver,在.gitattributes 文件中声明一个特殊的差异脚本,这将:

    • 删除根、源和目标版本上的每个 DIFF_IGNORE_xxx 部分,用虚拟内容替换它们(三个版本之间始终相同)
    • 使用修改后的版本执行差异

    【讨论】:

    • 与 git 挂钩会很容易,但自定义差异驱动程序并不像您想象的那么容易 - 您不能用虚拟内容替换两个标签之间的内容,因为这通常会出现在 diff 中作为 diff 上下文。
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2012-12-10
    • 1970-01-01
    • 2011-05-17
    相关资源
    最近更新 更多