Git is the "stupid content tracker." Much of its design is based around being "stupid"; that is, having a fairly simple (and thus general) internal representation, and relying on tools built around that to do anything fancy. It is also designed only for tracking source code; it's not designed to allow you to track arbitrary directory trees with arbitrary permissions, because that would get you into a whole rats nest of problems that is not relevant to tracking source code (do you store user and group ids? names? hard links? xattrs? resource forks? and so on).
Part of being stupid is just tracking the content of files. It does happen to store a few pieces of metadata that are essential to working on source code in a Unix environment: symlinks and the executable bit. There are enough scripts that people check in, that you want to track the executable bit, because otherwise everyone is going to have to implement that. But besides those two pieces of metadata, Git just keeps track of the contents of files and their names.
If you have use-cases beyond that, you're expected to create your own porcelain, wrap the existing one, or use the extension points that Git provides like hooks and attributes.
If you want richer tracking of permissions and directories, I would recommend using a wrapper like etckeeper.