Which Git commit stats are easy to pull

Previously I have enjoyed TortoiseSvn's ability to generate simple commit stats for a given SVN repository. I wonder what is available in Git and am particularly interested in :

  • Number of commits per user
  • Number of lines changed per user
  • activity over time (for instance aggregated weekly changes)

Any ideas?


Solution 1:

Actually, git already has a command for this:

git shortlog

in your case, it sounds like you're interested in this form:

git shortlog -sne

See the --help for various options.

You may also be interested in the GitStats project. They have a few examples, including the stats for the Git project. From the GitStat main page:

Here is a list of some statistics generated currently:

  • General statistics: total files, lines, commits, authors.
  • Activity: commits by hour of day, day of week, hour of week, month of year, year and month, and year.
  • Authors: list of authors (name, commits (%), first commit date, last commit date, age), author of month, author of year.
  • Files: file count by date, extensions
  • Lines: Lines of Code by date

Solution 2:

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.

Solution 3:

The best tool so far I identfied is gitinspector. It give the set report per user, per week etc

You can install like below with npm

npm install -g gitinspector

Details to get the links are below

https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector

example commands are

gitinspector -lmrTw
gitinspector --since=1-1-2017

etc

Solution 4:

Thanks to hacker for answering this question. However, I found these modified versions to be better for my particular usage:

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

(using awk as I don't have gawk on my mac, and sorting with most active comitter on top.) It outputs a list like so:

 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

Solution 5:

Here are ways to get stats for a specific branch or two hashs.

key here is the ability to do HASH..HASH

Below I am using the first hash from a branch to the HEAD which is the end of that branch.

Show total commits in a branch

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

Show total commits per author

  • git shortlog FIRST_HASH..HEAD -sne
  • Output
  • 24 Author Name
  • 9 Author Name