According to the "Git Internals - Git Objects" chapter of the "Pro Git" book (2nd ed.) each entry in a tree object has a mode.
a mode of 100644 [...] means it’s a normal file. Other options are 100755, which means it’s an executable file; and 120000, which specifies a symbolic link. The mode is taken from normal UNIX modes but is much less flexible — these three modes are the only ones that are valid for files (blobs) in Git (although other modes are used for directories and submodules).
What are the valid modes for directories (=trees?) and submodules (=commits?), and what does each of them mean?