2011-01-04 16 views
38

私はGITリポジトリを持っており、一定期間の間に1人または複数の人によって追加または変更されたコードの行数を計算したい。 gitで計算することは可能ですか?Git:追加された/変更されたコード行に関して、プロジェクトへの人の貢献度を見積もる方法は?

+2

HTTPを参照してください、ところで「パフォーマンス」を推定するためにこれを使用しないでください://ブログ.msdn.com/b/oldnewthing/archive/2010/11/16/10091537.aspx – ismail

+1

ご意見ありがとうございます。私はこのタイプの測定で人の給与を測定するつもりはありませんでした。これは人の仕事の全体像を持つために行われ、誰も私が1つのことをしていることを知ることはありません – Lu4

+3

これは線のサイズではなく、使い方です。 – ingyhere

答えて

69

あなたはgit logといくつかのシェル-FUを使用することができますもあります:

git log --shortstat --author "Aviv Ben-Yosef" --since "2 weeks ago" --until "1 week ago" \ 
    | grep "files\? changed" \ 
    | awk '{files+=$1; inserted+=$4; deleted+=$6} END \ 
      {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}' 

説明:それぞれについてgit log --shortstatディスプレイ短い統計がコミット、とりわけ、数を示し、変更されたファイル、挿入された行、削除された行特定のコミッター(--author "Your Name")と時間範囲(--since "2 weeks ago" --until "1 week ago")のためにフィルターをかけることができます。

コミットごとのエントリを見るのではなく、実際に統計を集計するために、シェルスクリプトを使ってそれを行います。まず、grepを使用して、差分を含む行のみをフィルタリングします。

8 files changed, 169 insertions(+), 81 deletions(-) 

またはこの:これらの行は次のようになり

1 file changed, 4 insertions(+), 4 deletions(-) 

私たちは、その後、awkを使用して、これらを合計:各ラインのために私たちは、ファイルは、(1ワード目)を変更、挿入行(第四の単語)と追加します削除された行(6番目の単語)を削除し、すべてを合計した後に印刷します。

編集:スニペットの先頭にスラッシュが追加されているため、コピーしてコマンドラインに貼り付けることができます。特定の日付の

+1

間に= --authorと--sinceと--until –

+0

ありがとう!私はこれをちょっと微調整してシェル機能を作りました。 https://gist.github.com/pstadler/4722416 – pstadler

+4

これは、挿入がある限り有効です。削除のみがある場合、挿入としてカウントされます。なぜなら、「8ファイルが変更され、81削除が削除される」という4番目の単語が挿入ではなく削除されるからです。 –

16

Gitstatsを使用して統計情報を生成できます。それには、上位20人の著者が追加/削除した行の数(コミット数で上位20行)を含む「Authors」セクションがあります。

編集:Git: Blame Statistics

3

、あなたは "2012年9月1日"

と同様にgitのログ--shortstat --author --until "2012年8月27日" --since使用することができます"ファビアン" - "2012-08-27"から--until "2012-09-01" | grep "ファイルが変更されました" awk '{ファイル+ = $ 1; + = $ 4を挿入しました。 + = $ 6} END {プリント "変更されたファイル"、ファイル、 "挿入行:" 削除、 挿入し、 "削除された行を:"、}削除」

チェックこの説明

http://gitref.org/inspect/

1

Atlassian's Fisheye/CrucibleをGit(他のコードreposと同様)と統合できます。 LOCを含む全員の貢献は、簡単に読めるウェブアプリに一般公開されています。小グループの方もかなり安いです。

情報を公開し、それ自体について発言させてください。

+0

現在、fisheyeはGITまたは水銀リポジトリのLOCメトリックをサポートしていません。これらの統計ではSVNのみがサポートされているようです。 https://confluence.atlassian.com/display/FISHEYE/Cannot+View+Lines+of+Code+Information+in+FishEye –

+0

おっと!私は訂正した。アトラシアンへの私の信念も少し揺れています。 – ingyhere

+0

Fisheyeの最新バージョンでGitがサポートされました! – ingyhere

0

を実行し、このコマンド:

git log --pretty=format:'' --numstat --author 'Lu4' | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}'; 

このコマンドは、abyx's answerで巧妙なものに非常に近いですが、それはまた、Wallace Sidhréeで見つかったエッジケースを処理します。時には、コミットには削除のみが含まれます(つまり、挿入されません)。 abyx's answerのコマンドは、これらの削除を挿入と誤って読み取ります。ここでのコマンドは、--shortstatの代わりに--numstatを使用するため、正しく読み取ります。 --shortstatとは異なり、--numstatには、それらのコミットの挿入と削除の両方が含まれています。

両方のコマンドにはファイル数にバイナリファイルが含まれていますが、それらのバイナリ内に挿入され削除された行数は除外されています。


これは別の便利なトリックです。このコンテンツをgitstatsというファイルを作成します。

#!/usr/bin/env bash 

git log --pretty=format:'' --numstat "[email protected]" | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}'; 

が次にあなたが欲しいgit logに余分なオプションを指定して、そのコマンドを実行することができます。ここではいくつかの例は以下のとおりです。

./gitstats; 
./gitstats --since '1 month ago'; 
./gitstats --since '1 month ago' --until '1 day ago'; 
./gitstats --author 'Lu4' --since '1 month ago' --until '1 day ago'; 

(ファイルはもちろん、gitstats以外の名前を付けることができます。)

関連する問題