The original .gitmodules
file uses the hard coded https
urls but for some automated tests I clone from ssh
and make the submodule urls relative as in ../ModuleName
. I don't want to push these changes back into the repo either.
# change the https://github.com/ with [email protected]:
sed -i 's/https:\/\/github.com\//[email protected]:/g' ".git/config"
# delete the url lines from the submodule blocks of .git/config
sed -i '/submodule/ {$!N;d;}' ".git/config"
# change hardcoded https:// urls of submodules to relative ones
sed -i 's/https:\/\/github.com\/ProjName/../g' ".gitmodules"
# also make the same change in the .git/modules/*/config
sed -i 's/https:\/\/github.com\/ProjName/../g' .git/modules/*/config
# sync and update
git submodule sync
git submodule update --init --recursive --remote
With the snippet above, it does what I want. However, the annoying thing is, .git/modules/
folder doesn't seem to be under version control but if I just delete it, git submodule sync
and most other Git operations just stop working.
Is there a way to get the .git/modules
regenerated after modifying the .gitmodules
and .git/config
files?
.git/modules
folder if it gets messed up some how? Because, once it's created, if I delete it manually, almost all git commands are upset from that point onwards. – Hauser