diff --git a/git-clone-script b/git-clone-script
index 60dc2a9d88..909ccc5301 100755
--- 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() {
-	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
 }
 
@@ -16,11 +16,14 @@ get_repo_base() {
 
 quiet=
 use_local=no
+local_shared=no
 upload_pack=
 while
 	case "$#,$1" in
 	0,*) break ;;
 	*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
+        *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) 
+          local_shared=yes ;;
 	*,-q|*,--quiet) quiet=-q ;;
 	1,-u|1,--upload-pack) usage ;;
 	*,-u|*,--upload-pack)
@@ -57,22 +60,30 @@ yes,yes)
 		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=