I often recommend people to read "Git Internals".
If you know how git works internally, it's much easier to understand how it works and the reasons behind it.
"Internals" is a poor choice of term. "Data structure" is a better term.
Git is "plumbing and porcelain". The plumbing is the core of git. Porcelain are shortcuts.
In general, Torvalds projects (Linux, Git) aren't big on abstractions that maximize simplicity-of-use, they focus on doing complex things correctly and quickly. Adding abstraction makes it hard to get details correct and run quickly.
http://tom.preston-werner.com/2009/05/19/the-git-parable.htm...