git-fame
git-fame is a command-line tool that helps you summarize and pretty-print collaborators in a git repository based on contributions.
Example output
Statistics generated from this git repository using git fame .
Statistics based on master
Active files: 21
Active lines: 967
Total commits: 109
Note: Files matching MIME type image, binary has been ignored
+----------------+-----+---------+-------+---------------------+
| name | loc | commits | files | distribution (%) |
+----------------+-----+---------+-------+---------------------+
| Linus Oleander | 914 | 106 | 21 | 94.5 / 97.2 / 100.0 |
| f1yegor | 47 | 2 | 7 | 4.9 / 1.8 / 33.3 |
| David Selassie | 6 | 1 | 2 | 0.6 / 0.9 / 9.5 |
+----------------+-----+---------+-------+---------------------+
Installation
[sudo] gem install git_fame
Usage
Command-line
From a git repository run git fame .
Options
-
git fame --by-typeGroup line counts by file extension (i.e. .rb, .erb, .yml). See the by type section below. -
git fame --exclude=path1/*,path2/*Comma separated, glob file path to exclude. -
git fame --include=path1/*,path2/*Comma separated, glob file path to include. -
git fame --sort=locOrder table byloc. Available options are:loc,filesandcommits. Default isloc. -
git fame --hide-progressbarHide progressbar. -
git fame --whitespaceIgnore whitespace changes when blaming files. More about git blame and whitespace. -
git fame --repository=/path/to/repoGit repository to be used. Default is the current folder. -
git fame --branch=masterBranch to run on. Default is whatHEADpoints to. -
git fame --format=outputOutput format. Default ispretty. Additional:csv. -
git fame --after=2010-01-01Only use commits after this date. Format: yyyy-mm-dd. Note that the given date is included. -
git fame --before=2016-02-01Only use commits before this date. Format: yyyy-mm-dd. Note that the given date is included. -
git fame --verbosePrint shell commands used bygit-fame. -
git fame --everythingImages and binaries are ignored by default. Include them as well. -
git fame --timeoutSet timeout in seconds for each git command.
By type
--by-type adds extra columns file types.
+----------------+-----+---------+-------+---------------------+---------+-----+----+---------+-----+
| name | loc | commits | files | distribution (%) | unknown | yml | md | gemspec | rb |
+----------------+-----+---------+-------+---------------------+---------+-----+----+---------+-----+
| Linus Oleander | 914 | 106 | 21 | 94.5 / 97.2 / 100.0 | 32 | 5 | 61 | 23 | 257 |
| f1yegor | 47 | 2 | 7 | 4.9 / 1.8 / 33.3 | 3 | 5 | 6 | 1 | 10 |
| David Selassie | 6 | 1 | 2 | 0.6 / 0.9 / 9.5 | 2 | 0 | 3 | 0 | 0 |
+----------------+-----+---------+-------+---------------------+---------+-----+----+---------+-----+
Programmatically
Want to work with the data before using it? Here's how.
Constructor arguments
options is a hash with most of the arguments passed to the binary defined above.
Take a look at the bin/git-fame file for more information.
repository = GitFame::Base.new(options)Print table
repository.pretty_puts outputs the statistics as an ascii table.
Print csv table to console
repository.csv_puts outputs the statistics as csv.
Statistics
GitFame
-
repository.loc(Fixnum) Total number of lines. -
repository.commits(Fixnum) Total number of commits. -
repository.files(Fixnum) Total number of files. -
repository.authors(Array< Author >) All authors.
Author
author = repository.authors.first
- Formated
-
author.loc(String) Number of lines. -
author.commits(String) Number of commits. -
author.files(String) Number of files changed.
-
- Non formated
-
author.distribution(String) Distribution (in %) between users (loc/commits/files) -
author.raw_loc(Fixnum) Number of lines. -
author.raw_commits(Fixnum) Number of commits. -
author.raw_files(Fixnum) Number of files changed. -
author.file_type_counts(Array) File types (k) and loc (v)
-
Testing
- Download fixtures (
spec/fixtures) usinggit submodule update --init. - Run rspec using
bundle exec rspec.
Note that puts has been disabled to avoid unnecessary output during testing.
Visit spec/spec_helper.rb to enable it again.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Added some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
Requirements
GitFame should work on all Unix based operating system with Git installed.
License
GitFame is released under the MIT license.