Git: переход с SSH на HTTPS для субмодулей
При обновлении субмодулей через SSH-адреса git@github.com:... может не работать, например если у вас нет SSH-ключа на этой машине. Ниже три способа заменить адрес на HTTPS.
Способ 1: принудительно переводить все запросы Git на HTTPS (рекомендуется, быстрее всего)
Не нужно вручную редактировать файлы конфигурации. Глобальная команда сообщает Git, что адреса вида git@github.com: нужно заменять на https://github.com/.
В терминале выполните:
Bash
git config --global url."https://github.com/".insteadOf git@github.com:
После этого повторите команду обновления:
Bash
git submodule update --init --recursive
Примечание: если субмодуль находится в приватном репозитории, Git запросит имя пользователя GitHub и пароль (сейчас вместо пароля используется Personal Access Token). Публичные репозитории скачиваются без запроса.
Способ 2: вручную изменить файл .gitmodules
Если нужно постоянно изменить настройки этого проекта, отредактируйте файл .gitmodules в корне репозитория.
-
Откройте файл в редакторе, например vim или nano:
Bash
vim .gitmodules -
Измените URL:
Найдите секцию
[submodule "policy"]и заменитеurlс SSH-формата на HTTPS.До изменения:
Ini, TOML
url = git@github.com:shuosha/policy_training.gitПосле изменения:
Ini, TOML
url = https://github.com/shuosha/policy_training.git -
Синхронизируйте и обновите (обязательный шаг):
После изменения файла нужно выполнить sync, чтобы Git увидел новый URL, и только потом обновлять субмодули:
Bash
git submodule sync git submodule update --init --recursive
Способ 3: изменить только локальную конфигурацию Git (файлы проекта не меняются)
Если не хотите менять .gitmodules в коде, потому что это попадёт в коммит и затронет других участников, измените только .git/config.
-
Откройте файл
.git/config:Bash
vim .git/config -
Найдите секцию
[submodule "policy"]и изменитеurlнаhttps://github.com/shuosha/policy_training.git. -
Сохраните файл и запустите команду обновления.
Итоговая рекомендация
Если вы работаете в контейнере (например, под root), используйте способ 1. Он не требует редактирования файлов и сразу решает проблему для всех субмодулей с такими адресами.
Команда, которую можно скопировать и выполнить, а затем повторить обновление:
Bash
git config --global url."https://github.com/".insteadOf git@github.com: && git submodule update --init --recursive