【问题标题】:Counting files and directories in a very large subversion repository计算一个非常大的颠覆存储库中的文件和目录
【发布时间】:2011-10-08 16:18:03
【问题描述】:

在这里,我们有一个相当大的颠覆存储库。作为我们内部监控的一部分,我们希望计算所有存储库中每个修订版本的所有文件和目录。问题是,其中一个有大约 29000 个修订版,包含大约 300000 个目录,有近 400 万个文件。我们之前的方法只是在 perl 脚本中使用“svnlook”命令的输出来计算所有内容。我已经尝试使用输出 'svnlook changed' 来建立计数,它主要工作,但涉及一些相当烦人的猜测。附带说明一下,repos 托管在 xen vm 上,因此 I/O 性能有点问题。有人有更好的方法来做到这一点吗?

【问题讨论】:

  • 我有兴趣解决这个问题。您介意分享您正在使用的 Perl 脚本吗?

标签: perl svn


【解决方案1】:

假设您在谈论服务器端回购。

svn list -R --xml file:///svnrepos/myrepo | grep kind=\"file\" | wc -l

它不是很快,但它很准确。

【讨论】:

    【解决方案2】:

    怎么样:

    find /svndir | wc -l
    

    在 Linux 或 Unix 上 find 的输出为每个文件或目录生成一行,并且它是递归的。将输出通过管道传输到“wc -l”以计算行数。

    【讨论】:

    • 根据 OP 上下文,这将计算服务器端存储库中的文件,该存储库中的每个“文件”都没有文件。上面的命令将计算 db、conf、dav 和其他跟踪 repo 元数据的文件。
    【解决方案3】:

    我会研究 svnadmin 转储增量格式。我玩过一点,但基本上它是一个巨大的补丁类型文件,包含所有文件和所有修订。它本质上是文本,因此使用 Perl 之类的东西处理起来相对简单,而且与一次完成每个修订版相比,它相当小。

    您可能需要拥有所有文件的表示形式(如果有 400 万,可能使用 SQLite)并在通过每个修订时更新它们。增量按顺序进行修订,因此应该相对简单。 (也许我很乐观。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多