On Wed, Jul 12, 2017 at 10:30:25PM +0200, Ævar Arnfjörð Bjarmason wrote: > > Is it really "in a row" that's a problem? The second fetch should not > > begin until the first one is done, including until its auto-gc exits. > > And even with background gc, we do the ref-locking operations first, due > > to 62aad1849 (gc --auto: do not lock refs in the background, > > 2014-05-25). > > > >> I happen to run into this on a git.git which has a lot of remotes (most > >> people on-list whose remotes I know about) and fetch them in parallel: > >> > >> $ git config alias.pfetch > >> !parallel 'git fetch {}' ::: $(git remote) > > > > Ah, so it's not in a row. It's parallel. Then yes, you may run into > > problems with the gc locks conflicting with real operations. This isn't > > really unique to fetch. Any simultaneous operation can run into problems > > (e.g., on a busy server repo you may see conflicts between pack-refs and > > regular pushes). > > This is what I thought at first, and I've only encountered the issue in > this parallel mode (mainly because it's tedious to reproduce). But I > think the traces below show that it would happen with "git fetch --all" > & "git remote update" as well, so the parallel invocations didn't > matter. > > I.e. I'd just update my first remote, then git-gc would start in the > background and lock refs for my other remotes, which I'd then fail to > update. No, it should be OK because of the commit I mentioned at the top of the quoted section. Each one runs sequentially. -Peff