The origin of gitpulse is a weekend I spent reading git's object model instead of building the tool I had planned. The plan was a simple commit counter; the weekend produced a different understanding. A repository is not a list of commits — it is a content-addressed store, and the history is a graph over that store. Once you see it that way, the questions change. Who changed this file is a graph walk. Where is the churn concentrating is a histogram over the walk. When does the team actually work is a distribution over the timestamps. Each of those is a different instrument, and git log is only one of them — the one that answers the graph-walk question in chronological order, which is the order humans read, not the order the information is organized.
The tool that came out of the weekend is the one that answers the other questions: the histogram, the distribution, the shape. This article is the weekend, in the order the understanding arrived, and the design decisions that followed from each part of it. The object model is the part you can keep even if you never use the tool — the loose objects, the packfiles, the refs, the way the history is a DAG and not a list — because the model is the lens, and the lens is what made the tool possible in the first place. The weekend was two days of reading; the tool is the reading, compiled. The internals are the article's backbone, and the tool is the point, but the backbone is the part that survives the tool, the way the object model survives every tool built on top of it.






