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?

  • Bazaar and $Id$
  • Converting bazaar repo to git on linux
  • How to make Eclipse recognise a Git source tree that was a Bazaar source tree
  • How to migrate from a complicated subversion repository to a distributed version control system?
  • Does git have an equivalent for the bazaar automv plugin?
  • What are the relative strengths and weaknesses of Git, Mercurial, and Bazaar?
  • Gitlab upgrade error init.d directory or file issue
  • Syncing sftp file system with version control
  • What does git add -n --ignore-missing actually do?
  • How do i update my code base in git without having to delete, stash or checkin my current changes?
  • How do i clone my filesystem on the dyno i'm using?
  • Eclipse EGit Rebase w/merge
  • 7 Solutions collect form web for “How many people were involved in a project? Based on Revision Control System”

    git

    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
          40
    

    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:

    https://launchpad.net/bzr-stats/

    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.