Re: Improve support for 'git config gc.reflogExpire never'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 08, 2019 at 10:27:11AM +0200, Mikko Rantalainen wrote:

> If I configure bare repo with
> 
> git config gc.pruneExpire never
> git config gc.reflogExpire never
> 
> then git will never garbage collect any commit ever stored in the repo.
> This is what I want.
> 
> However, all commits referenced only via reflog are kept as loose
> objects and will not be included in packs. In long run this will cause
> 
> warning: There are too many unreachable loose objects; run 'git prune'
> to remove them.
> 
> and the performance of the repository will slowly decrease.

That's not what's supposed to happen. A normal git-gc (or directly
running the "git repack" it spawns) should consider objects in reflogs
reachable, and pack them as it would an object reachable from a ref.
This has been the case since 63049292e0 (Teach git-repack to preserve
objects referred to by reflog entries., 2006-12-18).

Just to double check: are you sure you have reflogs? They're not enabled
by default in bare repos.

Another thing that may surprise you is that deleting a branch will
delete its reflog (and then the objects are unreachable, and may be
exploded loose).

> If I have understood correctly, git should notice that reflog will keep
> referenced commits forever and include all those commits in packs
> instead of keeping those as loose forever.

Yes, that's what's supposed to happen. If you have a recipe for
reproducing a case where it doesn't, I'd be curious to see it.

> A more generic behavior might be to always compress all loose commits in
> (one?) special pack so the performance would stay good even if
> gc.reflogExpire is very long instead of "never".

You can do "git repack -adk", which will keep all packed objects packed,
and will suck up loose objects into the pack (and delete their loose
counterparts). I don't think there's a convenient way to convince git-gc
to do this when it runs "git repack", though. I think it would be a
reasonable feature for it to have.

-Peff



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux