0

SVN リポジトリ内の各ファイルに対して、どの開発者が最も多くのコードを提供したかを推定する方法を探しています。これまでのところ、私が理解できる唯一の方法は、ファイルごとに svn ログを取得し、最初の行を解析して、これらすべてのエントリを書き込むことです。問題は、ファイルごとに個別に完全なログをフェッチすることは非常に非効率的であり、多くの時間がかかることです。

  1. フォルダのすべてのログ エントリだけでなく、ファイル名も取得する方法はありますか? デフォルトの svn 操作では、フォルダー ログを要求した場合、どのログ エントリがどのファイルに属するかを指定していないようです。
  2. あるいは、リポジトリでこの種のバッチ クエリを実行する方法はありますか?

svn コマンドライン ツールまたはプログラミング言語バインディングを使用した回答を歓迎します。

4

3 に答える 3

2

どのユーザーがリビジョンごとにどのファイルを変更したかだけを知りたい場合(変更の量は気にしない)、コマンドラインオプション-vを。とともに使用できますsvn log。これは、完全な作業ディレクトリとリモートリポジトリでも機能します。

コマンドラインオプションを使用することもできます--xml。これにより、ほとんどのプログラミング環境での解析が簡素化されます。

于 2012-05-17T13:13:00.503 に答える
2

ああ、それは興味深い統計になるでしょう。

この方法で開発者をランク付けすると、開発者に多くの変更やコードを吐き出すよう促すことになります。これはボーナスに使用されますか?ディルバートの牛飼いのウォーリーはこれを気に入るはずだ。彼は午後 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
------------------------------------------------------------------------

ただし、最も生産性の高いプログラマーを本当に知りたい場合は、コードを見ないでください。生産的な開発者は、効率の悪い同僚よりも少ないコードを書いています。優れた開発者は効率的な方法でコードの流れを編成するため、注意すべき例外はほとんどありませんが、下手な開発者は間違った方法を取り、基本的なルールに対するすべての例外を処理する必要があります。

効率的な開発者は、バグを追跡しようとして数十のファイルを変更するのではなく、バグを含む 1 つのファイルを修正します。実際、非常に優れた開発者であれば、コードではなく環境設定を変更することで問題を解決できることに気付くことさえあります。

開発分野で誰が重要な役割を果たしているかを把握したい場合は、問題追跡システムを調べてください。最も大きな問題に取り組み、最も迅速に解決しているのは誰ですか? バグのカスケードを引き起こさずに機能を追加するのは誰ですか?

プログラマーの仕事は問題を解決することであり、コードを投げることではありません。

于 2012-05-17T14:27:47.303 に答える
1

逆のアプローチを試すこともできsvn log --xml -vます。リポジトリ ルートで実行すると、変更パスを含む完全なログが XML 形式で出力されます。次に、それを解析して統計を収集します。

于 2012-05-17T13:16:02.937 に答える