Analyze how a Git repo grows over time
Python Shell
Latest commit 56ef43e Feb 17, 2017 @ferologics ferologics committed with Add --upgrade for convenience (#31)

travis badge

Some scripts to analyze Git repos. Produces cool looking graphs like this (running it on git itself):


How to run

  1. Run git clone and cd git-of-theseus
  2. Run virtualenv . and then . bin/activate (optional, only if you don't want to install the dependencies as root or in your local pip installation folder)
  3. Run pip install -r requirements.txt to install dependencies
  4. Run python <path to repo> (see python --help for a bunch of config)
  5. Run python cohorts.json which will write to stack_plot.png
  6. Run python survival.json which will write to survival_plot.png (see python --help for some options)

If you want to plot multiple repositories, have to run python separately for each project and store the data in separate directories using the --outdir flag. Then you can run python <foo/survival.json> <bar/survival.json> (optionally with the --exp-fit flag to fit an exponential decay)


AttributeError: Unknown property labels – upgrade matplotlib if you are seeing this. pip install matplotlib --upgrade

Some pics

Survival of a line of code in a set of interesting repos:


This curve is produced by the script and shows the percentage of lines in a commit that are still present after x years. It aggregates it over all commits, no matter what point in time they were made. So for x=0 it includes all commits, whereas for x>0 not all commits are counted (because we would have to look into the future for some of them). That means the total percentage can go up occasionally.

You can also add an exponential fit:


Linux – stack plot:


This curve is produced by the script and shows the total number of lines in a repo broken down into cohorts by the year the code was added.

Node – stack plot:


Rails – stack plot:


Other stuff

Markovtsev Vadim implemented a very similar analysis that claims to be 20%-6x faster than Git of Theseus. It's named Hercules and there's a great blog post about all the complexity going into the analysis of Git history.