Some scripts to analyze Git repos. Produces cool looking graphs like this (running it on git itself):
- Run
git clone https://github.com/erikbern/git-of-theseus
andcd git-of-theseus
- 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) - Run
pip install -r requirements.txt
to install dependencies - Run
python analyze.py <path to repo>
(seepython analyze.py --help
for a bunch of config) - Run
python stack_plot.py cohorts.json
which will write tostack_plot.png
- Run
python survival_plot.py survival.json
which will write tosurvival_plot.png
(seepython survival_plot.py --help
for some options)
If you want to plot multiple repositories, have to run python analyze.py
separately for each project and store the data in separate directories using the --outdir
flag. Then you can run python survival_plot.py <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
Survival of a line of code in a set of interesting repos:
This curve is produced by the survival_plot.py
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 stack_plot.py
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:
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.