Using --objects-edge-aggressive is important for shallow repos, as it can result in a much smaller pack (in some cases, 10% of the size). However, it performs poorly on large non-shallow repositories with many refs. Since shallow repositories are less likely to have many refs (due to having less history), the smaller pack size is advantageous there. Adjust pack-objects to use --objects-edge-aggressive only for shallow repositories. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> --- Documentation/rev-list-options.txt | 3 ++- builtin/pack-objects.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt index 8cb6f92..2984f40 100644 --- a/Documentation/rev-list-options.txt +++ b/Documentation/rev-list-options.txt @@ -659,7 +659,8 @@ These options are mostly targeted for packing of Git repositories. --objects-edge-aggressive:: Similar to `--objects-edge`, but it tries harder to find excluded - commits at the cost of increased time. + commits at the cost of increased time. This is used instead of + `--objects-edge` to build ``thin'' packs for shallow repositories. --unpacked:: Only useful with `--objects`; print the object IDs that are not diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 3f9f5c7..f3ba861 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2711,7 +2711,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) argv_array_push(&rp, "pack-objects"); if (thin) { use_internal_rev_list = 1; - argv_array_push(&rp, "--objects-edge"); + argv_array_push(&rp, is_repository_shallow() + ? "--objects-edge-aggressive" + : "--objects-edge"); } else argv_array_push(&rp, "--objects"); -- 2.2.1.209.g41e5f3a -- 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