Git URL-адрес подмодуля, не включающий имя пользователя?
У меня есть репозиторий git, настроенный с несколькими подмодулями, который создает файл .gitmodules
, который является отслеживаемым файлом в родительском репозитории. Тем не менее, есть и другие разработчики, которые хотят работать в этом репозитории, и проверить подмодули. Но в настоящее время URL-адреса для репозиториев удаленного субмодуля содержат мое имя пользователя; в файле .gitmodules
это что-то вроде:
[submodule foo]
path = sub/foo
url = https://[email protected]/git/foo.git
Очевидно, что другие разработчики не могут выбирать из example.com
как myuser
(у них нет моего пароля); как я могу создать один основной репозиторий, который несколько разработчиков могут вытащить/нажать и позволить им иметь индивидуальный доступ к подмодулям (настройка одного имени пользователя, которое они все используют на хост-сервере подмодуля, будет работать, но это не очень хорошее управление пользователями)
Ответы
Ответ 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