From: Lars Schneider <larsxschneider@xxxxxxxxx> "git clone --recursive --depth 1 --single-branch <url>" clones the submodules successfully. However, it does not obey "--depth 1" for submodule cloning. The following workaround does only work if the used submodule pointer is on the default branch. Otherwise "git submodule update" fails with "fatal: reference is not a tree:" and "Unable to checkout". git clone --depth 1 --single-branch <url> cd <repo-name> git submodule update --init --recursive --depth 1 The workaround does not fail using the "--remote" flag. However, in that case the wrong commit is checked out. Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx> --- t/t7412-submodule-recursive.sh | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 t/t7412-submodule-recursive.sh diff --git a/t/t7412-submodule-recursive.sh b/t/t7412-submodule-recursive.sh new file mode 100755 index 0000000..aaf252b --- /dev/null +++ b/t/t7412-submodule-recursive.sh @@ -0,0 +1,78 @@ +#!/bin/sh + +test_description='Test shallow cloning of repos with submodules' + +. ./test-lib.sh + +test_expect_success setup ' + git checkout -b master && + echo file >file && + git add file && + test_tick && + git commit -m "master commit 1" && + + git checkout -b branch && + echo file >branch-file && + git add branch-file && + test_tick && + git commit -m "branch commit 1" && + + git checkout master && + git clone . repo && + ( + cd repo && + git checkout master && + git submodule add ../. submodule && + ( + cd submodule && + git checkout branch + ) && + git add submodule && + test_tick && + git commit -m "master commit 2" + ) +' + +test_expect_failure shallow-clone-recursive ' + URL="file://$(pwd | sed "s/[[:space:]]/%20/g")/repo" && + echo $URL && + git clone --recursive --depth 1 --single-branch $URL clone-recursive && + ( + cd "clone-recursive" && + git log --oneline >lines && + test_line_count = 1 lines + ) && + ( + cd "clone-recursive/submodule" && + git log --oneline >lines && + test_line_count = 1 lines + ) +' + +test_expect_failure shallow-clone-recursive-workaround ' + URL="file://$(pwd | sed "s/[[:space:]]/%20/g")/repo" && + echo $URL && + git clone --depth 1 --single-branch $URL clone-recursive-workaround && + ( + cd "clone-recursive-workaround" && + git log --oneline >lines && + test_line_count = 1 lines && + git submodule update --init --recursive --depth 1 + ) +' + +test_expect_failure shallow-clone-recursive-with-remote-workaround ' + URL="file://$(pwd | sed "s/[[:space:]]/%20/g")/repo" && + echo $URL && + git clone --depth 1 --single-branch $URL clone-recursive-remote-workaround && + ( + cd "clone-recursive-remote-workaround" && + git log --oneline >lines && + test_line_count = 1 lines && + git submodule update --init --remote --recursive --depth 1 && + git status submodule >status && + test_must_fail grep "modified:" status + ) +' + +test_done -- 2.5.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html