subcmds/sync: Disable autoDetach for git gc.

gc.autoDetach is enabled by default which makes 'git gc --auto' return
immediately and run in background. This can lead to a pile up of
operations all using large amounts of memory at the same time. To avoid
this set gc.autoDetach to false so that the garbage collect task waits
for instances to finish before spawning more.

Test: repo sync -j # and check the number of 'git gc' processes
Change-Id: Ic0815156ba3db03972968f33f6f9f51e4928f23b
Tested-by: Allen Webb <>
Reviewed-by: Mike Frysinger <>
diff --git a/subcmds/ b/subcmds/
index 3211cbb..83d6ca1 100644
--- a/subcmds/
+++ b/subcmds/
@@ -622,6 +622,7 @@
                 % (project.relpath,),
           project.config.SetString('gc.pruneExpire', 'never')
+      project.config.SetString('gc.autoDetach', 'false')
       gc_gitdirs[project.gitdir] = project.bare_git
     pm.update(inc=len(projects) - len(gc_gitdirs), msg='warming up')