以前は、特定のSVNリポジトリの単純なコミット統計を生成するTortoiseSvnの機能を楽しんでいました。Gitで何が利用できるのか、特に興味があります:
- ユーザーあたりのコミット数
- ユーザーごとに変更された行数
- 時間の経過に伴うアクティビティ(たとえば、毎週の変更の集計)
何か案は?
以前は、特定のSVNリポジトリの単純なコミット統計を生成するTortoiseSvnの機能を楽しんでいました。Gitで何が利用できるのか、特に興味があります:
何か案は?
実際、gitにはすでにこのためのコマンドがあります:
git shortlog
あなたの場合、あなたはこのフォームに興味があるようです:
git shortlog -sne
--help
さまざまなオプションについては、を参照してください。
GitStatsプロジェクトにも興味があるかもしれません。Gitプロジェクトの統計など、いくつかの例があります。GitStatメインページから:
現在生成されているいくつかの統計のリストは次のとおりです。
まず、リポジトリ全体と履歴全体がローカルにあるため、(ネットワーク プルのように) 何もプルする必要はありません。統計情報を提供するツールがあることは確かですが、コマンド ラインを使用することで創造性を発揮できる場合もあります。たとえば、これは(私の頭から)ユーザーごとのコミット数を示します。
git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'
あなたが求めた他の統計については、さらに検討する必要があるかもしれません。利用可能なツールを確認したい場合があります。git statistics
ツールへのポイントをグーグルで検索しGitStats
ますが、これは私には経験がなく、Windowsで実行するのに何が必要かについてはさらにわかりませんが、試してみることができます.
これまでに特定した最高のツールは gitinspector です。ユーザーごと、週ごとなどの設定されたレポートを提供します
npmで以下のようにインストールできます
npm install -g gitinspector
リンクを取得するための詳細は以下のとおりです
https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector
コマンドの例は
gitinspector -lmrTw
gitinspector --since=1-1-2017
等
この質問に答えてくれたハッカーに感謝します。ただし、これらの変更されたバージョンは、特定の用途に適していることがわかりました。
git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r
(Mac に gawk がないので awk を使用し、最もアクティブなコミッターを一番上にしてソートします。) 次のようなリストを出力します。
1205 therikss
1026 lsteinth
771 kmoes
720 minielse
507 pagerbak
269 anjohans
205 mfoldbje
188 nstrandb
133 pmoller
58 jronn
10 madjense
3 nlindhol
2 shartvig
2 THERIKSS
マージ統計を計算する小さなシェル スクリプトを作成しました (機能ブランチ ベースのワークフローを扱う場合に役立ちます)。小さなリポジトリでの出力例を次に示します。
[$]> git merge-stats
% of Total Merges Author # of Merges % of Commits
57.14 Daniel Beardsley 4 5.63
42.85 James Pearson 3 30.00
リポジトリが GitHubにある場合は、現在 (2013 年 5 月)、興味深い統計を取得するための新しい GitHub API のセットがあることに注意してください。
「ファイルの CRUD とリポジトリの統計が API で利用できるようになりました」を参照してください。
それには以下が含まれます:
特定のブランチまたは 2 つのハッシュの統計を取得する方法を次に示します。
ここで重要なのは、HASH..HASH を実行できることです。
以下では、ブランチからそのブランチの終わりである HEAD への最初のハッシュを使用しています。
ブランチの合計コミットを表示する
著者ごとの合計コミット数を表示
このgitstatプロジェクトを見る
これは、作者、追加された行、削除された行、git からのコミット数を取得するために使用した単純な ruby スクリプトです。時間の経過に伴うコミットは対象外です。
これは何らかのコードのインポートであると想定しているため、10,000 行を超える追加/削除を行うコミットを無視するトリックがあることに注意してください。必要に応じてロジックを自由に変更してください。以下を gitstats-simple.rb というファイルに入れて実行できます
git log --numstat --pretty='%an' | ruby gitstats-simple.rb
gitstats-simple.rb の内容
#!/usr/bin/ruby
# takes the output of this on stdin: git log --numstat --prety='%an'
map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
parts = line.split
next if parts.size == 0
if parts[0].match(/[a-z]+/)
if who && memo[0] + memo[1] < 2000
map[who][0] += memo[0]
map[who][1] += memo[1]
map[who][2] += 1
end
who = parts[0]
memo = [0,0]
next
end
if who
memo[0]+=line[0].to_i
memo[1]+=parts[1].to_i
end
end
puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")
https://stackoverflow.com/a/18797915/3243930を変更します 。出力はgithubのグラフデータにかなり近いです。
#!/usr/bin/ruby
# takes the output of this on stdin: git log --numstat --prety='%an'
map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
parts = line.split("\t")
next if parts.size == 0
if parts[0].match(/[a-zA-Z]+|[^\u0000-\u007F]+/)
if who
map[who][0] += memo[0]
map[who][1] += memo[1]
if memo[0] > 0 || memo[1] > 0
map[who][2] += 1
end
end
who = parts[0]
memo = [0,0]
next
end
if who
memo[0]+=parts[0].to_i
memo[1]+=parts[1].to_i
end
end
puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")
github を使用している場合、PR Countは貢献統計を表示するために作成された github アプリです。