Thread (7 messages) flat view 7 messages, 4 authors, 2016-06-15

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/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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help