unset CDPATH
usage() {
- echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] [-n] <repo> [<dir>]"
+ echo >&2 "Usage: $0 [-l [-s]] [-q] [-u <upload-pack>] [-o <name>] [-n] <repo> [<dir>]"
exit 1
}
cd "$2" &&
clone_tmp='.git/clone-tmp' &&
mkdir -p "$clone_tmp" || exit 1
- http_fetch "$1/info/refs" "$clone_tmp/refs" &&
- http_fetch "$1/objects/info/packs" "$clone_tmp/packs" || {
+ http_fetch "$1/info/refs" "$clone_tmp/refs" || {
echo >&2 "Cannot get remote repository information.
Perhaps git-update-server-info needs to be run there?"
exit 1;
}
- while read type name
- do
- case "$type" in
- P) ;;
- *) continue ;;
- esac &&
-
- idx=`expr "$name" : '\(.*\)\.pack'`.idx
- http_fetch "$1/objects/pack/$name" ".git/objects/pack/$name" &&
- http_fetch "$1/objects/pack/$idx" ".git/objects/pack/$idx" &&
- git-verify-pack ".git/objects/pack/$idx" || exit 1
- done <"$clone_tmp/packs"
-
while read sha1 refname
do
name=`expr "$refname" : 'refs/\(.*\)'` &&
local_shared=no
no_checkout=
upload_pack=
+origin=origin
while
case "$#,$1" in
0,*) break ;;
*,-n) no_checkout=yes ;;
*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
*,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared)
- local_shared=yes ;;
+ local_shared=yes; use_local=yes ;;
*,-q|*,--quiet) quiet=-q ;;
+ 1,-o) usage;;
+ *,-o)
+ git-check-ref-format "$2" || {
+ echo >&2 "'$2' is not suitable for a branch name"
+ exit 1
+ }
+ origin="$2"; shift
+ ;;
1,-u|1,--upload-pack) usage ;;
*,-u|*,--upload-pack)
shift
cd "$D" && case "$upload_pack" in
'') git-clone-pack $quiet "$repo" ;;
*) git-clone-pack $quiet "$upload_pack" "$repo" ;;
- esac
+ esac || {
+ echo >&2 "clone-pack from '$repo' failed."
+ exit 1
+ }
;;
esac
;;
mkdir -p .git/remotes &&
echo >.git/remotes/origin \
"URL: $repo
-Pull: $head_points_at:origin" &&
- cp ".git/refs/heads/$head_points_at" .git/refs/heads/origin &&
+Pull: $head_points_at:$origin" &&
+ git-update-ref "refs/heads/$origin" $(git-rev-parse HEAD) &&
find .git/refs/heads -type f -print |
while read ref
do
head=`expr "$ref" : '.git/refs/heads/\(.*\)'` &&
test "$head_points_at" = "$head" ||
- test "origin" = "$head" ||
+ test "$origin" = "$head" ||
echo "Pull: ${head}:${head}"
done >>.git/remotes/origin
esac