我必须自动化克隆存储库并获取所有子模块。存储库子模块的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
文件中有正确的凭据。
答案 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}}
答案 2 :(得分:0)
如果像我一样,您正在运行CI并可以访问私有令牌,并且已经知道子模块的路径,则可以使用
git config credential.helper store
echo "https://LOGIN:${PAT}@github.com/path/to/submodule.git" > ~/.git-credentials
下一个子模块更新将不要求提供凭据。
很显然,一旦完成,您将需要清理它。就我而言,我在docker容器中运行,所以我没有这个担心。