Re: Retrospectively add alternates to a repository?
From: Steve Folly <hidden>
Date: 2016-06-15 22:48:22
Jeff King <peff <at> peff.net> writes:
On Sat, Feb 27, 2010 at 10:37:25AM +0800, Tay Ray Chuan wrote:quoted
yes, just make sure the objects/info/alternates file points to the location of that cloned repo's object directory; for example: $ echo /path/to/cloned/repo/.git/objects > .git/objects/info/alternatesYou will probably want to then get rid of anything in the child that is now available in the alternates repository. I would have thought "git repack -adl" works, but I think there is something a little funny in the logic. It reports "nothing new to pack", but does not delete the loose objects. But packing first then worked: $ git clone large-parent child $ echo $PWD/large-parent/.git/objects >child/.git/objects/info/alternates $ cd child $ du -sh .git/objects 51M .git/objects $ git repack -adl && du -sh .git/objects Nothing new to pack. 51M .git/objects $ git repack -ad && du -sh .git/objects Counting objects: 3, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), done. Total 3 (delta 0), reused 0 (delta 0) 51M .git/objects $ git repack -adl && du -sh .git/objects Nothing new to pack. 20K .git/objects -Peff
Excellent, this is exactly what I need. Thanks very much Tay
and Jeff.
I now have a plan to write a script to attach and
detach repositories to and from local mirrors on demand:
attach =
echo "/path/to/mirror" > .git/objects/info/alternates &&
git repack -adl &&
git repack -ad &&
git repack -adl
detach =
git repack -a &&
rm .git/objects/info/alternates
Cheers,
Steve