git克隆工程;git子模块出现故障;“拒绝许可”;

git克隆工程;git子模块出现故障;“拒绝许可”;,git,windows-10,gitlab,git-submodules,git-for-windows,Git,Windows 10,Gitlab,Git Submodules,Git For Windows,在gitlab的私有存储库上,当我运行git clone时git@git.privateserver.local:group/project submodule.git克隆成功完成。 作为克隆过程的一部分,要求我提供私钥的密码短语 当我跑的时候 子模块更新——初始化“组/项目子模块” 它失败于: 权限被拒绝,请重试。 权限被拒绝,请重试。 权限被拒绝(公钥、gssapi密钥、带麦克风的gssapi、密码)。 致命:无法从远程存储库读取 在尝试处理子模块获取时,没有向我询问私钥的密码短语 (我不得

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

当我跑的时候
子模块更新——初始化“组/项目子模块”

它失败于:

权限被拒绝,请重试。 权限被拒绝,请重试。 权限被拒绝(公钥、gssapi密钥、带麦克风的gssapi、密码)。 致命:无法从远程存储库读取

在尝试处理子模块获取时,没有向我询问私钥的密码短语

(我不得不匿名)

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

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

引起我注意的主要因素是没有人要求我提供私钥密码短语。更奇怪的是,当我直接使用git clone时,它会按预期运行

我还通过使用
ssh
访问进行了诊断,它向我询问密码短语,就像我执行拉取或克隆时一样


使用git for windows“git版本2.16.2.windows.1”

git尝试使用ssh而不是https克隆子模块。 如果尚未配置ssh密钥,则此操作将失败。
您可以设置ssh代理来缓存ssh密钥的密码,并让git使用该密码。或更改为https。
关于子模块,Git有点混乱。它们是在目录中的
.gitmodules
文件中配置的,但是将此处的url从ssh更改为https不会有帮助。Git使用在
.Git/config
中配置的url
打开此文件,您将发现类似的内容

[submodule "project-submodule"]
    url = git@example.com:project-submodule.git

将此url更改为与https等效的url,然后重试。

lukas reineke的回答正确地描述了该问题,以及使用
ssh代理
启用git子模块克隆的可能解决方案。git子模块的配置应确保通过ssh而不是https进行克隆

除了使用
ssh代理
之外,还可以使用putty的
pageant
。这样,您可以将git存储库所在的主机配置为putty中保存的会话,然后使用以下命令克隆子模块:

set GIT_SSH=plink & git submodule update
当然,您必须确保在您的
%PATH%
中确实可以找到
plink.exe
,并且您已经将您的私钥添加到正在运行的
pageant
实例中(应该有一个小的systray图标,您可以单击以“添加密钥”)


由于要从windows的原生cmd.exe正确运行
ssh代理
可能有点棘手,我发现这个替代方法非常有用。

您也可以将ssh密钥更改为不需要密码的密钥。我也遇到了同样的问题,现在
git子模块更新--init--recursive
在没有使用密码短语后可以正常工作


这似乎是WindowsGit中的一个缺陷,当它更新子模块时,它不要求提供解释密钥。(git版本2.19.1.windows.1)

我也面临同样的问题。在下载子模块时,GIT不要求提供ssh密钥密码,这就是问题所在


创建没有密码短语的新ssh密钥对我来说很有效。

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

如果切换到Git Bash(默认情况下使用Git安装),则会弹出对话框,您可以输入私钥密码

正如其他人所指出的,另一种方法是使用putty并设置plink来与ssh一起工作。我通常使用这种方法,它在选美比赛中完美无瑕。棘手的部分是设置plink:

*更新:我尝试了putty/pageant,但未能成功。jenkins git插件传递的选项与pageant不兼容。

但是,查找对话框对我的Jenkins设置没有帮助


我遇到了相同的错误消息,但原因/解决方案不同:

太长,读不下去了 我需要在子模块命令之前运行
export GIT\u SSH\u COMMAND='SSH-I~/.SSH/some\u SSH\u id'

细节 我的存储库使用自定义ssh文件,即我有一个个人密钥(
.ssh/id\u rsa
)和一个特定于公司的git-only密钥(
.ssh/company\u git\u-id
)。Git默认使用
id\u rsa
键,该键无法访问Git存储库

以下调整使git与特定于公司的git密钥一起工作:

#将存储库的SSH密钥设置为“company\u git\u id”:
git config core.sshCommand'ssh-i~/.ssh/company\u git\u id'
git fetch工作!
#config.sshCommand不适用于子模块。改用这个:
导出GIT\u SSH\u命令='SSH-i~/.SSH/company\u GIT\u id'
git子模块更新——rebase——远程my_模块_dir工作!
请注意,这将更改您运行的所有以下命令的GIT_SSH_命令

要避免此环境更改,您可以在子shell中运行子模块请求,如下所示:

(导出GIT\u SSH\u命令='SSH-i~/.SSH/company\u GIT\u id'&&GIT子模块更新--rebase--remote my\u module\u dir)
或者对于Bash和zsh这样的shell,不需要子shell

GIT\u SSH\u COMMAND='SSH-i~/.SSH/company\u GIT\u id'GIT子模块更新--rebase--remote my\u module\u dir

使用带有密码的HTTPS按照我的要求工作,因为此服务器中启用了此功能。如果没有启用这样的功能,还有其他选择吗?我不使用windows,所以我无法尝试,但这看起来像是您想要的ssh。这适用于不想多次写入密码短语的人。谢谢你,谢谢。换成