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

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

我想找到这样的东西:

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

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

有帮助吗?

解决方案 5

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

其他提示

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

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

即,

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change

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

来自JosephWatkins的好建议。

以下是grep-junior-users的命令:

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

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

在搜索svn帮助文档时找到了这个

svn diff --patch-compatible

与运行

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

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

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

注意:它只会对已修改的文件进行区分 - 不添加或删除文件。

使用 svn diff --ignore-properties 。这是Subversion的内置方法,只对内容进行差异处理。它忽略了对项目属性的任何更改。

我在网上找不到一个脚本后写了一个脚本。

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

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

我将其作为GPLv2发布。

clean_svn_diff.bash

我不确定,但是一个简单的'svn diff | grep -iv" stuff to ignore"'将是一种解决方法。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top