Normally git caches the raw commit object contents in "struct commit". This makes it fast to run parse_commit() followed by a pretty-print operation. For commands which don't actually pretty-print the commits, the caching is wasteful (and may use quite a lot of memory if git accesses a large number of commits). For fetching operations like clone, we already disable save_commit_buffer in everything_local(), where we may traverse. But clone also parses commits before it even gets there; it looks at commits reachable from its refs, and from alternate refs. In one real-world case with a large number of tags, this cut about 10MB off of clone's heap usage. Not spectacular, but there's really no downside. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/clone.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/clone.c b/builtin/clone.c index 5ef81927a..3fca45e7e 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -858,6 +858,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) struct refspec *refspec; const char *fetch_pattern; + save_commit_buffer = 0; packet_trace_identity("clone"); argc = parse_options(argc, argv, prefix, builtin_clone_options, builtin_clone_usage, 0); -- 2.11.0.765.g454d2182f