The original .gitmodules
file uses the hard coded https
urls but for some automated tests I clone from ssh
and make the submodule urls
I tried the above solution but had a mess of problems for some reason. The following is an alternative.
In a new repository:
git submodule init
git clone ../local/path/to/submodule.git path/in/repo/submodule
Whenever the root repository submodule hashes change and you need to sync the submodules:
git submodule update
with maybe --force
and --recursive
for good measureIf you want to modify the URL used for a submodule only for the local repo, then don't modify the .gitmodules
file, that is only for changes that you want to push.
Instead, first initialize the local submodule config:
git submodule init
Then modify the .git/config
file to change the submodule URL as usual. (Again, no need to modify .gitmodules
here, and if this is a new clone you probably won't have .git/modules
yet.)
As @jthill points out, an easier way to modify the submodule URLs is:
git config submodule.moduleName.url ssh://user@server/path
At this point you don't want to run git submodule sync
, because that will overwrite the changes you just made with the values from the .gitmodules
file. Instead, go straight to:
git submodule update --recursive --remote
Not only you can change the submodule URL with git config submodule.moduleName.url
, but:
With Git 2.25 (Q1 2020), you can modify it.
See "Git submodule url changed" and the new command git submodule set-url [--] <path> <newurl>
with Git 2.22 (Q2 2019), you can also unset it:
See commit b57e811, commit c89c494 (08 Feb 2019), and commit 7a4bb55 (07 Feb 2019) by Denton Liu (Denton-L).
(Merged by Junio C Hamano -- gitster -- in commit 01f8d78, 25 Apr 2019)
submodule--helper
: teach config subcommand--unset
This teaches
submodule--helper config
the--unset
option, which removes the specified configuration key from the.gitmodule
file.
That is:
git submodule--helper config --unset submodule.submodule.url &&
git submodule--helper config submodule.submodule.url >actual &&
test_must_be_empty actual
With Git 2.27 (Q2 2020), the rewriting various parts of "git submodule
" in C continues, include set-url
.
See commit 6417cf9 (08 May 2020) by Shourya Shukla (periperidip).
(Merged by Junio C Hamano -- gitster -- in commit 9e8ed17, 13 May 2020)
submodule: port subcommand 'set-url' from shell to C
Signed-off-by: Shourya Shukla
Convert submodule subcommand 'set-url' to a builtin. Port '
set-url
' to 'submodule--helper.c
' and call the latter via 'git submodule.sh
'.