最有效地获取批量SVN日志信息

时间:2012-05-17 12:55:38

标签: svn scripting code-analysis

我正在寻找一种方法来估计哪个开发人员为SVN存储库中的每个文件贡献了最多的代码。到目前为止,我唯一能想到的方法是获取每个文件的svn日志,解析第一行,并写下所有这些条目。问题是为每个文件单独获取完整日志的效率非常低,并且需要花费很多时间。

  1. 有没有办法获取文件夹的所有日志条目,还有文件名?如果您要求提供文件夹日志,则默认的svn操作似乎不会指定哪个日志条目属于哪个文件。
  2. 或者,有没有办法在存储库上执行这种批量查询?
  3. 使用svn命令行工具或编程语言绑定的答案是受欢迎的。

3 个答案:

答案 0 :(得分:2)

如果您只想知道哪个用户更改了每个修订版本的文件(不关心更改量),您可以使用命令行选项-vsvn log。这也适用于完整的工作目录 - 以及远程存储库。

您可能还想使用命令行选项--xml。这简化了大多数编程环境的解析。

答案 1 :(得分:2)

哦,小伙子,这将是一个有趣的统计数据。

如果您使用此方法对开发人员进行排名,则会鼓励您的开发人员进行大量更改和代码。这会用于奖金吗?迪尔伯特的牛犊Wally会喜欢这个。他会在下午4点之前为自己写法拉利。但是,如果你坚持......

您可以简单地从您感兴趣的项目的根目录中获取日志,而不是解析每个文件,并传递您想要的修订范围。

这将为您提供提交每个修订版的开发人员的名称。这是一个例子:

$ svn log -r1:HEAD http://server/svn/project 
------------------------------------------------------------------------
r1 | david | 2011-07-12 15:18:33 -0400 (Tue, 12 Jul 2011) | 1 line

Adding directories
------------------------------------------------------------------------
r2 | bob | 2011-07-12 15:19:20 -0400 (Tue, 12 Jul 2011) | 1 line

Adding property
------------------------------------------------------------------------
r3 | mark | 2011-08-21 10:33:51 -0400 (Sun, 21 Aug 2011) | 1 line

如果您还想要文件名,可以使用--verbose参数:

$ svn log -r1:HEAD --verbose http://server/svn/project
------------------------------------------------------------------------
r1 | david | 2011-07-12 15:18:33 -0400 (Tue, 12 Jul 2011) | 1 line
Changed paths:
   A /branches
   A /tags
   A /trunk

Adding directories
------------------------------------------------------------------------
r2 | bob | 2011-07-12 15:19:20 -0400 (Tue, 12 Jul 2011) | 1 line
Changed paths:
   M /trunk

Adding property
------------------------------------------------------------------------
r3 | mark | 2011-08-21 10:33:51 -0400 (Sun, 21 Aug 2011) | 1 line
Changed paths:
   A /trunk/subversion
   A /trunk/subversion/control.ini
   A /trunk/subversion/pre-commit-kitchen-sink-hook.html
   A /trunk/subversion/pre-commit-kitchen-sink-hook.pl
   A /trunk/subversion/svn-watch.html
   A /trunk/subversion/svn-watch.pl

Adding files
------------------------------------------------------------------------

但是,如果您 确实 想知道谁是效率最高的程序员,请不要查看代码。富有成效的开发人员编写的代码少于效率低下的同事。一个优秀的开发人员将以有效的方式组织代码流,因此很少有例外需要注意,而可怜的开发人员可能会采取错误的方法,然后必须处理其基本规则的所有例外。

一位高效的开发人员修复了包含该错误的一个文件,而不是更改了几十个试图追踪该错误的文件。事实上,一个非常优秀的开发人员甚至可能会认识到可以通过修改环境设置而不是代码来解决问题。

你想知道谁在开发领域拉动他们的重量,看看你的问题跟踪系统。谁在解决最大的问题并将其转向最快?谁添加了一个功能而没有引起一连串的错误?

程序员的工作是解决问题,而不是吊索代码。

答案 2 :(得分:1)

您可以尝试相反的方法:在存储库根目录运行svn log --xml -v将以XML格式输出完整的日志,包括更改路径。然后,您解析它并收集统计信息。