如何为 Git 子模块使用 SSH 而不是 HTTP?

Posted

技术标签:

【中文标题】如何为 Git 子模块使用 SSH 而不是 HTTP?【英文标题】:How to use SSH instead of HTTP for Git submodules? 【发布时间】:2015-09-20 00:05:51 【问题描述】:

为什么人们会遇到这个问题?

$ git clone --recursive git@github.com:acani/Chats.git 克隆到“聊天”... 权限被拒绝(公钥)。 致命:无法从远程存储库读取。

请确保您拥有正确的访问权限并且存储库存在。

https://github.com/acani/Chats/issues/53#issuecomment-118014684

我已经阅读了一些答案,说要将子模块 URL 从 SSH 更改为 HTTP,但我为什么必须这样做。我不想那样做。我想保留它 SSH,这样如果我想推送,我就不必在终端中输入我的用户名和密码。每个人都可以很好地克隆 SSH URL,那为什么不能递归地将其克隆为子模块呢​​?

【问题讨论】:

可能重复:***.com/questions/25957125/… @ma1 我是否使用下面提出的解决方法回答了您的问题? @VonC 抱歉,我没有尝试您的解决方法。我刚刚从 SSH 协议切换到 Git 协议。不过还是谢谢你的回答。 【参考方案1】:

作为一种解决方法,您可以尝试对任何 github 存储库使用 https url:

cd myParentRepo
git config url.https://github.com/.insteadOf ssh://git@github.com/
# or
git config url.https://github.com/.insteadOf git@github.com:

【讨论】:

【参考方案2】:

SSH 协议不支持匿名访问 Git 存储库。

所以,不要使用 SSH 协议。相反,请使用 Smart HTTP 协议(​​推荐)或 Git 协议。

对于存储库的 .gitmodules 文件中的每个子模块 URL,将 git@github.com: 替换为 https://github.com/(以使用智能 HTTP 协议)或 git://github.com/(以使用 Git 协议)。

更多信息:Git - The Protocols

【讨论】:

所以我的回答是有效的:子模块使用 https 而不是 SSH 完全正确:我的回答是改变任何东西,但仍然使用正确的协议。

以上是关于如何为 Git 子模块使用 SSH 而不是 HTTP?的主要内容,如果未能解决你的问题,请参考以下文章

应该如何为 laravel 4 composer 包设置 git 子模块?

如何为 jenkins git 插件指定 ssh 密钥

如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]

我可以将 git 子模块与某种后备 URL 链接起来吗?如果 SSH 克隆失败,git 应该可以使用 https 进行克隆

如何将 git 子模块与 Bitbucket 管道一起使用?

如何为 git pull 输入带有密码的命令?