Подмодули 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