Hello, According to my understanding, git has only 3 kinds of objects: (excluding the packed version) - the blobs - the trees - the commits Today to parse all objects of the same type, it is necessary to parse all the objects and test them one by one. It should be so simple to organize objects in .git/objects/blobs .git/objects/trees .git/object/commits May be due to my limited knowledge of git, I don't see any advantage to put everything together. By splitting the objects directory, the gain in performance could be important, the scripts simplified, the representation more clear. To be backward compatible, we can imagine a get-object() function that parses .git/objects/blobs .git/objects/trees .git/object/commits and, when not found .git/objects A get-tree() function that first parses git/objects/trees and when not found .git/objects idem for getblob() and getcommit() Is there a reason that I don't understand behind the decision to put everything together ? Best regards, Arnaud Bertrand