I agree that we could also pack everything in one pack. I just copied the strategy of the DfsGarbageCollector. Here we are splitting our objects into two packs. One with all objects reachable from branches and another one with the rest of the objects reachable from tags, reflog, . In case of gerrit servers there may be quite a lot in the second pack - all the old proposals which never got accepted. I can imagine (but I am not sure) that there is a certain performance benefit if you don't have to deal with packfiles which are huge and contain everything but if there is a packfile which very likely contains all the objects needed for operations like submit, merge.