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

Re: What's cooking in git.git (topics)

From
Junio C Hamano <junkio@cox.net>
Date
Dec 17, 2006, 00:19 UTC
Message-ID
<7v4prv8jcn.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<em1vgj$bc3$1@sea.gmane.org>
Jakub Narebski <jnareb@gmail.com> writes:
Show 23 quoted lines
> Junio C Hamano wrote:
>
>> Things that I feel should be done need to be done to complete
>> v1.5.0 are:
> [...]
>>  - now reflog is enabled by default for user repositories, I
>>    have two worries about its effect, fortunately can be killed
>>    with a single stone.
>> 
>>    * the reflog grows unbounded;
>> 
>>    * revisions recorded in the reflog can be pruned out,
>>      rendering some entries in reflog useless.
>> 
>>    I am thinking about teaching fsck-objects and prune to keep
>>    revisions recorded in the reflog; we would need an end-user
>>    way to prune older reflog entries and I would appreciate
>>    somebody codes it up, but even without it, people can always
>>    use "vi" or "ed" on reflog files ;-).
>
> I'd rather not have prune keep revisions recorded in reflog. Reflog
> keeps also amended commits, and blobs from incrementally staged
> commits.

That is exactly why I would want to protect them from pruning; the current alternative, git-lost-found, is usable but not so nice from the point of view of end users . The user should be able to use show-branch --reflog, or use a different mode of operation in the log family [*1*] to inspect the otherwise lost commits, and as you prune unneeded reflog entries you could prune those objects.

You could certainly arrange things the other way around. As a part of prune, you can prune the reflog entries that refer to commits that were pruned away and no longer available.

HOWEVER, that is very unfriendly to the end users, because they do not have much control in what 'prune' removes. If you want to keep a dozen or so recent states just in case you may have to salvage rewound states (e.g. you may realize your amended commit was faulty), how would you tell 'prune' to keep only those objects from getting pruned?

That's right -- by holding references to them. And that is exactly how making prune to take reflog into account would help the user. If the user has unwanted commits (say, everything that are more than 7 days old, plus this and that commits you rewound an hour ago), they can be pruned away from reflog and prune will take care of the rest.

So doing it in the way I described makes a lot more sense than doing the other way around.

[Footnote]

*1* I have to warn you that this would require quite different code to walk the commits, but certainly a lot simpler than the ancestry traversal. If you are interested in learning the internals, this may be a good project to start with.

Previous: Jakub NarebskiNext: Yann Dirson
Message 3 of 28 in “What's cooking in git.git (topics)”
  1. Junio C HamanoDec 16, 2006
  2. Jakub NarebskiDec 16, 2006
  3. Junio C HamanoDec 17, 2006
  4. Yann DirsonDec 17, 2006
  5. Josef WeidendorferDec 17, 2006
  6. Brian GernhardtDec 17, 2006
  7. Shawn PearceDec 17, 2006
  8. revision: introduce ref@{N..M} syntax.Junio C Hamano, Dec 17, 2006
  9. Linus TorvaldsDec 17, 2006
  10. Junio C HamanoDec 17, 2006
  11. Andy ParkinsDec 17, 2006
  12. Junio C HamanoDec 18, 2006
  13. Andy ParkinsDec 18, 2006
  14. Shawn PearceDec 18, 2006
  15. 1/2 add for_each_reflog_ent() iteratorJunio C Hamano, Dec 18, 2006
  16. 2/2 Protect commits recorded in reflog from pruning.Junio C Hamano, Dec 18, 2006
  17. Shawn PearceDec 18, 2006
  18. Junio C HamanoDec 19, 2006
  19. 1/2 Move in_merge_bases() to commit.cJunio C Hamano, Dec 19, 2006
  20. 2/2 git reflog expireJunio C Hamano, Dec 19, 2006
  21. Shawn PearceDec 19, 2006
  22. Junio C HamanoDec 19, 2006
  23. Shawn PearceDec 19, 2006
  24. Linus TorvaldsDec 19, 2006
  25. Junio C HamanoDec 20, 2006
  26. Linus TorvaldsDec 20, 2006
  27. Shawn PearceDec 19, 2006
  28. Junio C HamanoDec 19, 2006

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.