The only thing I still see that might cause the bug is that there is no git submodule update --recursive present in your test cases . This command creates the .git file in the nested subsubmodule It is that .git file that is not correctly updated in the move. So after the line + git submodule add ./outer_sub ./deep/outer_sub && I would add + git submodule update -- recursive && 2016-06-28 3:15 GMT+03:00 Stefan Beller <sbeller@xxxxxxxxxx>: > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > This tries to reproduce the error as pointed out in > http://stackoverflow.com/questions/32782382/git-moving-submodules-recursively-nested-submodules > but the tests pass. This still seems to be missing a detail. > > Bart any idea how this setup may be different than what you have? > Instead of applying the patch, you can also checkout > https://github.com/stefanbeller/git/tree/submodule_recursive_mv_test > which is the patch below applied on top of Junios (the maintainer) master branch. > To look around on the filesystem, you can drop "test_pause &&" in a test and > then run the test with `(cd t && ./t7001-mv.sh -v)` (more info how to run tests > in the Git test suite in t/README, maybe -i -v -x are interested) > > Thanks, > Stefan > > t/t7001-mv.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh > index 4a2570e..404e5bd 100755 > --- a/t/t7001-mv.sh > +++ b/t/t7001-mv.sh > @@ -295,6 +295,28 @@ test_expect_success 'setup submodule' ' > mkdir -p deep/directory/hierachy && > git submodule add ./. deep/directory/hierachy/sub && > git commit -m "added another submodule" && > + mkdir inner_sub && > + ( > + cd inner_sub && > + git init && > + test_commit initial > + ) && > + mkdir outer_sub && > + ( > + cd outer_sub && > + git init && > + test_commit initial && > + git submodule add ../inner_sub && > + git commit -a -m "add an inner submodule" > + ) && > + git submodule add ./outer_sub ./deep/outer_sub && > + git commit -a -m "add outer sub" && > + git -C deep ls-tree HEAD |cut -f 2 >actual && > + cat >expect <<-EOF && > + directory > + outer_sub > + EOF > + test_cmp expect actual && > git branch submodule > ' > > @@ -488,6 +510,27 @@ test_expect_success 'moving a submodule in nested directories' ' > git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual && > echo "directory/hierachy/sub" >../expect > ) && > + test_cmp actual expect && > + git commit -a -m "mv a submodule in nested dir" > +' > + > +test_expect_success 'moving a submodule with a nested submodule' ' > + git mv deep/outer_sub outer_sub_moved && > + # git status would fail if the update of linking git dir to > + # work dir of the submodule failed. > + git status && > + git config -f .gitmodules submodule.deep/outer_sub.path >actual && > + echo "outer_sub_moved" >expect && > + test_cmp actual expect > +' > + > +test_expect_success 'moving back the submodule with a nested submodule' ' > + git mv outer_sub_moved deep/outer_sub && > + # git status would fail if the update of linking git dir to > + # work dir of the submodule failed. > + git status && > + git config -f .gitmodules submodule.deep/outer_sub.path >actual && > + echo "deep/outer_sub" >expect && > test_cmp actual expect > ' > > -- > 2.9.0.4.g35eb263.dirty > -- Bart Bogaerts -- 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