是否有SVN DIFF命令的元数据排除过滤器?

dri*_*iAn 25 svn version-control diff metadata properties

我使用SVN作为源控制系统,我想知道如何比较目录而忽略任何元数据差异.有没有办法告诉svn diff我只比较实际内容并忽略任何元数据?

我的意思是像SVN属性等元数据,它们不会影响文件内容.假设文件X在分支B中具有与trunk T相比的附加属性.不幸的是,即使文件X的实际内容相同,它也将显示在'svn diff TB'中.

我寻找这样的东西:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize
Run Code Online (Sandbox Code Playgroud)

更新:我通过直接在文件系统上进行差异而不是使用SVN工具来解决这个问题.请看下面我自己的答案......

小智 24

您可以通过'filterdiff --clean'传递svn diff输出以删除任何无关的行,包括属性更改.


Joe*_*ins 11

如果使用该--summarize选项,则在第二列而不是第一列中指示属性更改.

也就是说,

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change
Run Code Online (Sandbox Code Playgroud)

grep更容易一点.我猜你可以有一个两阶段的过程,如果你想要一个完整的差异 - 首先使用汇总来查找内容改变的文件,然后区分它们.


小智 6

来自JosephWatkins的好建议.

这是grep-junior-users的命令:

svn diff A B --summarize | grep '^. '
Run Code Online (Sandbox Code Playgroud)

grep查找空格作为该行的第二个字符.

  • 抱歉.它必须是svn diff AB --summarize | grep -v'^'所有以空格开头的行都必须隐藏,因为只有属性在文件上发生变化. (2认同)

Jus*_*der 6

在搜索svn帮助文档时发现了这一点

svn diff --patch-compatible
Run Code Online (Sandbox Code Playgroud)

和跑步一样

svn diff --show-copies-as-adds --ignore-properties
Run Code Online (Sandbox Code Playgroud)


dri*_*iAn 3

似乎没有办法使用 svn 内置工具来完成此任务。我是如何解决这个问题的:导出两棵树并使用您最喜欢的比较工具在文件系统上直接比较它们。这是完成此任务的唯一方法:/