3

我正在寻找可以显示提交 svn 修改文件的频率的东西。我希望能够查看哪些文件经常更改以及更改频率。最好还应按目录对“报告”进行分组,以便能够查看每个项目的更改频率。

哪个工具提供了这样的能力?

(如果这很重要 - 我也在使用 maven 和语言 ism 主要是 java)

4

3 回答 3

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 并在那里完成更多工作。

于 2013-06-28T12:00:20.853 回答
1

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

于 2013-06-28T10:39:20.767 回答
0

"while read $file" 行中不应该有 $,例如它应该是 "while read file"。否则它工作正常!

于 2013-12-09T12:59:57.327 回答