Могу ли я добавить имя пользователя и пароль для git clone, используя опцию --recursive (для подмодулей)? - PullRequest
13 голосов
/ 24 марта 2011

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

git clone https://username:password@alocation/git/repo.git

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

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

C:>git clone --recursive https://username:password@alocation/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....

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

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

1 Ответ

7 голосов
/ 24 марта 2011

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

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

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

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

Проверьте переменные среды 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 (т.е. без запроса имени пользователя и пароля), оно будет работать для любого другого репо (здесь подмодули).

...