0

对存储库根目录的所有修订执行“svn log -q -v”,然后按所需路径过滤真的是最好的(唯一?)方法吗?我们需要找到这些范围,以便为自动化工具提供挂钩修订,并为我们的变更报告添加支持细节。

我已经对查询根做了一些优化:

给定一条路径:

协议://服务器/repo/a/b/c/d/foo.txt

我已经编写了一个脚本来执行路径上的重复 svn 日志查询:

svn log -q -v .../a/b/c/d/foo.txt
svn log -q -v .../a/b/c/d
svn log -q -v .../a/ b/c
svn log -q -v .../a/b
svn log -q -v .../a
svn log -q -v ...

直到我没有得到:

svn:找不到文件:...

我没有运行重要的分析测试,但在我看来,错误应该得到相当快的处理,并且在所有情况下,网络流量的总体潜在减少应该超过重复查询的成本,除了存储库根必须是的情况。反正问了。

如果祖先有多个生存范围,则上述方法不起作用;除非有人知道得更好,否则我唯一的选择是从存储库根目录查询。

从结果中,我基本上想要文件存在的不同范围的列表(我以后可能会修改它以跟踪历史记录,这样一个复活的文件有多个范围;尽管听起来很反常,但我们确实有文件与相同的路径最终是不相关的)。目前,我正在解析通过的修订号,跟踪删除它或其祖先之一的所需路径的最后修订(最初是 HEAD,如果我看到删除,它将被覆盖)。当我看到路径已添加时,我转储了一个 range rev_added - rev_lastdeleted

上述方法有效,但它确实涉及遍历相当多的信息,其中大部分是虚假的。有没有更有效的方法来做到这一点,最好是在服务器端完成更多工作以最小化网络流量(我们的很多工作都是通过 VPN 远程完成的)?

似乎 TortoiseSVN 提供相同信息的唯一方法是执行相同的过程(获取祖先的日志然后过滤)。

4

1 回答 1

0

我不这么认为。如果你想以某种方式格式化这些数据,那么你必须像你正在做的那样获取 SVN 的输出并处理它。

的输出svn log filename应该为您提供所有相关的修订filename- 包括其移动/重命名的历史 - 然后您可以根据需要对其进行格式化。

于 2009-10-22T18:50:54.413 回答