0

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

  1. 有没有办法获取一个文件夹的所有日志条目,还有文件名?如果您要求文件夹日志,默认的 svn 操作似乎没有指定哪个日志条目属于哪个文件。
  2. 或者,有没有办法在存储库上执行这种批量查询?

欢迎使用 svn 命令行工具或编程语言绑定回答。

4

3 回答 3

2

如果您只想知道哪个用户更改了每个修订版的哪些文件(不关心更改量),您可以使用-v带有svn log. 这也适用于完整的工作目录 - 以及远程存储库。

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

于 2012-05-17T13:13:00.503 回答
2

哦,男孩,这将是一个有趣的统计数据。

如果您使用这种方法对开发人员进行排名,您将鼓励您的开发人员进行大量更改和代码。这会用于奖金吗?Dilbert 的牛工 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
------------------------------------------------------------------------

但是,如果您真的想知道谁是最有生产力的程序员,请不要看代码。与效率低下的同事相比,高效的开发人员编写的代码更少。优秀的开发人员将以有效的方式组织代码流,因此几乎没有需要注意的异常,而糟糕的开发人员可能会采取错误的策略,然后必须处理其基本规则的所有异常。

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

You want to figure out who's pulling their weight in the development arena, look at your issue tracking system. Who is working on the biggest issues and turning them around the quickest? Who adds a feature without causing a cascade of bugs?

A programmers job is to solve problems, not to sling code.

于 2012-05-17T14:27:47.303 回答
1

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

于 2012-05-17T13:16:02.937 回答