git clone有效; git子模块失败"权限被拒绝"

bru*_*ais 7 git git-submodules gitlab windows-10 git-for-windows

在gitlab的私有存储库中,当我运行git clone git@git.privateserver.local:group/project-submodule.git克隆成功完成时.
作为克隆过程的一部分,我被要求提供私钥的密码.

当我运行 submodule update --init "group/project-submodule"
它失败时:

许可被拒绝,请再试一次.许可被拒绝,请再试一次.权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic,密码).致命:无法从远程存储库读取.

在尝试处理子模块时,我没有被要求为我的私钥密码.

(我不得不匿名)

致命:将'git@git.privateserver.local:group/project-submodule.git'克隆到子模块路径'C:/ Users/user/repos/project-module/project-submodule'失败

我检查了.gitmodules文件,它包含正确的数据(我认为可以通过错误消息确认).

引起我注意的主要因素是我没有被问到我的私钥密码.甚至更奇怪,因为当我git clone直接使用时,它会按预期运行.

我也已经通过访问进行了诊断ssh并且它询问了我的密码,就像我执行拉或克隆时发生的那样

使用git for windows"git version 2.16.2.windows.1"

luk*_*eke 9

Git尝试使用ssh而不是https克隆子模块。如果您尚未配置ssh密钥,则此操作将失败。
您可以设置ssh-agent来缓存ssh密钥的密码,并让git使用它。或更改为https。
对于子模块,Git有点令人困惑。它们是在.gitmodules目录中的文件中配置的,但是将此处的URL从ssh更改为https并没有帮助。Git使用在中配置的网址.git/config
打开此文件,您将找到类似的内容。

[submodule "project-submodule"]
    url = git@example.com:project-submodule.git
Run Code Online (Sandbox Code Playgroud)

将此网址更改为等效的https,然后重试。

  • 使用带有密码的 HTTPS 可以按照我的意愿工作,因为此服务器中启用了此类功能。如果没有启用此功能,是否有其他选择? (2认同)

Din*_*ale 6

问题似乎是 OpenSSH 3.8 抛出一个无法从 win32 访问的对话框?

如果你切换到Git Bash(默认随git一起安装),则会弹出对话框,你可以输入你的私钥密码。

正如其他人指出的那样,替代方法是使用 putty 并设置 plink 来与 ssh 一起使用。我通常使用这种方法,它与选美完美配合。棘手的部分是设置 plink:https ://makandracards.com/makandra/1303-how-to-use-git-on-windows-with-putty

*更新:我尝试了 putty/pageant 但无法使其工作。jenkins git 插件传递的选项与 pageant 不兼容。

不过,找到该对话框对我的 Jenkins 设置没有帮助......

在此输入图像描述


小智 5

您也可以将 ssh 密钥更改为不需要密码的密钥。我有同样的问题,现在git submodule update --init --recursive在不使用密码后工作正常。

似乎是 Windows git 中的一个错误,当它更新子模块时,它不会要求释义键。(git 版本 2.19.1.windows.1)