在gitlab的私有存储库上,当我运行git clone [email protected]:group/project-submodule.git时,克隆成功完成。
作为克隆过程的一部分,系统要求我输入私钥的密码。
当我跑步
submodule update --init"group/project-submodule"
它失败并显示:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
在尝试处理子模块的获取过程中,没有要求我提供私钥的密码。
(我必须将其匿名化)
fatal: clone of '[email protected]:group/project-submodule.git' into submodule path 'C:/Users/user/repos/project-module/project-submodule' failed
我检查了.gitmodules文件,它包含正确的数据(我认为可以通过错误消息进行确认)。
引起我注意的主要因素是,不要求我提供私钥密码。 甚至更奇怪,因为当我直接使用git clone时,它会按预期运行。
我也已经通过使用ssh访问进行了诊断,它要求我输入密码,就像执行拉或克隆操作时发生的一样
在Windows上使用git" git版本2.16.2.windows.1"
Git尝试使用ssh而不是https克隆子模块。
如果您尚未配置ssh密钥,则此操作将失败。
您可以设置ssh-agent来缓存ssh密钥的密码,并让git使用它。或更改为https。
对于子模块,Git有点令人困惑。它们是在目录的.gitmodules文件中配置的,但是将此处的URL从ssh更改为https并没有帮助。 Git使用在.git/config中配置的URL。
打开此文件,您将找到类似的内容。
将此网址更改为等效的https,然后重试。
-
我可以根据需要使用带密码的HTTPS,因为此服务器中启用了此功能。如果未启用此功能,还有其他选择吗?
-
我不使用Windows,所以我无法尝试,但这看起来像您想要的ssh。 github.com/ericblade/ssh-agent-cmd
-
多数民众赞成在不想多次写密码的人中使用。不管怎么说,还是要谢谢你。
-
谢谢。为了更改为等效的HTTPS,我将[email protected]:usernamerepository.git更改为https:git.mydomain.comusernamerepository.git,如此处所述。
-
真好!我肯定是在尝试更新.gitmodules文件。就我而言,我的路径中没有缺少" https",但确实需要在路径中包含" mygitusername @"以验证自己是否可以克隆子模块(最后:https:[email protected])。最后,项目目录中的git submodule update成功克隆了我的子模块。
-
香港专业教育学院试图没有用。这是我在.git / config中修改submodule条目的方式:[submodule"SubModuleName"] url = https:[email protected]_submodulename.git但是,Git顽固地拒绝了权限(使用" [email protected]"而不是yours_truly)。我忘记或输错了什么吗?
您也可以只将ssh密钥更改为不需要密码的密钥。我遇到了同样的问题,现在git submodule update --init --recursive在不使用密码后工作正常。
Windows git中似乎有一个错误,即当它更新子模块时,它不要求提供释义密钥。 (git版本2.19.1.windows.1)
-
与2.19.2相同的问题-您是否尝试以某种方式报告错误?
lukas-reineke的答案正确地描述了该问题以及使用ssh-agent来启用git子模块克隆的可能解决方案,该子模块已配置为应通过ssh而不是https进行克隆。
作为使用ssh-agent的替代方法,可以使用腻子的pageant。这样,您可以将git存储库所在的主机配置为腻子中的已保存会话,然后使用以下命令克隆子模块:
1
| set GIT_SSH=plink & git submodule update |
当然,您必须确保在%PATH%中实际上可以找到plink.exe,并且已将私钥添加到正在运行的pageant实例中(应该有一个小的系统托盘图标,您可以单击以单击'添加密钥")。
由于ssh-agent可能很难从Windows的本地cmd.exe中正确运行,因此我发现此替代方法非常有用。