質問

以前は、特定の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です。ユーザーあたりのセットレポート、1週間あたりなどを提供します

以下のように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

特定のブランチまたは2つのハッシュの統計を取得する方法は次のとおりです。

ここで重要なのは、hash..hashを行う能力です

以下では、枝から頭までの最初のハッシュを使用しています。これはその枝の終わりです。

支店で合計コミットを表示します

  • git log first_hash..head-pretty = oneline | WC -L
  • 出力53

著者ごとに合計コミットを表示します

  • Git Shortlog first_hash..head -sne
  • 出力
  • 24著者名
  • 9著者名

ご了承ください、 レポがgithubにある場合, 、あなた(2013年5月)は、興味深い統計を取得するための新しいGithub APIのセットを持っています。
見る "ファイルCRUDおよびリポジトリ統計がAPIで利用可能になりました"

それは次のとおりです:

私は書いた 小さなシェルスクリプト これにより、マージ統計が計算されます(機能ブランチベースのワークフローを扱うときに役立ちます)。小さなリポジトリの出力の例は次のとおりです。

[$]> 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

このgitstatプロジェクトを参照してください

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

以下は、著者を取得するために使用した単純な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")

Dataheroは、GitHubデータを簡単に引き込み、統計を取得できるようになりました。各マイルストーンの進捗を追跡するために内部的に使用します。

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

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

開示:私はDataHeroで働いています

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


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

変更 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")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top