Могу ли я добавить имя пользователя и пароль к git клону с помощью опции --recursive (для подмодулей)?

Я использую git для клонирования репо через https таким образом:

git clone https://username:[email protected]/git/repo.git

Это хорошо, но у него есть большое количество subrepos для клонирования, поэтому я использую параметр --recursive.

Проблема заключается в том, что для верхнего уровня требуется имя пользователя и пароль, но для каждого дополнительного репо он запрашивает подробности снова, поэтому я получаю следующее:

C:>git clone --recursive https://username:[email protected]/git/repo.git
Cloning into repo...
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 15 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (15/15), done.
Submodule 'sub1' (https://alocation/git/repo.sub1) registered for path 'sub1'
Submodule 'sub2' (https://alocation/git/repo.sub2) registered for path 'sub2'
Submodule 'sub3' (https://alocation/git/repo.sub3) registered for path 'sub3'
Submodule 'sub4' (https://alocation/git/repo.sub4) registered for path 'sub4'
Cloning into sub1...
Username:
Password:
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 10 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (10/10), done.
Username:
..............................etc....

Могу ли я дать имя пользователя и пароль отдельно, поэтому мне не нужно вводить их каждый раз.

Очевидный вариант использования - для такой глубокой структуры subrepo, как это, где есть много файлов. Ввод одних и тех же данных для каждого подрепортажа будет утомительным и подверженным ошибкам.

Ответ 1

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

Единственный случай, когда он может потерпеть неудачу, - это когда файл .gitmodules указывает на другое репо, как показано case 214 проекта Hunch Kod.

Чтобы эти учетные данные были переданы каждому запросу на сервер "alocation", вам не нужно ничего настраивать в Git, но это, вероятно, настройки ssh, curl или http proxy.

Я бы исключил ssh (alocation не будет выполнять ничего как "имя пользователя", но скорее имеет специальную учетную запись пользователя).

Проверьте переменную окружения http_proxy и https_proxy, если у вас есть прокси.

Но попробуйте также простую curl https://alocation/git/repo.git:
С помощью $HOME/.netrc (%HOME%\_netrc в Windows) вы можете указать ожидаемый логин/пароль.

machine alocation
  login username
  password mypassowrd

Если это работает для https://alocation/git/repo.git (т.е. без запроса имени пользователя и пароля), он будет работать для любого другого репо (здесь подмодули).