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

Re: git-gc doesn't clean up leftover objects after git-filter-branch unless you clone first

From
Jeff King <peff@peff.net>
Date
Apr 24, 2008, 01:28 UTC
Message-ID
<20080424012836.GA30812@sigill.intra.peff.net>
In-Reply-To
<20080423221316.GE30057@sigill.intra.peff.net>
On Wed, Apr 23, 2008 at 06:13:16PM -0400, Jeff King wrote:
Show 5 quoted lines
> > - Teach people that leftover cruft is nothing to worry about.
> 
> But it _is_ something to worry about in some particular situations. For
> run-of-the-mill rebasing, sure, ignore it. But this question usually
> comes up because the user did something like:

OK, maybe I am wrong. Within a few hours of me posting this, somebody starts a new thread with a toy example wondering why git-gc didn't clean up an --amended commit.

I don't know the best way to teach people about this (short of using a big stick, of course), but maybe something like this would help a little:

-- >8 -- doc/git-gc: add a note about what is collected

It seems to be a FAQ that people try running git-gc, and then get puzzled about why the size of their .git directory didn't change. This note mentions the reasons why things might unexpectedly get kept.

Signed-off-by: Jeff King <peff@peff.net>
---
 Documentation/git-gc.txt |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index d424a4e..9a4b62e 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -104,6 +104,21 @@ The optional configuration variable 'gc.pruneExpire' controls how old
 the unreferenced loose objects have to be before they are pruned.  The
 default is "2 weeks ago".
 
+
+Notes
+-----
+
+git-gc tries very hard to be safe about the garbage it collects. In
+particular, it will keep not only objects referenced by your current set
+of branches and tags, but also objects referenced by the index, remote
+tracking branches, refs saved by linkgit:git-filter-branch[1] in
+refs/original/, or reflogs (which may references commits in branches
+that were later amended or rewound).
+
+If you are expecting some objects to be collected and it isn't, check
+all of those locations and decide whether it makes sense in your case to
+remove those references.
+
 See Also
 --------
 linkgit:git-prune[1]
-- 
1.5.5.1.143.ge2bb9
Previous: Jeff KingNext: Avery Pennarun
Message 5 of 12 in “git-gc doesn't clean up leftover objects after git-filter-branch unless you clone first”
  1. Avery PennarunApr 23, 2008
  2. Junio C HamanoApr 23, 2008
  3. Avery PennarunApr 23, 2008
  4. Jeff KingApr 23, 2008
  5. Jeff KingApr 24, 2008
  6. Avery PennarunApr 24, 2008
  7. Jeff KingApr 24, 2008
  8. Avery PennarunApr 24, 2008
  9. Documentation: point git-prune users to git-gcJeff King, Apr 29, 2008
  10. Junio C HamanoApr 29, 2008
  11. Jeff KingApr 29, 2008
  12. Junio C HamanoApr 30, 2008

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.