27

我使用 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 工具部分解决了这个问题。请参阅下面我自己的答案...

4

10 回答 10

25

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

于 2009-10-03T21:35:02.293 回答
11

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

IE,

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

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

于 2009-02-05T08:29:36.633 回答
7

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

svn diff --patch-compatible

和跑步一样

svn diff --show-copies-as-adds --ignore-properties
于 2013-09-24T14:42:18.983 回答
6

JosephWatkins 的好建议。

这是 grep-junior-users 的命令:

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

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

于 2009-02-19T15:56:46.660 回答
3

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

于 2009-01-02T17:09:46.043 回答
3

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

于 2018-05-24T18:09:38.690 回答
2

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

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

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

于 2010-10-05T14:21:09.383 回答
1

在网上找不到之后,我编写了一个脚本来执行此操作。

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

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

我将它作为 GPLv2 发布。

clean_svn_diff.bash

于 2009-07-04T02:30:36.477 回答
-1

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

于 2008-12-31T08:36:45.137 回答
-6

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

于 2008-12-31T08:59:24.983 回答