2009-09-28 43 views
77

以前我很享受TortoiseSvn爲給定的SVN信息庫生成簡單提交統計信息的能力。我不知道什麼是Git中可用,我特別感興趣:哪些Git提交統計信息很容易拉動

  • 每個用戶提交的數
  • 每個用戶改變
  • 活動隨着時間的行數(例如合計每週的變化)

任何想法?

回答

168

其實,混帳已經具備了這樣的命令:

git shortlog 
你的情況

,這聽起來像你有興趣在此形式:

git shortlog -sne 

查看--help的各種選項。

您可能也有興趣GitStats project。他們有幾個例子,包括stats for the Git project。從GitStat主頁:

這是目前產生了一些統計信息的列表:

  • 一般統計:總的文件,行,提交的作者。
  • 活動:按小時,星期幾,小時,小時,年和月以及年份提交。
  • 作者:作者列表(姓名,提交(%),第一次提交日期,最後提交日期,年齡),作者月份,作者年份。
  • 文件:按日期的文件數量,擴展
  • 線:按日期
+1

這正是我所期待的。令人驚訝的是,你實際上可以用「git shortlog -sn」替換我的例子中的代碼行 爲此回答打個招呼 – 2009-09-28 18:16:04

+12

也'git shortlog -sn --no-merges'從計數中移除「合併提交」。 – lbolla 2011-12-09 09:52:28

+4

2010年2月:[Linus攻擊!](http://gitstats.sourceforge.net/examples/git/authors.html#cumulated_lines_of_code_per_author) – naught101 2012-06-15 01:59:35

23

首先,你不必任何東西(如在網絡拉),因爲你有本地整個存儲庫和整個歷史。我很確定有一些工具可以給你統計,但有時候你可以用命令行來創造。舉例來說,這(只是從我的頭)會給你提交的數目每用戶:

你自找的,可能需要更多的心思投入到它
git log --pretty=format:%ae \ 
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' 

其他統計資料。您可能想要查看可用的工具。谷歌搜索git statistics指向GitStats工具,我沒有經驗,甚至不知道如何讓它在Windows上運行,但你可以嘗試。

+5

'git shortlog -s -n'(來自http://stackoverflow.com/questions/1828874/generating-statistics-from-git-repository) – naught101 2012-06-15 01:56:27

+0

這裏不需要gawk – 2012-06-24 20:52:01

+4

'git shortlog'確實是這裏的正確命令但即使沒有它,上面的複雜awk命令也可以用'|來修改排序| uniq -c' – josch 2015-01-06 11:35:11

6

感謝黑客回答這個問題。然而,我發現這些修改後的版本是我的特定使用更好:

git log --pretty=format:%an \ 
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\ 
| sort -r 

(用awk,因爲我沒有在我的Mac GAWK,並且在頂部最活躍的排序comitter) 它輸出名單如下所示:

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 
+0

我不知道你有Mac - 提到烏龜讓我想起了窗戶。但無論如何,我很高興你找到了自己的路。我的片段只是一個例子和一個起點。 – 2009-09-28 15:03:18

+1

這必須是'sort -rn'。 – hughdbrown 2012-01-27 21:17:28

+0

@hughdbrown,對我來說,'sort -rn'中不需要'-n'。我使用了一個mac,但「排序數字」對我試過的例子沒有任何影響 – 2012-01-28 13:56:12

2

可以通過以下方法來獲得統計特定分支或兩個哈希。這裏

關鍵是要做到HASH..HASH

下面我用的第一個散列從一個分支的頭,它是分支的末端的能力。

顯示佔所有提交的一個分支

  • git的日誌FIRST_HASH..HEAD --pretty = ONELINE |廁所-l每位作者

    • 混帳shortlog FIRST_HASH..HEAD -sne
    • 輸出
    • 24作者名稱
    • 9作者
    • 輸出53

    展會共提交名稱

1

在這裏工作,是我用來獲取筆者簡單的Ruby腳本,行補充道,行刪除,從git提交計數。它不包括一段時間的提交。

請注意,我有一個技巧,它會忽略任何添加/刪除超過10,000行的提交,因爲我認爲這是某種類型的代碼導入,隨時可以根據需要修改邏輯。你可以把下面的到一個名爲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") 
2

我寫a small shell script計算合併統計

git log --numstat --pretty='%an' | ruby gitstats-simple.rb 

內容(有用的當處理基於功能分支的工作流程)。這裏有一個小倉庫的輸出例如:

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

另外,如果您使用的是GitHub的pull請求系統,我寫了[github-pr-stats](https://github.com/xiongchiamiov/github-pr-stats),它提供比git-merge-stats更多的數據,甚至還有一個插件系統允許您整合您自己的公司特定分析。 – 2016-07-13 01:16:07

0

您可以使用gitlogged寶石(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

修改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") 
4

到目前爲止我所認定的最佳工具是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 

etc