如何克隆带有子模块的Git仓库,而无需为每个子仓库输入密码。

6

我最近把一个仓库放到了Bitbucket上,并且这个仓库有一些子模块。

我正在编写一个初始化脚本。我想要克隆主目录,然后拉取所有的子目录。

 git clone https://bitbucket.org/#####/main.git elastic --recurse-submodules

这会提示我输入用户名和密码。
Username for 'https://bitbucket.org': myuser 
Password for 'https://myuser@bitbucket.org': 

然后它又要求我为每个子模块再次进行操作。

Username for 'https://bitbucket.org':  
...

我的.gitmodules文件如下:

[submodule "api"]
     path = app/api/
     url = git@bitbucket.org/###/api.git
     branch = master
[submodule "front"]
     path = app/front
     url = git@bitbucket.org/###/front.git
     branch = master
[submodule "app/config"]
     path = app/config
     url = git@bitbucket.org/###/config.git
     branch = master

... some few more repositories

我应该如何克隆主仓库,并使用同样的凭证在所有子仓库中进行操作?

我正在使用 AWS AMI Linux。


2
你难道不直接使用SSH来做这个吗?请查看https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/。 - vsr
请参阅Caching your GitHub password in Git。这不仅适用于Github。 - Schwern
2个回答

11

将git设置为使用凭据内存缓存可以解决我的问题。

git config --global credential.helper cache

这就足以使用相同的用户名和密码拉取所有仓库

如果我想要保留相同缓存整整一天,我可以将时间设置为更长时间:

git config --global credential.helper 'cache --timeout=86400'

86400秒 = 1天;


0

检查您的git配置输出:

输入以下命令:git config -l

如果您看到类似以下规则:

git config --global url.https://github.com/.insteadOf git@github.com/

这就解释了为什么即使是子模块,HTTPS URL 的凭据也会被使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接