svn - 每个文件或目录的提交频率

时间:2013-06-28 06:55:40

标签: svn commit

我正在寻找可以显示提交svn修改文件的频率的内容。我希望能够看到哪些文件经常更改以及频率更改。优选地,“报告”也应按目录分组,以便能够查看每个项目的变化频率。

哪种工具提供这种能力?

(如果重要的话 - 我也使用maven,语言主要是java)

3 个答案:

答案 0 :(得分:2)

在Subversion中没有标准工具可以做到这一点。但是,我可以看到一种可行的方法,但可能需要一段时间。

首先,您需要生成存储库中所有文件的列表。这应该这样做:

$ svn ls -R $REPO

然后您可以将其用作输入,并以某种方式从每个文件生成报告:

$ svn ls -R $REPO | while read $file
do
    here be dragons
done

我们需要摆脱文件(现在BASH和Kornshell具体):

$ svn ls -R $REPO | while read $file
do
    [[ $file == */ ]] && continue
    here be dragons
done

然后,我们需要弄清楚如何计算所有的变化。 svn log应该这样做。如果我们计算除了破折号之外的所有行,那么应该给我们一个计数:

$ svn ls -R $REPO | while read $file
do
    [[ $file == */ ]] && continue
    count=$(svn log $REPO/$file | grep "^--*$" | wc -l)
    echo "$REPO/$file: $count"
done

这有一些问题:

  • 我假设您要从存储库的根目录开始。如果没有,您可能需要考虑目录条目。
  • 在名称中存在空白空间的文件存在问题。如果文件没有空格(我假设您的源文件没有)或者有一个空格并且名称的前面或末尾没有空格,这将有效。但是,双重空格,制表符等会有问题。
  • 这将会很慢,并且没有真正的报告,只有文件列表和计数。
  • 这不处理已删除的文件。如果文件已从存储库中删除,则不会在此程序中列出。
  • 这个程序很慢。在我的测试中,每个文件大约需要一秒钟。开始吧,吃午饭,喝杯咖啡。也许骑到大西洋城,玩几手掷骰子。它应该在你回来的时候完成。

这是一个开始。您可以通过-r中的svn log参数限制日期范围。如果大多数修订来自两年前,您可能不在乎文件是否有大量修订。而且,这可能是shell脚本的限制。逻辑可以移植到Python或Perl,并在那里完成更多工作。

答案 1 :(得分:1)

虽然有SVN内部命令可以生成报告,但我建议尝试使用Atlassian的FishEye工具。 它是一个付费工具,但提供了大量详细信息,包括特定用户提交的文件数量,提交了多少次文件,并以图形格式提供报告。

答案 2 :(得分:0)

在读取$ file时,行中不应该有$ 例如它应该是“在读取文件时”。 否则它工作正常!