diff --git a/git-clone.sh b/git-clone.sh
index fdd354f2da1..d45618d9afe 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -20,7 +20,7 @@ usage() {
 get_repo_base() {
 	(
 		cd "`/bin/pwd`" &&
-		cd "$1" &&
+		cd "$1" || cd "$1.git" &&
 		{
 			cd .git
 			pwd
diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh
new file mode 100755
index 00000000000..b0933274db4
--- /dev/null
+++ b/t/t5701-clone-local.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+test_description='test local clone'
+. ./test-lib.sh
+
+D=`pwd`
+
+test_expect_success 'preparing origin repository' '
+	: >file && git add . && git commit -m1 &&
+	git clone --bare . a.git &&
+	git clone --bare . x
+'
+
+test_expect_success 'local clone without .git suffix' '
+	cd "$D" &&
+	git clone -l -s a b &&
+	cd b &&
+	git fetch
+'
+
+test_expect_success 'local clone with .git suffix' '
+	cd "$D" &&
+	git clone -l -s a.git c &&
+	cd c &&
+	git fetch
+'
+
+test_expect_success 'local clone from x' '
+	cd "$D" &&
+	git clone -l -s x y &&
+	cd y &&
+	git fetch
+'
+
+test_expect_success 'local clone from x.git that does not exist' '
+	cd "$D" &&
+	if git clone -l -s x.git z
+	then
+		echo "Oops, should have failed"
+		false
+	else
+		echo happy
+	fi
+'
+
+test_done