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

Re: gc and repack ignore .git/*HEAD when checking reachability

From
Josh Triplett <josh@joshtriplett.org>
Date
Jul 8, 2016, 06:44 UTC
Message-ID
<20160708064448.GA18043@x>
In-Reply-To
<xmqq1t34oiit.fsf@gitster.mtv.corp.google.com>
On Thu, Jul 07, 2016 at 09:34:02PM -0700, Junio C Hamano wrote:
Show 7 quoted lines
> Josh Triplett <josh@joshtriplett.org> writes:
> > This could result in data loss, if a user expected that having an object
> > referenced from those places would protect it from pruning.
> 
> Yeah, luckily, nobody expects such.  I do not think any of our
> document says nothing other than HEAD like CHERRY_PICK_HEAD is
> reachability anchoring point; they are designed to be transient.

I can imagine at least one scenario that would result in data loss here: git pull a URL (not referenced via any ref other than FETCH_HEAD/MERGE_HEAD), get a merge conflict, get halfway through resolving it, set that repository aside for a while, do something that triggers a gc, then attempt to finish and commit.

Unlikely, but not impossible. Same reason the reachability logic looks at the index.

(I originally encountered this because I intended to add another HEAD-like ref in .git, so I started investigating the logic around such HEADs.)

Show 5 quoted lines
> Because they are designed to be transient, I do not think there is
> any downside (other than the initial start-up cost) to including
> them in reachability computation.  Because they are meant to be
> transient, the objects anchored by them would be reachable from
> other anchoring points anyway.

That sounds reasonable. And if they *do* end up taking any time to traverse, it's because they weren't reachable from other anchoring points, so taking the extra time to traverse them seems fine.

- Josh Triplett
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 27 in “gc and repack ignore .git/*HEAD when checking reachability”
  1. Josh TriplettJul 8, 2016
  2. Junio C HamanoJul 8, 2016
  3. Josh TriplettJul 8, 2016
  4. Junio C HamanoJul 8, 2016
  5. Theodore Ts'oJul 8, 2016
  6. Junio C HamanoJul 8, 2016
  7. Theodore Ts'oJul 8, 2016
  8. Josh TriplettJul 9, 2016
  9. Josh TriplettJul 8, 2016
  10. Johannes SchindelinJul 9, 2016
  11. Josh TriplettJul 9, 2016
  12. Duy NguyenJul 9, 2016
  13. Johannes SchindelinJul 10, 2016
  14. Duy NguyenJul 10, 2016
  15. Johannes SchindelinJul 10, 2016
  16. Duy NguyenJul 10, 2016
  17. Johannes SchindelinJul 11, 2016
  18. Junio C HamanoJul 11, 2016
  19. Johannes SchindelinJul 12, 2016
  20. Jeff KingJul 12, 2016
  21. Duy NguyenJul 12, 2016
  22. Jeff KingJul 12, 2016
  23. Duy NguyenJul 12, 2016
  24. Johannes SchindelinJul 13, 2016
  25. Duy NguyenJul 13, 2016
  26. Johannes SchindelinJul 13, 2016
  27. Duy NguyenJul 15, 2016

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.