我正在使用git通过https来克隆回购:
git clone https://username:password@alocation/git/repo.git
这没关系,但它也有大量的子目录要克隆,所以我使用的是--recursive
选项。
问题在于顶层需要用户名& pass指定但是对于每个子repo它再次询问详细信息,所以我得到以下内容:
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....
我可以提供用户名和用户名吗?密码可分,所以我不必每次都输入。
明显的用例是针对像这样存在大量文件的深度子结构。为每个子参数输入相同的数据将变得乏味和繁琐。容易出错。
答案 0 :(得分:7)
凭据应该对任何具有应该接受它们的地址的子模块有效。
唯一可能失败的情况是 .gitmodules 文件指向另一个仓库时,如Hunch Kod项目的case 214所示。
为了确保将这些凭据传递给“alocation”服务器的每个请求,您不需要在Git中调整任何内容,但这可能是ssh,curl或http代理设置。
我会排除ssh(alocation不会执行任何“username”,但宁愿拥有专用的用户帐户)。
如果您有代理,请检查您的http_proxy和https_proxy环境变量。
但也尝试一个简单的curl https://alocation/git/repo.git
:
使用$HOME/.netrc
(Windows上为%HOME%\_netrc
),您可以指定预期的登录名/密码。
machine alocation
login username
password mypassowrd
如果https://alocation/git/repo.git
的工作(即没有要求您输入用户名和密码),它将适用于任何其他仓库(此处为子模块)。