Подтвердить что ты не робот

Git обновление подмодуля с другим пользователем

Я зарегистрировался как пользователь A на своей машине, но мое репо доступно через имя пользователя B на сервере, с которого я выхожу. Файл .gitmodules имеет url = ssh://domain.com/abc/def.git.

Как настроить git для использования имени пользователя B вместо A, когда я делаю git submodule update?

4b9b3361

Ответ 1

Я предполагаю, что подмодуль уже инициализирован, поэтому git config --list | grep ^submodule показывает что-то вроде submodule.my-submodule.url=ssh://domain.com/abc/def.git.

Если вы еще не запустили git submodule update в первый раз, вы можете просто изменить этот параметр конфигурации, например. с:

git config submodule.my-submodule.url ssh://[email protected]/abc/def.git

С другой стороны, если подмодуль уже обновлен один раз, то origin в подмодуле будет настроен на то, что указанный параметр конфигурации указан. В этом случае вам нужно будет:

cd my-submodule
git config remote.origin.url ssh://[email protected]/abc/def.git

Это немного запутанно, я боюсь, но подмодули очень гибкие. Я попытался объяснить некоторые из этих деталей в сообщении в блоге.

Ответ 2

В то время как вышеприведенное решение работает, я нашел другое решение, которое лучше соответствует моим потребностям и, возможно, оригинальным реквестерам. Мне нужен способ указать имя пользователя по умолчанию для всех операций git на удаленном сервере вместо того, чтобы изменять конфигурации git для каждого проекта. Решение вообще не имеет ничего общего с git, но ssh.

Просто добавьте эти строки в свой файл ~/.ssh/config:

Host domain.com
User B

(замените domain.com на домен вашего сервера git.) Теперь, даже если вы вошли на свой локальный компьютер как пользователь A, SSH будет использовать B в качестве имени пользователя при подключении к серверу.

Теперь вы можете запустить git submodule update, не добавляя имя пользователя в конфигурацию git.

Ответ 3

Короткий ответ: "проверьте, можете ли вы использовать относительные пути для подмодулей"

Деталь такова, У нас есть подмодуль, который используется несколькими приложениями. Мы сохранили подмодуль в том же репо.

Структура похожа на это, репо

|-app1
|-app2
|-submod

Когда мы клонируем приложение, приложение /.git/config получает URL-адрес с текущим пользователем, например '[email protected]' В .gitmodules приложений мы указываем url как '../submod' Таким образом, когда мы выполняем "подмодуль init", git генерирует абсолютный url для подмодуля из относительного url, который мы дали в .gitmodules.