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

Posted

技术标签:

【中文标题】我可以将 git 子模块与某种后备 URL 链接起来吗?如果 SSH 克隆失败,git 应该可以使用 https 进行克隆【英文标题】:Can I link git submodules with some kind of fallback URL? If SSH clone fails, git should be able to clone using https 【发布时间】:2017-03-18 22:22:43 【问题描述】:

(这主要是在我使用 GitHub 时突然出现的,所以我不太介意是否有任何解决方案是 GitHub 特定的。但问题本身不是 GitHub 特定的,并且不需要任何解决方案'不一定都是。)

您始终可以使用 https 克隆公共 GitHub 存储库:

git clone https://github.com/my-user-name/SDL-mirror

如果您有 GitHub 知道的 SSH 密钥,您还可以使用 SSH 克隆存储库:

git clone git@github.com:my-user-name/SDL-mirror.git

(我认为使用 Bitbucket 时也适用类似的选项。)

添加子模块时也有这两个选项。

添加子模块时,您通常会添加 SSH 版本,因此您可以在现场测试更改后直接从子模块提交。

但是那些试图克隆你的仓库的人呢?他们可能没有 SSH 访问 GitHub。因此,他们将使用 HTTPS URL 克隆您的存储库......然后在 Git 尝试使用 SSH URL 克隆子模块时解开。

如果您使用 Git 存储库进行系统配置,这也可能是一个问题。

理想情况下,如果可能,我希望 Git 从 SSH URL 中提取,如果不是,则从 HTTPS URL 中提取。这应该让每个人都能开箱即用。有什么办法可以让它做到这一点?

【问题讨论】:

【参考方案1】:

你可以做的是:

使用 https url (or change its current ssh url to an https one) 注册您的子模块

本地指导Git to use ssh instead:

git config --global url.ssh://git@github.com/.insteadOf https://github.com/

这样,对于您的本地 repo,您​​始终使用 ssh,但对于任何克隆您的 repo 的人,只有 https 引用。

【讨论】:

以上是关于我可以将 git 子模块与某种后备 URL 链接起来吗?如果 SSH 克隆失败,git 应该可以使用 https 进行克隆的主要内容,如果未能解决你的问题,请参考以下文章

为啥 git 子模块与 svn 外部不兼容?

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

git submodule add子模块的添加,--recurse-submodules递归克隆子项目

git submodule add子模块的添加,--recurse-submodules递归克隆子项目

git submodule add子模块的添加,--recurse-submodules递归克隆子项目

如何为子模块更新编写 git 提交消息?