Add cheap local clone '-s' flag to git-clone-script
Using the $GIT_OBJECT_DIRECTORY/info/alternates mechanism, create a new repository that borrows objects from the original repository when --shared flag is given in addition to --local. It is worth pointing out that the "cloned" repository depends on the original repository, so this should be used only when you can reasonably trust that the original repository would not disappear without your knowing. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
# Clone a repository into a different directory that does not yet exist.
|
# Clone a repository into a different directory that does not yet exist.
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo >&2 "* git clone [-l] [-q] [-u <upload-pack>] <repo> <dir>"
|
echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] <repo> <dir>"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,11 +16,14 @@ get_repo_base() {
|
|||||||
|
|
||||||
quiet=
|
quiet=
|
||||||
use_local=no
|
use_local=no
|
||||||
|
local_shared=no
|
||||||
upload_pack=
|
upload_pack=
|
||||||
while
|
while
|
||||||
case "$#,$1" in
|
case "$#,$1" in
|
||||||
0,*) break ;;
|
0,*) break ;;
|
||||||
*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
|
*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
|
||||||
|
*,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared)
|
||||||
|
local_shared=yes ;;
|
||||||
*,-q|*,--quiet) quiet=-q ;;
|
*,-q|*,--quiet) quiet=-q ;;
|
||||||
1,-u|1,--upload-pack) usage ;;
|
1,-u|1,--upload-pack) usage ;;
|
||||||
*,-u|*,--upload-pack)
|
*,-u|*,--upload-pack)
|
||||||
@ -57,6 +60,8 @@ yes,yes)
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "$local_shared" in
|
||||||
|
no)
|
||||||
# See if we can hardlink and drop "l" if not.
|
# See if we can hardlink and drop "l" if not.
|
||||||
sample_file=$(cd "$repo" && \
|
sample_file=$(cd "$repo" && \
|
||||||
find objects -type f -print | sed -e 1q)
|
find objects -type f -print | sed -e 1q)
|
||||||
@ -73,6 +78,12 @@ yes,yes)
|
|||||||
cd "$repo" &&
|
cd "$repo" &&
|
||||||
find objects -type f -print |
|
find objects -type f -print |
|
||||||
cpio -puamd$l "$D/.git/" || exit 1
|
cpio -puamd$l "$D/.git/" || exit 1
|
||||||
|
;;
|
||||||
|
yes)
|
||||||
|
mkdir -p "$D/.git/objects/info"
|
||||||
|
echo "$repo/objects" >"$D/.git/objects/info/alternates"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Make a duplicate of refs and HEAD pointer
|
# Make a duplicate of refs and HEAD pointer
|
||||||
HEAD=
|
HEAD=
|
||||||
|
Reference in New Issue
Block a user