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 The way Git displays octal file modes to the user is so unfortunate :( It gives you the false impression that files in a repo *could* have unusual permissions/types, or that perhaps the umask on a commiter's machine might affect the permissions of newly committed files, whereas in reality Git enforces "standard" file modes.
(To be clear, I think it's good that Git can't store any fancy permissions/types - I just wish it would communicate that to the user...)