Nicolas Pitre <nico@xxxxxxx> writes: > In which case, it is git-gc that needs to get a bit smarter. Maybe > something like this: I agree git-gc should be tuned to "one size fits all well enough" default, rather than getting more complicated parameters to fine tune its behaviour to satisfy power users. > @@ -65,7 +65,20 @@ int cmd_gc(int argc, const char **argv, const char *prefix) > if (run_command_v_opt(argv_reflog, RUN_GIT_CMD)) > return error(FAILED_RUN, argv_reflog[0]); > > - if (run_command_v_opt(argv_repack, RUN_GIT_CMD)) > + if (num_loose_objects() > 0) { > + do_repack = 1; > + } else { > + struct packed_git *p; > + unsigned long num_pack = 0; > + if (!packed_git) > + prepare_packed_git(); > + for (p = packed_git; p; p = p->next) > + if (p->pack_local) > + num_pack++; > + if (num_pack > 1) > + do_repack = 1; > + } > + if (do_repack && run_command_v_opt(argv_repack, RUN_GIT_CMD)) > return error(FAILED_RUN, argv_repack[0]); > > if (prune && run_command_v_opt(argv_prune, RUN_GIT_CMD)) Is this even correct? When your repository is fully packed, if you decided to discard one of your topic branches with "git branch -D", what does this code do? We see no loose objects, we see only one pack, so the unreachable objects are left in the pack? - 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