Подмодули Git и доступ к ssh

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

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

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

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

git submodule init
git submodule update

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

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

5 ответов


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

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

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

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

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

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


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

[submodule "path/to/module"]
    url = ssh://otheruser@server/pathtorepos

чтобы решить эту проблему в проекте с открытым исходным кодом, мы вводим относительный URL-адрес .файл gitmodules. Это заставит git клонировать URL-адрес подмодуля на основе URL-адреса, клонируемого шаблоном URL-адреса родительского проекта. Использование относительного пути аккуратно избегает указания протокола (https, ssh) и имени пользователя полностью:

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

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


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

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

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

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


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