How many people were involved in a project? Based on Revision Control System

How do you know how many developers were involved in a project using a Revision Control System? A friend of mine found this way to look up the answer in git log:

git log | grep Author: | sort -u | cut –delimiter=” ” -f2 | sort -u | wc -l

Is there a straightforward way in git? How about other Revision Control System like Subversion, Bazaar or Mercurial?

  • Bzr fast-export return bzr: broken pipe
  • Understandability of git, mercurial, bazaar source code bases
  • A DRCS (git, bzr, merc) that has “pending changesets” like perforce?
  • Bazaar and $Id$
  • Git GUI like Bzr Explorer but for Git?
  • Is there a Bazaar equivalent of Git default branching?
  • How to recover lost commits after git submodule update and checkout?
  • Trying to remove files from a super messy repository but they don't seem to be removed
  • Concurrent operations on a Git repo
  • git -permission denied(403)
  • How to ignore obj folder using Git under MS Windows
  • Git merge and keep separate?
  • 7 Solutions collect form web for “How many people were involved in a project? Based on Revision Control System”


    The shortlog command is very useful. This summarizes the typical git-log output.

    $ git shortlog -sn
       119  tsaleh
       113  Joe Ferris
        70  Ryan McGeary
        45  Tammer Saleh
        45  Dan Croak
        19  Matt Jankowski

    Pass to wc to see the number of unique usernames:

    $ git shortlog -sn | wc -l

    For mercurial, there’s an extension to do exactly that: hg churn.

    hg churn sorts by line-changed, if you want changeset count, use hg churn -c.

    For subversion

    svn log -q svn://path/to/repo | cut -f 3 -d " "  | sort -u

    There is stats plugin for Bazaar to get different info about project contributors:

    I’m not aware of a straightforward way for Mercurial either and a good search of all its documentation didn’t revealed anything too. So, here’s a *nix command, similar to the one your friend found, for Mercurial:

    hg log | grep user: | cut -c 14- | sort -u | uniq | wc -l

    BTW, I think there’s an error with the command for git, the second sort -u should surely be replaced by uniq!

    A simpler git version is:

    git log --pretty=tformat:%an | sort -u | wc -l

    or if you care about unique email addresses:

    git log --pretty=tformat:%ae | sort -u | wc -l

    Mercurial has a powerful template language built-in (see hg help templates). So you can get a list of all people in the project without enabling the churn extension:

    hg log --template '{author}\n' | sort -u

    If people have changed their email address (but otherwise kept their name the same), then you can process the author template keyword a bit:

    hg log --template '{author|person}\n' | sort -u

    Then add wc -l as appropriate to the above commands.

    Git Baby is a git and github fan, let's start git clone.