Relative url values in .gitmodules confusingly sensitive to clone via ssh vs https.
- From
- Benjamin Shropshire <benjamin.shropshire@economicmodeling.com>
- Date
- Mar 17, 2020, 18:34 UTC
- Message-ID
- <CAAjm7Ga5JOJ2w=01o1-x-80HMGVaYQQy8SBBb-zJ6MOQAe4SxQ@mail.gmail.com>
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