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

Git подмодули и ssh-доступ

У меня есть некоторые проблемы с репозиторием git, который содержит несколько подмодулей.

Репозиторий super git был создан с помощью команд

mkdir projectname
cd projectname
git init
git submodule add ssh://[email protected]/pathtorepos

Когда другой пользователь ( "otheruser" ) клонирует суперрепозиторий, все, кажется, работает. Но когда пришло время получить доступ к подмодулю

git submodule init
git submodule update

git пытается клонировать подмодуль, используя "myusername" вместо "otheruser".

Как решить эту проблему?

4b9b3361

Ответ 1

Если возможно, лучше убедиться, что файл .gitmodules содержит URL-адрес репозитория, который может быть клонирован кем-либо, как правило, либо с тегом git:// или http://. Затем пользователи, у которых есть доступ к SSH, могут изменить в подмодуль после клонирования и изменить URL-адрес в remote.origin.url, чтобы указать URL-адрес SSH с их именем пользователя, например:

 cd my-submodule
 git remote set-url origin [email protected]:/pathtorepos

Другой пользователь должен иметь возможность сделать это даже в текущей ситуации. Обновление:. Крис Джонсон указывает ниже, что также разумно использовать URL-адрес SSH в .gitmodules, если вы опустите имя пользователя, и все пользователи репозитория будут иметь доступ к SSH - им нужно будет добавить их имя пользователя аналогично указанному выше, если оно отличается локально и удаленно.

Обратите внимание, что URL-адреса в .gitmodules используются только при инициализации подмодуля. Инициализация подмодуля задает значение конфигурации submodule.<SUBMODULE-NAME>.url в главном проекте на то, что было зафиксировано в .gitmodules - это значение, которое будет использоваться при первом обновлении подмодуля. Между инициализацией и обновлением подмодуля вы также можете изменить этот URL-адрес, который будет использоваться для этого первого обновления, с помощью команды, например:

git config submodule.my-submodule.url [email protected]:/pathtorepos

Действительно, вам может понадобиться сделать это, если первое обновление не выполнено. После того, как подмодуль был обновлен в первый раз, URL-адрес, который вам нужно изменить, определяется для origin внутри подмодуля - в этот момент полезно только установить значение конфигурации submodule.my-submodule.url в главном проекте, если вы вероятно, будет удалять и повторно обновлять подмодуль.

Ответ 2

Другой пользователь должен изменить файл .git/config, чтобы изменить имя пользователя на свое собственное имя пользователя. Таким образом, git использует правильного пользователя для подключения к серверу.

[submodule "path/to/module"]
    url = ssh://[email protected]/pathtorepos

Ответ 3

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

Когда мне нужно проверить репозиторий, это можно сделать с помощью команд

git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git submodule init
git submodule update

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

git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git clone ssh://[email protected]/path/to/other/repos
git submodule init
git submodule update

Обратите внимание, что после выпуска

git submodule init

git сообщит вам, что запрошенный репозиторий и доступный не идентичны. Но это не смертельно, и вы можете спокойно продолжать.

Ответ 4

Не указывайте имя пользователя в URL. git будет запрашивать имя пользователя и пароль при клонировании/выводе/etc