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

Git URL-адрес подмодуля, не включающий имя пользователя?

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

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

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

4b9b3361

Ответ 1

Если я правильно понимаю, вы используете базовую 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:[email protected]/git/foo.git

... и затем:

git submodule update

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

Ответ 2

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

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

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

Ответ 3

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

git submodule sync

Ответ 4

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

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

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

с этим

[submodule foo]
  path = sub/foo
  url = [email protected]:git/foo.git

Ответ 5

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

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

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

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

Ответ 6

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

[submodule "sub/module1"]
    path = sub/module1
    url = ssh://servername:29418/module1