From: Steve Folly <hidden> Date: 2016-06-15 22:48:21
Hi,
I have a local mirror of a remote repository (to save time
cloning over a slow network). But before I created the
local mirror I already cloned the remote repo directly.
Is it possible to retrospectively add an alternates spec
to this local repository (the equivalent of doing what
--reference does during the clone)?
Thanks for any help.
Regards,
Steve
From: Tay Ray Chuan <hidden> Date: 2016-06-15 22:48:21
Hi,
On Sat, Feb 27, 2010 at 7:54 AM, Steve Folly [off-list ref] wrote:
I have a local mirror of a remote repository (to save time
cloning over a slow network). But before I created the
local mirror I already cloned the remote repo directly.
Is it possible to retrospectively add an alternates spec
to this local repository (the equivalent of doing what
--reference does during the clone)?
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/alternates
--
Cheers,
Ray Chuan
From: Jeff King <hidden> Date: 2016-06-15 22:48:22
On Sat, Feb 27, 2010 at 10:37:25AM +0800, Tay Ray Chuan wrote:
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/alternates
You 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
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/alternates
You 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
I don't think the first repack is doing anything (I showed it in my
example only to show that it was not actually working).
That's a bug, isn't it? Has anyone taken a look into it?
Yes, it's a bug. I don't think anybody is looking at it. I started to
write a length explanation, but the more I thought about it, the more I
am not actually sure what is going on. So please, if you are interested,
take a look and see if you can come up with a patch.
-Peff