As you know, repo.or.cz uses alternates in order to reduce the space that the repositories of forked projects require. Recently, it happened that a fork (4msysgit.git) became broken because it was using an object that was pruned away from the repository that it was borrowing from (mingw.git). This happened even though 4msysgit did not use the branch of mingw.git that was rebased and whose objects were pruned. The reason is that a merge in 4msysgit.git resulted in a blob that was also in the rebased branch. To avoid such situations I propose to introduce "attic" packs. They contain objects that are unreachable by the local set of refs. Otherwise they are used like regular packs. git-repack produces "attic" packs like this: - Places objects of the local object store that are unreachable in an "attic" pack. - Copies objects that are reachable but borrowed from an alternate and are only in the alternates' "attic" packs into the local regular pack. git-prune removes "attic" packs. Then the strategy of garbage collection can be arranged in the following way: - Repack by starting at the "most complete" repo and work towards the "most borrowing" ones. During this phase "attic" packs are created. Borrowing repos get a chance to salvage objects before the alternates prune them away. - Prune by starting at the "most borrowing" repo and work towards the "most complete" ones. During this phase the "attic" packs are cleaned up. What do you think? Is this a way for a solution? -- Hannes - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html