URL субмодуля Git, не содержащий имя пользователя? - PullRequest
45 голосов
/ 10 октября 2011

У меня есть репозиторий git с несколькими подмодулями, который создает файл .gitmodules, который является отслеживаемым файлом в родительском репозитории.Однако есть другие разработчики, желающие поработать с этим репозиторием и проверить подмодули.Но в настоящее время URL-адреса для удаленных подмодульных репозиториев содержат мое имя пользователя;в файле .gitmodules это что-то вроде:

[submodule foo]
  path = sub/foo
  url = https://myuser@example.com/git/foo.git

Очевидно, что другие разработчики не могут извлечь из example.com как myuser (у них нет моего пароля);как я могу иметь один главный репозиторий, к которому могут обращаться несколько разработчиков, и разрешать им иметь индивидуальный доступ к подмодулям (настройка единого имени пользователя, которое они все совместно используют на хост-сервере подмодуля, будет работать, но не является хорошим управлением пользователями)

Ответы [ 9 ]

33 голосов
/ 10 октября 2011

Если я правильно понимаю, вы используете базовую аутентификацию HTTP через HTTPS, чтобы разрешить доступ к хранилищу только конкретным разработчикам.В этом случае вы можете зафиксировать .gitmodules, который выглядит следующим образом:

[submodule foo]
  path = sub/foo
  url = https://example.com/git/foo.git

... т.е. без имени пользователя, а затем попросить каждого разработчика указать свое имя пользователя и пароль в своем файле ~/.netrc,(Если вы используете Windows, то здесь есть несколько полезных советов .) Простой файл .netrc может выглядеть следующим образом:

machine example.com
  login myusername
  password areamandyingtotellsomeonehiscoolpassword

Обновление: альтернатива, которая не предполагает использование .netrc, будет следующей:

Опять же, удалите имя пользователя из URL в .gitmodules, подтвердите и нажмите это изменение.Когда кто-то клонирует репозиторий, он сначала запускается:

git submodule init

..., который устанавливает параметр конфигурации submodule.sub/foo.url на URL в .gitmodules.Однако шаг init не будет клонировать субмодуль на место, пока вы не выполните git submodule update, поэтому вы можете сделать:

git config submodule.sub/foo.url https://myuser:mypass@example.com/git/foo.git

... и затем:

git submodule update

Для клонирования подмодулей с правильным именем пользователя.Обратите внимание, что тогда ваше имя пользователя и пароль для HTTP-аутентификации будут сохранены в вашем git config.

30 голосов
/ 25 ноября 2011

На самом деле вы можете указать «относительный» путь к подмодулю в .gitconfig:

[submodule foo]  
path = sub/foo  
url = ./git/foo.git

Этот URL будет ссылаться на тот же хост (https://example.com), что и сам репозиторий.

10 голосов
/ 15 марта 2016

Мне помог этот поток, но я бы добавил, что после изменения содержимого файла .gitmodules вам нужно выполнить следующую команду, чтобы git ее забрал:

git submodule sync
8 голосов
/ 05 января 2016

Ответ Антонка не будет работать для команд, потому что индивидуальный .gitconfig или .git / config не находится под контролем версий.

Однако он привел меня к экспериментам с URL в .gitmodules.

[submodule foo]
path = sub/foo
url = ../foo.git

работал для меня, предполагая, что репо подмодуля находится в том же URL-адресе, что и родительский.

5 голосов
/ 29 октября 2012

Вы можете использовать ssh аутентификацию.

просто замените это

[submodule foo]
  path = sub/foo
  url = https://myuser@example.com/git/foo.git

с этим

[submodule foo]
  path = sub/foo
  url = git@example.com:git/foo.git
2 голосов
/ 01 июля 2014

У меня была эта проблема в сочетании с Геррит (через ssh).
Удаление имени пользователя сработало,
, поэтому мои .gitmodules теперь выглядят так:

[submodule "sub/module1"]
    path = sub/module1
    url = ssh://servername:29418/module1
1 голос
/ 18 марта 2019

Вы можете попробовать .insteadOf, например:

git config --global url."ssh://YOUR_USERNAME@gerrit.foobar.com:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"

Каждый разработчик должен будет сделать это один раз на каждом компьютере, на котором он работает.

0 голосов
/ 29 мая 2019

Измените .gitmodules и удалите имя пользователя из url:

[submodule foo]
  path = sub/foo
  url = https://example.com/git/foo.git

И наконец:

cd foo/
git submodule init
git submodule update

# Will be prompted to provide username and password
0 голосов
/ 07 февраля 2019

В качестве альтернативы вы можете использовать HTTPS вместо SSH , который запросит у вас имя пользователя и пароль:

enter image description here

...