Подмодули Git и доступ по SSH - PullRequest
39 голосов
/ 17 мая 2011

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

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

mkdir projectname
cd projectname
git init
git submodule add ssh://myusername@server/pathtorepos

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

git submodule init
git submodule update

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

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

Ответы [ 5 ]

37 голосов
/ 17 мая 2011

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

.
 cd my-submodule
 git remote set-url origin otheruser@server:/pathtorepos

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

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

git config submodule.my-submodule.url otheruser@server:/pathtorepos

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

11 голосов
/ 17 мая 2011

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

[submodule "path/to/module"]
    url = ssh://otheruser@server/pathtorepos
4 голосов
/ 02 января 2018

Чтобы решить эту проблему в проекте с открытым исходным кодом, мы вводим ОТНОСИТЕЛЬНЫЙ URL в файл .gitmodules. Это заставит git клонировать URL подмодуля на основе URL, клонированного шаблоном URL родительского проекта. Использование относительного пути аккуратно избегает указания протокола (https, ssh) и имени пользователя полностью:

[submodule "my/tests/schemas"]
    path = my/tests/schemas
    url = ../my-schema

p.s. после публикации я понял, что мой ответ - обман, вот источник, который вы должны использовать: Автоматический доступ к подмодулю через ssh или https

2 голосов
/ 18 мая 2011

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

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

git clone ssh://myusername@server.dk/path/to/superrepos
cd superrepos
git submodule init
git submodule update

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

git clone ssh://otheruser@server.dk/path/to/superrepos
cd superrepos
git clone ssh://otheruser@server.dk/path/to/other/repos
git submodule init
git submodule update

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

git submodule init

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

0 голосов
/ 01 октября 2013

Не включайте имя пользователя в URL. git запросит имя пользователя и пароль, когда вы клонируете / вытягиваете / etc

...