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

Re: dangling commits and blobs: is this normal?

From
Nicolas Pitre <nico@cam.org>
Date
Apr 22, 2009, 17:39 UTC
Message-ID
<alpine.LFD.2.00.0904221331450.6741@xanadu.home>
In-Reply-To
<W0cjdA0pSHr_AbT2c-k5hDf7LyNvwkc38qIIhTtJJRwFnGBxaBsEiw@cipher.nrlssc.navy.mil>
On Wed, 22 Apr 2009, Brandon Casey wrote:
Show 25 quoted lines
> Jeff King wrote:
> > On Tue, Apr 21, 2009 at 05:46:16PM -0400, John Dlugosz wrote:
> > 
> >> Immediately after doing a git gc, a git fsck --full reports dangling
> >> objects.  Is this normal?  What does dangling mean, if not those things
> >> that gc finds?
> > 
> > gc will leave dangling loose objects for a set expiration time
> > (defaulting to two weeks). This makes it safe to run even if there are
> > operations in progress that want those dangling objects, but haven't yet
> > added a reference to them (as long as said operation takes less than two
> > weeks).
> > 
> > You can also end up with dangling objects in packs. When that pack is
> > repacked, those objects will be loosened, and then eventually expired
> > under the rule mentioned above. However, I believe gc will not always
> > repack old packs; it will make new packs until you have a lot of packs,
> > and then combine them all (at least that is what "gc --auto" will do; I
> > don't recall whether just "git gc" follows the same rule).
> 
> 'git gc' (without --auto) always creates one new pack.
> 
> I've often wondered whether a plain 'git gc' should adopt the behavior
> of --auto with respect to the number of packs.  If there were few packs,
> then 'git gc' would do an incremental repack, rather than a 'repack -A -d -l'.

Why so? Having fewer packs is always a good thing. Having only one pack is of course the optimal situation. The --auto version doesn't do it in the hope of being lightter and less noticeable by the user. However the user manually invoking gc should be expecting some work is actually happening. If you don't want the whole repo read from one pack just to be written in another pack (say the repo is huge and waiting after the IO is not worth it) then just mark such a pack with a .keep file.

Nicolas
Previous: Brandon CaseyNext: Matthieu Moy
Message 4 of 21 in “dangling commits and blobs: is this normal?”
  1. John DlugoszApr 21, 2009
  2. Jeff KingApr 22, 2009
  3. Brandon CaseyApr 22, 2009
  4. Nicolas PitreApr 22, 2009
  5. Matthieu MoyApr 22, 2009
  6. Jeff KingApr 22, 2009
  7. Brandon CaseyApr 22, 2009
  8. Jeff KingApr 22, 2009
  9. Nicolas PitreApr 22, 2009
  10. Matthieu MoyApr 23, 2009
  11. Nicolas PitreApr 22, 2009
  12. Brandon CaseyApr 22, 2009
  13. Nicolas PitreApr 22, 2009
  14. Jeff KingApr 22, 2009
  15. Nicolas PitreApr 22, 2009
  16. Geert BoschApr 23, 2009
  17. Shawn O. PearceApr 23, 2009
  18. Geert BoschApr 23, 2009
  19. Matthias AndreeApr 23, 2009
  20. Nicolas PitreApr 23, 2009
  21. John DlugoszApr 22, 2009

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.