X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-clone.sh;h=bfb8fd628536c5bbb08c9d07c7e93455cd253650;hb=1f961c196cbb475e612a4fb082b33efde71e7a03;hp=c0762922751a8f906116e74fd8a2c2ce19194b2b;hpb=215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7;p=git.git diff --git a/git-clone.sh b/git-clone.sh index c0762922..bfb8fd62 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -5,6 +5,9 @@ # # Clone a repository into a different directory that does not yet exist. +# See git-sh-setup why. +unset CDPATH + usage() { echo >&2 "* git clone [-l [-s]] [-q] [-u ] " exit 1 @@ -141,8 +144,32 @@ yes,yes) *) case "$repo" in rsync://*) - rsync $quiet -avz --ignore-existing "$repo/objects/" "$D/.git/objects/" && - rsync $quiet -avz --ignore-existing "$repo/refs/" "$D/.git/refs/" + rsync $quiet -av --ignore-existing \ + --exclude info "$repo/objects/" "$D/.git/objects/" && + rsync $quiet -av --ignore-existing \ + --exclude info "$repo/refs/" "$D/.git/refs/" || exit + + # Look at objects/info/alternates for rsync -- http will + # support it natively and git native ones will do it on the + # remote end. Not having that file is not a crime. + rsync -q "$repo/objects/info/alternates" "$D/.git/TMP_ALT" || + rm -f "$D/.git/TMP_ALT" + if test -f "$D/.git/TMP_ALT" + then + ( cd $D && + . git-parse-remote && + resolve_alternates "$repo" <"./.git/TMP_ALT" ) | + while read alt + do + case "$alt" in 'bad alternate: '*) die "$alt";; esac + case "$quiet" in + '') echo >&2 "Getting alternate: $alt" ;; + esac + rsync $quiet -av --ignore-existing \ + --exclude info "$alt" "$D/.git/objects" || exit + done + rm -f "$D/.git/TMP_ALT" + fi ;; http://*) clone_dumb_http "$repo" "$D"