From: Jeff King Date: Mon, 24 Mar 2014 22:54:34 GMT Subject: Re: Git push race condition? Message-ID: <20140324225434.GB17080@sigill.intra.peff.net> In-Reply-To: On Mon, Mar 24, 2014 at 03:18:14PM -0400, Scott Sandler wrote: > I've noticed that a few times in the past several weeks, we've had > events where pushes have been lost when two people pushed at just > about the same time. The scenario is that two users both have commits > based on commit A, call them B and B'. The user with commit B pushes > at about the same time as the user who pushes B'. Both pushes are > determined to be fast-forwards and both succeed, but B' overwrites B > and B is no longer on origin/master. The server does have B in its > .git directory but the commit isn't on any branch. What version of git are you running on the server? Is it possible that there is a simultaneous process running `git pack-refs` (e.g., a `git gc` run by a cron job or similar)? There were some race conditions fixed last year wherein git could see stale values of refs, but I do not think they could impact writing to a ref like this. When we take the lock on the ref, we always go straight to the filesystem, so the value we see is up-to-date. -Peff