this fall I worked with the core Git folks on writing an official data model for Git and it just got merged! I learned a few new things from writing it. https://github.com/git/git/blob/master/Documentation/gitdatamodel.adoc

here are some things I learned while writing this:

1. Commits can have "extra fields", for example a GPG signature

2. I always thought entries in a tree had 4 fields, but there are actually only 3 (file name, file type, and object ID)

3. Git sometimes prints out file types as a bit set (100644), but it's really more like an enum, since there are only 5 file types (regular file, executable file, symlink, directory, and gitlink)

(2/?)

@b0rk what's a gitlink? I never heard of that one before