使用子模块克隆存储库:覆盖凭据

时间:2015-05-04 21:54:35

标签: git git-submodules git-clone git-config

我必须自动化克隆存储库并获取所有子模块。存储库子模块的URL在.gitmodules指定。如果我要使用默认值,我会做

git clone --recursive https://username:password@url.git

问题是凭据未包含在.gitmodules文件中,当我克隆时,系统会提示我这些凭据。我必须使用HTTPS而不是SSH。

我尝试使用git config提交凭据:

git clone https://username:password@url.git my_repo
cd my_repo
git submodule init
git config submodule.my_submodule.url "https://username:password@url/my_submodule.git"
git submodule update

但是在上次更新步骤中我被提示输入凭据。我已经检查过子模块网址是否正确并且在.git/config文件中有正确的凭据。

3 个答案:

答案 0 :(得分:7)

编辑.gitmodules文件后,您需要使用

应用更改
git submodule sync

下次运行git submodule update时,系统会使用新的网址。

答案 1 :(得分:3)

看起来你正在尝试使用git凭据但没有运气。

选项1

使用凭证助手添加凭据:

[submodule foo]
  path = sub/foo
  url = https://example.com/git/foo.git

检查〜/ .gitconfig 并验证是否添加了相应的条目。

进一步阅读: http://git-scm.com/docs/gitcredentials

选项2

我会仔细检查.git-credentials文件的内容,并为子模块创建一个新条目(如果它不存在)。该文件由git凭证助手在内部使用。

http://git-scm.com/docs/git-credential-store

选项3

Windows中的简单解决方案是从模块文件中删除用户名和密码:

machine example.com
  login myusername
  password areamandyingtotellsomeonehiscoolpassword

并创建一个〜/ .netrc文件。

{{1}}

感谢Git submodule URL not including username?

答案 2 :(得分:0)

如果像我一样,您正在运行CI并可以访问私有令牌,并且已经知道子模块的路径,则可以使用

git config credential.helper store
echo "https://LOGIN:${PAT}@github.com/path/to/submodule.git" > ~/.git-credentials

下一个子模块更新将不要求提供凭据。

很显然,一旦完成,您将需要清理它。就我而言,我在docker容器中运行,所以我没有这个担心。