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

Re: [PATCH] prune: --expire=time

From
Linus Torvalds <torvalds@osdl.org>
Date
Jan 22, 2007, 02:23 UTC
Message-ID
<Pine.LNX.4.64.0701211813410.14248@woody.osdl.org>
In-Reply-To
<7vwt3fx1am.fsf@assigned-by-dhcp.cox.net>
On Sun, 21 Jan 2007, Junio C Hamano wrote:
> 
> This case does not need any locking, as blobs reachable from
> index are considered as "reachable" for the purpose of pruning.

Well, strictly speaking, there's a race there. The new index gets written out _after_ the blob has been created. Also, in many cases, we end up using completely temporary indexes ("git commit filename") that "git prune" doesn't know or understand.

All of which is really nothing new. "git prune" has always been dangerous. You cannot, and must not, run it concurrently with other git operations.

Also, in the absense of undo operations, there is really nothing to ever prune. Of course, the git.git archive itself has effectively taughth people bad habits, since "pu" ends up continually rebasing itself.

However, now that rebasing ends up being visible in the branch reflog, we're back to the "normally nothing to ever prune" situation, and as such, the only object pruning that _should_ take place is basically as part of "git repack -a -d" (which unlike a prune is actually safe, since it only prunes objects that are reachable from a pack).

So to recap: "git prune" simply isn't a safe thing to do. Don't do it without thinking. I'm not at all sure it's a good idea that "git gc" does it for you, since it just encourages mindless pruning that probably shouldn't happen in the first place.

Needing to prune is generally to be taken as a sign of something being wrong.

(And yeah, the grace period makes it "safe". Assuming everybody involved has even half-way reliable clocks. So IN PRACTICE it is all fine, and I doubt you can lose anything except by really doing something insane. If you want to kill your archive, it's easier to do "rm .git/objects/*/*a*" than it is to try to do it with strange "git prune" setups, but still..)

		Linus
Previous: Junio C HamanoNext: Junio C Hamano
Message 20 of 30 in “prune-packed: new option --min-age=N”
  1. prune-packed: new option --min-age=NMatthias Lederhofer, Jan 18, 2007
  2. Shawn O. PearceJan 18, 2007
  3. Matthias LederhoferJan 18, 2007
  4. Shawn O. PearceJan 18, 2007
  5. [RFC] prune: --expire=secondsMatthias Lederhofer, Jan 18, 2007
  6. Junio C HamanoJan 18, 2007
  7. Shawn O. PearceJan 19, 2007
  8. prune: --expire=timeMatthias Lederhofer, Jan 19, 2007
  9. Nicolas PitreJan 19, 2007
  10. Junio C HamanoJan 19, 2007
  11. Matthias LederhoferJan 20, 2007
  12. Junio C HamanoJan 21, 2007
  13. Shawn O. PearceJan 21, 2007
  14. Matthias LederhoferJan 21, 2007
  15. Junio C HamanoJan 21, 2007
  16. Jeff KingJan 21, 2007
  17. Steven GrimmJan 22, 2007
  18. Jeff KingJan 22, 2007
  19. Junio C HamanoJan 22, 2007
  20. Linus TorvaldsJan 22, 2007
  21. Junio C HamanoJan 22, 2007
  22. Linus TorvaldsJan 22, 2007
  23. Junio C HamanoJan 22, 2007
  24. Linus TorvaldsJan 22, 2007
  25. Shawn O. PearceJan 22, 2007
  26. Junio C HamanoJan 22, 2007
  27. Jakub NarebskiJan 22, 2007
  28. v1.5.0.txt: update description of git-gcJeff King, Jan 22, 2007
  29. Junio C HamanoJan 22, 2007
  30. Simon 'corecode' SchubertJan 20, 2007

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.