First, you don't have to pull anything (as in network pull), because you have the whole repository and the whole history locally. I'm pretty sure there are tools that will give you statistics, but sometimes you can just be creative with the command lines. For instance, this (just out of my head) will give you the number of commits per user:
git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'
Other statistics you asked for may need more thought put into it. You may want to see the tools available. Googling for git statistics points to the GitStats tool, which I have no experience with and even less idea of what it takes to get it run on windows, but you can try.
Here is a simple ruby script that I used to get author, lines added, lines removed, and commit count from git. It does not cover commits over time.
Note that I have a trick where it ignores any commit that adds/removes more than 10,000 lines because I assume that this is a code import of some sort, feel free to modify the logic for your needs. You can put the below into a file called gitstats-simple.rb and then run
#!/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")
I've written a small shell script that calculates merge statistics (useful when dealing with a feature-branch-based workflow). Here's an example output on a small repository:
[$]> 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
################################################################
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
################################################################
#!/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")