Skip to content


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation



A few years ago, I saw a repo called MetroGit. This repo is, in fact, a git graph taken from the Paris metro map. Each commit is a station, and when two or more connections meet, it creates a merge.

I was trying to learn Clojure, and I thought: "Why don't I build something based on that idea?!?!" So, that's when metro-clojure was born.

This repo takes a generic metro map as a JSON input, builds a DAG and traverses that graph generating the correct git commands.

Generate git commands

# São Paulo
# Takes the map from res/sp.json and generates
boot generate-git-commands -c sp -f

# New York City
# Takes the map from res/nyc.json and generates
boot generate-git-commands -c nyc -f

# Tokyo (Thanks to
# Takes the map from res/tokyo.json and generates
boot generate-git-commands -c tokyo -f

Viewing the metro graph

# Open graphviz graph
boot view-graph -c sp

Generate the clojurescript files

# Visit http://localhost:3000 to check an animation of the traversal
boot dev

# Optimized js file with the animations
boot prod