В оригинальном файле .gitmodules
используются жестко закодированные URL-адреса https
, но для некоторых автоматических тестов я клонировал от ssh
и сделал URL-адреса субмодуля относительно, как в ../ModuleName
. Я также не хочу возвращать эти изменения обратно в репо.Как изменить git subodules url локально?
# 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
С фрагментом выше, он делает то, что я хочу. Однако, назойливая вещь: папка .git/modules/
, похоже, не находится под управлением версии, но если я просто ее удалю, git submodule sync
и большинство других операций Git просто перестают работать.
Есть ли способ получить .git/modules
регенерированный после изменения .gitmodules
и .git/config
файлов?
Да, это ответ на мой первоначальный вопрос и спасибо очень много. Как немного другой вопрос, есть ли способ воссоздать папку '.git/modules', если она каким-то образом перепуталась? Потому что, как только он будет создан, если я удалю его вручную, почти все команды git будут расстроены с этого момента. –
@abdus_salam Возможное решение [здесь] (// stackoverflow.com/a/36983168/2747593). –