Re: is there a "symlink" option for cloning a repo in a separate filesystem?

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

 



"Robert P. J. Day" <rpjday@xxxxxxxxxxxxxx> writes:

>   reading "man git-clone", and i understand the mechanics of the local
> protocol, so that if i run:
>
>   $ git clone /path/to/repo
>
> then "files under .git/objects/ directory are hardlinked to save space
> when possible."
>
>   but if the repo is in a separate filesystem, or on an NFS mount,
> hardlinks clearly won't work, so what happens then? does it default
> all the way back to regular copies? is there no intermediate symlink
> feature that would still work? (i suspect i am far from the first
> person to wonder this.)

After a normal "clone", you want the new repository as independently
usable even after the original repacks, rewinds some of its
branches, or even goes away completely.  

Imagine that we used symbolic links to point at loose object files
in the original and then the original repacked all of them into a
new packfile.  The symbolic links in the new repository will keep
pointing at their now-missing counterparts, and your new repository
is corrupt, because it does not know about the new packfile that is
meant to replace them in the original repository.

The sensible choices available to us are only the two: hardlink or
copy.  Using symbolic links does not make any sense in the context
of "clone".  Hardlinks make sense only because object files are only
created or removed but never modified in-place, and removal in the
original repository does not affect the "copy" you have in the new
repository.

As others mentioned, use "--reference", perhaps like

	git clone --reference /path/to/repo --no-local /path/to/repo

is one way to avoid having to make copies.  It first declares that
your new repository will keep depending on the project it borrowed
from forever with "--reference"; with that declaration, your new
repository does not have to store copies of objects that the
repository pointed at with --reference has, so the clone operation
itself, which wants to copy the objects in the source repository,
does not have to copy any.



[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