Re: Fetching everything in another bare repo
- From
Paul Smith <paul@mad-scientist.net>
- Date
- Mar 9, 2023, 13:55 UTC
- Message-ID
- <64282d0f99df59085a18585846d2086a652677e2.camel@mad-scientist.net>
- In-Reply-To
- <ZAl/lQMhaQ54BDXN@coredump.intra.peff.net>
On Thu, 2023-03-09 at 01:41 -0500, Jeff King wrote:
Show 10 quoted lines
> On Wed, Mar 08, 2023 at 05:39:07PM -0500, Paul Smith wrote: > > > I have a tool that wants to preserve every commit and never garbage > > collect (there are references that need to be maintained to older > > commits/branches that have been deleted). This tool keeps its own > > bare clone, and disables all GC and maintenance on it. > > OK. It's not clear to me if this archive repo retains the old > references, or if it simply has a bunch of unreachable objects. > That distinction will matter below.
Sorry; I've been using Git for a long time but am still not totally immersed in the terminology :).
Basically, these bare clones have "gc.pruneExpire=never" set, and have never had any GC operations run so all commits are still present (when you say "unreachable" I assume you mean, not reachable through any reference).
There is a separate database of information containing SHAs for these commits, that is used to find them, but there is nothing in Git itself that references them so they are indeed unreachable as far as Git is concerned.
Show 6 quoted lines
> I think you probably want to treat the objects and references > separately. It's safe to just copy all of the objects and packfiles > from the old clone into the new one. You'll have duplicates, but you > should be able to de-dup and get a single packfile with: > > git repack -ad --keep-unreachable
Oh interesting. I did a quick verification and all of the objects / packfiles in the old clone either don't exist in the new one, or are identical. I'm sure you expected that but I needed to reassure myself I wouldn't be overwriting anything :).
One question: is the objects/info/packs file anything to be concerned about or will git repack (or something) take care of handling it?
> And then you can do any ref updates in the new repository (since it > now has all objects from both).
It's actually possible that I don't care about refs at all. I might only care about objects. I'm not sure, I can check what exists in the old clone.
But if I need them I can deal with them as you suggest (or something similar).
Thanks Jeff!