2

如何获得分支中所有非二进制文件的完全递归 svn blame 报告,其中输出位于 xml 格式的单个文件中,包括修订、日期、作者、文件名和路径以及行的文本文件本身?整个输出需要在一个文件中。它将通过 CCNet 实例作为构建的一部分执行。

可用的工具是 nant 和 nantcontrib 的最新稳定版本、msbuild 和最新的命令行 svn。

以下是我遇到的一些问题: 命令行 svn blame 命令不支持目录递归。Blame 的 --xml 选项不包括每一行的实际文本,尽管它确实包含其他所有内容。默认情况下,nantcontrib 正在传递 --quiet 参数(与任务引用相反),这在 blame 命令上不受支持。Nantcontrib svn 任务可能不接受 --xml 参数。

4

2 回答 2

2

简单的答案是没有任何简单的方法可以做到这一点。最好、最正确的方法是编写自己的 svn 客户端(或扩展现有的客户端),使其具有您需要的功能。一点都不琐碎。

还有一个错误的方法,这也涉及编写代码。不要这样做

寻找 。-类型 f | grep -v .svn | xargs svn 责备 > line_data
寻找 。-类型 f | grep -v .svn | xargs svn --xml 责备 > xml_data

svn您可以将这两个命令一起编写脚本以避免运行find两次,但这仍然会非常缓慢。雪上加霜,您必须自己解析这两个文件,以将实际的源代码行添加到 xml 数据中。

可悲的是,我认为这是标准 svn 客户端对您想要的支持的程度,我找不到任何其他做得更好的客户端(有些甚至不支持blame)。

于 2009-01-05T21:13:43.553 回答
1

我不知道您使用的是什么操作系统。但是您可以尝试使用简单的 FOR 循环和命令“svn ls -R”递归地列出分支(工作区/url)中的所有文件,然后将其通过管道传输到“svn blame --xml”。

我已经在我的 SVN 命令行提示符中进行了尝试,它工作正常(Windows XP、SVN 1.4.4)。我使用的命令如下:

FOR /F "usebackq delims==" %i IN ( svn ls -R http://myurl/mybranch) DO @svn blame --xml %i

注意:如果您在工作区(反映您的分支根)中键入此命令并使用“svn ls -R”而不是上述命令中的 url,则可以避免一些“找不到 url”类型的错误。

希望这可以帮助。

于 2009-01-15T09:07:39.713 回答