projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Add some simple howtos, culled from the mailing list.
[git.git]
/
git-clone-script
diff --git
a/git-clone-script
b/git-clone-script
index
88e2c1f
..
909ccc5
100755
(executable)
--- a/
git-clone-script
+++ b/
git-clone-script
@@
-6,7
+6,7
@@
# Clone a repository into a different directory that does not yet exist.
usage() {
# Clone a repository into a different directory that does not yet exist.
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,16
+16,19
@@
get_repo_base() {
quiet=
use_local=no
quiet=
use_local=no
+local_shared=no
upload_pack=
while
case "$#,$1" in
0,*) break ;;
upload_pack=
while
case "$#,$1" in
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|
*
,--upload-pack) usage ;;
+ 1,-u|
1
,--upload-pack) usage ;;
*,-u|*,--upload-pack)
shift
*,-u|*,--upload-pack)
shift
- upload_pack="--exec=$
2
" ;;
+ upload_pack="--exec=$
1
" ;;
*,-*) usage ;;
*) break ;;
esac
*,-*) usage ;;
*) break ;;
esac
@@
-57,22
+60,30
@@
yes,yes)
exit 1
}
exit 1
}
- # See if we can hardlink and drop "l" if not.
- sample_file=$(cd "$repo" && \
- find objects -type f -print | sed -e 1q)
+ case "$local_shared" in
+ no)
+ # See if we can hardlink and drop "l" if not.
+ sample_file=$(cd "$repo" && \
+ find objects -type f -print | sed -e 1q)
- # objects directory should not be empty since we are cloning!
- test -f "$repo/$sample_file" || exit
+
# objects directory should not be empty since we are cloning!
+
test -f "$repo/$sample_file" || exit
- l=
- if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null
- then
- l=l
- fi &&
- rm -f "$D/.git/objects/sample" &&
- cd "$repo" &&
- find objects -type f -print |
- cpio -puamd$l "$D/.git/" || exit 1
+ l=
+ if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null
+ then
+ l=l
+ fi &&
+ rm -f "$D/.git/objects/sample" &&
+ cd "$repo" &&
+ find objects -type f -print |
+ 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
HEAD=
# Make a duplicate of refs and HEAD pointer
HEAD=
@@
-81,23
+92,37
@@
yes,yes)
HEAD=HEAD
fi
tar Ccf "$repo" - refs $HEAD | tar Cxf "$D/.git" - || exit 1
HEAD=HEAD
fi
tar Ccf "$repo" - refs $HEAD | tar Cxf "$D/.git" - || exit 1
- exit 0
- ;;
-esac
-
-case "$repo" in
-rsync://*)
- rsync $quiet -avz --ignore-existing "$repo/objects/" "$D/.git/objects/" &&
- rsync $quiet -avz --ignore-existing "$repo/refs/" "$D/.git/refs/"
- ;;
-http://*)
- echo "Somebody should add http fetch" >&2
- exit 1
;;
*)
;;
*)
- cd "$D" && case "$upload_pack" in
- '') git-clone-pack $quiet "$repo" ;;
- *) git-clone-pack $quiet "$upload_pack" "$repo" ;;
+ case "$repo" in
+ rsync://*)
+ rsync $quiet -avz --ignore-existing "$repo/objects/" "$D/.git/objects/" &&
+ rsync $quiet -avz --ignore-existing "$repo/refs/" "$D/.git/refs/"
+ ;;
+ http://*)
+ git-clone-dumb-http "$repo" "$D"
+ case "$?" in
+ 2)
+ echo "Somebody should define smarter http server protocol" >&2
+ exit 1
+ ;;
+ 0)
+ ;;
+ *)
+ exit
+ esac
+ ;;
+ *)
+ cd "$D" && case "$upload_pack" in
+ '') git-clone-pack $quiet "$repo" ;;
+ *) git-clone-pack $quiet "$upload_pack" "$repo" ;;
+ esac
+ ;;
esac
;;
esac
esac
;;
esac
+
+# Update origin.
+mkdir -p "$D/.git/branches/" &&
+rm -f "$D/.git/branches/origin" &&
+echo "$repo" >"$D/.git/branches/origin"