git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: repository corruption when pushing commits to a repository running 'git gc --prune='

From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Date
Oct 14, 2015, 14:38 UTC
Message-ID
<vpq4mhtbjma.fsf@grenoble-inp.fr>
In-Reply-To
<561E5C5B.3090207@alcatel-lucent.com>
Jan Smets <jan.smets@alcatel-lucent.com> writes:
Show 8 quoted lines
> Hi
>
> I've recently expired my reflog to prune loose objects. On a live,
> bare, repository I ran 'git gc --prune=now'
>
> All clients ended up having problems, they would report:
>  error: refs/heads/master does not point to a valid object!
> Running 'git log' on the bare repo gave : fatal: bad object HEAD
[...]
> fatal: bad object 22f0351258fa0bb4cd28984b6473510957fbce69
> fatal: bad object 22f0351258fa0bb4cd28984b6473510957fbce69
> To /tmp/test/bare
>  ! [remote rejected] master -> master (missing necessary objects)

I think this is the expected behavior. push will create new objects that are not referenced until the ref is updated (at the very end). prune can run concurrently since creating and deleting objects is done in a lockless way (only the ref update needs a lock).

Still, this is not the *documented* behavior, and an easy way to corrupt a repo should be very explicitly documented as very dangerous, and the precautions to take when using it should be explained clearly.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Previous: Jan SmetsNext: Junio C Hamano
Message 2 of 10 in “repository corruption when pushing commits to a repository running 'git gc --prune='”
  1. Jan SmetsOct 14, 2015
  2. Matthieu MoyOct 14, 2015
  3. Junio C HamanoOct 14, 2015
  4. Matthieu MoyOct 14, 2015
  5. Junio C HamanoOct 14, 2015
  6. Matthieu MoyOct 14, 2015
  7. Junio C HamanoOct 14, 2015
  8. Matthieu MoyOct 14, 2015
  9. Junio C HamanoOct 14, 2015
  10. Matthieu MoyOct 14, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.