Merge branch 'jl/submodule-add-by-name'
If you remove a submodule, in order to keep the repository so that "git checkout" to an older commit in the superproject history can resurrect the submodule, the real repository will stay in $GIT_DIR of the superproject. A later "git submodule add $path" to add a different submodule at the same path will fail. Diagnose this case a bit better, and if the user really wants to add an unrelated submodule at the same path, give the "--name" option to give it a place in $GIT_DIR of the superproject that does not conflict with the original submodule. * jl/submodule-add-by-name: submodule add: Fail when .git/modules/<name> already exists unless forced Teach "git submodule add" the --name option
This commit is contained in:
@ -681,4 +681,79 @@ test_expect_success 'moving the superproject does not break submodules' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule add --name allows to replace a submodule with another at the same path' '
|
||||
(
|
||||
cd addtest2 &&
|
||||
(
|
||||
cd repo &&
|
||||
echo "$submodurl/repo" >expect &&
|
||||
git config remote.origin.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "gitdir: ../.git/modules/repo" >expect &&
|
||||
test_cmp expect .git
|
||||
) &&
|
||||
rm -rf repo &&
|
||||
git rm repo &&
|
||||
git submodule add -q --name repo_new "$submodurl/bare.git" repo >actual &&
|
||||
test ! -s actual &&
|
||||
echo "gitdir: ../.git/modules/submod" >expect &&
|
||||
test_cmp expect submod/.git &&
|
||||
(
|
||||
cd repo &&
|
||||
echo "$submodurl/bare.git" >expect &&
|
||||
git config remote.origin.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "gitdir: ../.git/modules/repo_new" >expect &&
|
||||
test_cmp expect .git
|
||||
) &&
|
||||
echo "repo" >expect &&
|
||||
git config -f .gitmodules submodule.repo.path >actual &&
|
||||
test_cmp expect actual &&
|
||||
git config -f .gitmodules submodule.repo_new.path >actual &&
|
||||
test_cmp expect actual&&
|
||||
echo "$submodurl/repo" >expect &&
|
||||
git config -f .gitmodules submodule.repo.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "$submodurl/bare.git" >expect &&
|
||||
git config -f .gitmodules submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "$submodurl/repo" >expect &&
|
||||
git config submodule.repo.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "$submodurl/bare.git" >expect &&
|
||||
git config submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule add with an existing name fails unless forced' '
|
||||
(
|
||||
cd addtest2 &&
|
||||
rm -rf repo &&
|
||||
git rm repo &&
|
||||
test_must_fail git submodule add -q --name repo_new "$submodurl/repo.git" repo &&
|
||||
test ! -d repo &&
|
||||
echo "repo" >expect &&
|
||||
git config -f .gitmodules submodule.repo_new.path >actual &&
|
||||
test_cmp expect actual&&
|
||||
echo "$submodurl/bare.git" >expect &&
|
||||
git config -f .gitmodules submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "$submodurl/bare.git" >expect &&
|
||||
git config submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
git submodule add -f -q --name repo_new "$submodurl/repo.git" repo &&
|
||||
test -d repo &&
|
||||
echo "repo" >expect &&
|
||||
git config -f .gitmodules submodule.repo_new.path >actual &&
|
||||
test_cmp expect actual&&
|
||||
echo "$submodurl/repo.git" >expect &&
|
||||
git config -f .gitmodules submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo "$submodurl/repo.git" >expect &&
|
||||
git config submodule.repo_new.url >actual &&
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user