SVN DIFF命令是否有元数据排除筛选器?

SVN DIFF命令是否有元数据排除筛选器?,svn,version-control,properties,diff,metadata,Svn,Version Control,Properties,Diff,Metadata,我使用SVN作为源代码控制系统,我想知道如何在忽略任何元数据差异的情况下比较目录。有没有办法告诉svn diff只比较实际内容而忽略任何元数据 我指的是不影响文件内容的元数据,如SVN属性等。假设文件X在分支B中与主干T相比有一个附加属性。不幸的是,它将显示在“svn diff T B”中,即使文件X的实际内容相同 我在寻找这样的东西: svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-meta

我使用SVN作为源代码控制系统,我想知道如何在忽略任何元数据差异的情况下比较目录。有没有办法告诉
svn diff
只比较实际内容而忽略任何元数据

我指的是不影响文件内容的元数据,如SVN属性等。假设文件X在分支B中与主干T相比有一个附加属性。不幸的是,它将显示在“svn diff T B”中,即使文件X的实际内容相同

我在寻找这样的东西:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize

更新:我通过直接在文件系统上进行区分,而不是使用SVN工具,部分解决了这个问题。请参见下面我自己的答案…

我不确定,但一个简单的“svn diff | grep-iv“stuff to ignore”将是一个解决办法。

您可以在希望svn diff忽略的文件和目录上设置属性

使用svn内置工具似乎无法完成此任务。我是如何解决的: 导出这两个树,并使用您喜爱的diff工具在文件系统上直接对它们进行diff。这是完成此操作的唯一方法://

如果使用
--summary
选项,那么属性更改将显示在第二列而不是第一列中


grep比较容易一点。我想如果你想要一个完整的差异,你可以有一个两阶段的过程-首先使用摘要来查找内容发生变化的文件,然后进行差异化。

JosephWatkins提供的好提示

以下是针对grep junior用户的命令:

svn diff A B --summarize | grep '^. '

grep寻找一个空格作为行中的第二个字符。

我写了一个脚本来完成这个任务,因为我在网上找不到

脚本根据在脚本顶部输入的正则表达式数组删除数据。目前,它被设置为过滤掉属性更改,但它可以删除与一系列正则表达式匹配的任何更改

设置脚本后,只需将
svn diff
的输出通过管道传输到脚本。我将过滤器放在脚本中而不是参数中,因为我总是运行相同的过滤器

我以GPLv2的形式发布了它


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

这里有一个命令可以完成所有这些操作。假设要查找当前目录中版本54833和57215之间的所有文件的所有(非属性)差异。此命令应执行以下操作:

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215

注意:它只区分修改过的文件,而不是添加或删除的文件。

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

svn diff --patch-compatible
这和跑步一样

svn diff --show-copies-as-adds --ignore-properties

使用。这是Subversion的内置方法,只对内容进行差异化。它忽略对项目属性的任何更改。

元数据是什么意思?“SVN属性”是一个更好的词来描述它。我修正了我的帖子来澄清这一点。我不想忽略特定的目录或文件,而是忽略相同文件的不同属性(即元数据)。假设文件X在分支B中比主干T中有一个附加属性。即使实际内容相同,它也会显示在svn diff中。整个diff只是作为大量文本出现,我必须手动解析它以过滤掉所有类似“svn属性添加”的更改。很遗憾,使用grep无法完成简单的任务。对不起。它必须是svn diff A B--summary | grep-v'^'所有以空格开头的行都必须隐藏,因为只有文件上的属性发生了更改。这不适用于文件内容和属性都发生了更改的情况,或者文件发生了锁定等其他情况并修改了文件。按广告方式工作-太好了!给Debian/Ubuntu用户的提示:如果系统上没有
filterdiff
,您可以通过
apt get install patchutils
安装它。svn的较新版本(在1.9.3上测试)提供了一种内置方法:或者。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-不是吗?作者的问题是如何让
svn diff
在执行diff时忽略所有subversion属性。这正是
svn--ignore properties
所做的。也许我应该用更好的措辞来回答。“我以后会尝试这么做的。”ryadavilli为什么stackoverflow的评论员如此迟钝?
svn diff --show-copies-as-adds --ignore-properties