web-dev-qa-db-ja.com

どのGitコミット統計をプルするのが簡単か

以前は、特定のSVNリポジトリの単純なコミット統計を生成するTortoiseSvnの機能を楽しんでいました。 Gitで何が利用できるのか、特に興味があります。

  • ユーザーごとのコミット数
  • ユーザーごとに変更された行数
  • 時間の経過に伴うアクティビティ(たとえば、週ごとの集約された変更)

何か案は?

87

実際、gitにはすでにこのためのコマンドがあります。

git shortlog

あなたの場合、このフォームに興味があるようです:

git shortlog -sne

--helpさまざまなオプション。

GitStatsプロジェクト にも興味があるかもしれません。 Gitプロジェクトの統計 など、いくつかの例があります。 GitStatメインページから:

現在生成されているいくつかの統計のリストは次のとおりです。

  • 一般的な統計:合計ファイル、行、コミット、作成者。
  • アクティビティ:時刻、曜日、曜日、年の月、年と月、年ごとにコミットします。
  • 著者:著者のリスト(名前、コミット(%)、最初のコミット日、最後のコミット日、年齢)、月の著者、年の著者。
  • ファイル:日付ごとのファイル数、拡張子
  • 行:日付別のコード行
188
Pat Notz

まず、リポジトリ全体と履歴全体がローカルにあるため、(ネットワークプルのように)何もpullする必要はありません。統計情報を提供するツールは確かにありますが、コマンドラインを使用するだけで創造的になることもあります。たとえば、これ(私の頭から)は、ユーザーごとのコミット数を示します。

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
5

レポジトリがGitHub上にある場合、興味深い統計を取得するためのGitHub APIの新しいセットがあることに注意してください。
APIで利用可能なファイルCRUDおよびリポジトリ統計 」を参照

それには以下が含まれます:

2
VonC

特定のブランチまたは2つのハッシュの統計を取得する方法を次に示します。

ここで重要なのは、ハッシュを実行する能力です。

以下では、ブランチから最初のハッシュを使用して、HEADブランチの終わりです。

ブランチの合計コミット数を表示

  • git log FIRST_HASH..HEAD --pretty = oneline | wc -l
  • 出力53

作成者ごとの合計コミット数を表示

  • git shortlog FIRST_HASH..HEAD -sne
  • 出力
  • 24著者名
  • 9著者名
2
jhanifen

小さなシェルスクリプト マージ統計を計算します(機能ブランチベースのワークフローを扱う場合に便利です)。これは、小さなリポジトリでの出力例です。

[$]> 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
2
Xiong Chiamiov

ここに、単純なRubyスクリプトを使用して、著者、行の追加、削除、およびgitからのコミット数の取得に使用しました。時間の経過に伴うコミットについては説明しません。

これは何らかのコードのインポートであると想定しているため、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")
1
Cliff Frey

このgitstatプロジェクトをご覧ください

http://mirror.celinuxforum.org/gitstat/

1
Lee jung.seung

変更 https://stackoverflow.com/a/18797915/32439 出力は、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")
0
Jimmy Shen

DataHeroにより、Githubデータを簡単に取得して統計情報を取得できるようになりました。各マイルストーンで進捗状況を追跡するために内部的に使用します。

https://datahero.com/partners/github/

内部での使用方法: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

開示:DataHeroで働いています

0
ibash

Gitlogged gem( https://github.com/dexcodeinc/gitlogged )を使用して、作成者と日付ごとにアクティビティを取得できます。これにより、次のようなレポートが表示されます。

gitlogged 2016-04-25 2016-04-26

次の出力を返します

################################################################

Date: 2016-04-25

Yunan (4):
      fix attachment form for IE (#4407)
      fix (#4406)
      fix merge & indentation attachment form
      fix (#4394) unexpected after edit wo

gilang (1):
      #4404 fix orders cart


################################################################
################################################################

Date: 2016-04-26

Armin Primadi (2):
      Fix document approval logs controller
      Adding git tool to generate summary on what each devs are doing on a given day for reporting purpose

Budi (1):
      remove validation user for Invoice Processing feature

Yunan (3):
      fix attachment in edit mode (#4405) && (#4430)
      fix label attachment on IE (#4407)
      fix void method (#4427)

gilang (2):
      Fix show products list in discussion summary
      #4437 define CApproved_NR status id in order


################################################################
0
Armin Primadi