Many files in the .git directory are read-only by default because they are, by design, immutable - once written there is never a reason to rewrite them. This is the basis of the concept of content addressability which is the foundation of the architecture of the git repository - all content is addressed by its own sha1 hash. This is especially true of so-called loose objects in the .git/objects directory which once written will never be written again - they will eventually be coalesced into packs and then deleted, but they are never rewritten. Since there is never a valid use case to rewrite them, there is never a reason to leave them with write permissions enabled. Most finalised .pack and .idx objects should usually be in this class we well.