From my perspective, this is a bug.
If I clone a repo twice like this:
git clone https://github.com/user/repo.git ./https git clone git@github.com:user/repo.git ./ssh
And if it contains a .gitmodules like this:
[submodule "x"]
path = xxx
url = ../../different-user/something.gitWhen I `git submodule update --init --recursive` in each, only the HTTPS version works. the SSH version confusingly seems to try to find something at ~/different-user/something.git or some other path in the local file system.
this seems consistent with the URL parsing resulting in different segmentation and thus the ../../ ending up in different places:
https =[..., 'github.com', 'user', 'repo.git'] ssh=['git@github.com:user', 'repo.git']
# ../../ https[:-2] -> [..., 'github.com'] ssh[:-2] -> []
This theory is supported by the fact that this works:
git clone ssh://git@github.com/user/repo.git ./ssh cd ssh git submodule update --init --recursive
---- See also: https://stackoverflow.com/questions/36564696/how-to-use-same-protocol-for-git-submodules