我可以添加用户名&使用--recursive选项(对于子模块)git clone的密码?

时间:2011-03-24 10:43:15

标签: git git-submodules

我正在使用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....

我可以提供用户名和用户名吗?密码可分,所以我不必每次都输入。

明显的用例是针对像这样存在大量文件的深度子结构。为每个子参数输入相同的数据将变得乏味和繁琐。容易出错。

1 个答案:

答案 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的工作(即没有要求您输入用户名和密码),它将适用于任何其他仓库(此处为子模块)。