【问题标题】:replace git submodule protocol from git to http将 git 子模块协议从 git 替换为 http
【发布时间】:2011-07-08 23:44:51
【问题描述】:

我从 git@... URL 添加了一个子模块,以便能够在其中进行开发。现在我想部署应用程序并将 URL 替换为 git://... 一个,因此它不需要从 Capistrano 对子模块的 repo 进行身份验证。编辑 .gitmodules 中的 URL 是否足以完成此操作?

【问题讨论】:

  • 无需同步:Git 2.25 (Q1 2020) 自带a new command": git submodule set-url [--] <path> <newurl>

标签: git capistrano


【解决方案1】:

编辑.gitmodules 文件(然后提交并推送它)对于任何 克隆都是足够的。

此外,当初始化子模块时(例如git submodule init …git submodule update --init …git clone --recursive … 等),其 URL 将从 .gitmodules 文件复制到存储库的 .git/config 文件。

因此,如果您有任何现有“部署克隆”(您现在希望通过 git://… URL 访问子模块的那些),您还必须更新其 @987654328 中的 URL @。您可以使用 git submodule sync 自动将子模块 URL 从当前 .gitmodules 文件复制到您的 .git/config 文件(即,一旦您提取了更新 .gitmodules 文件的提交)。

.git/config 中的子模块 URL 通常不会自动更新,因为在某些情况下您只想在某些情况下覆盖 URL。具体来说,您经常希望在存储库的.git/config 中使用git@… URL(这样您就可以通过SSH 推送),但是将git://… URL 放在.gitmodules 中(这样公众就不需要进行SSH-基于身份验证)。

【讨论】:

  • git submodule sync 完成了这项工作!谢谢!
  • 无价的答案:)
【解决方案2】:

我遇到过类似的问题,谷歌搜索后,我偶然发现了这篇文章:Relative URL for Git submodule。我发现这是一种很好的做法,因为无论谁签出都无需手动更改.gitsubmodule 文件。它可能也适用于您的情况。

【讨论】:

  • 它实际上是否仅适用于同一 git repos 中心内的子模块?如果我将来自其他集线器的存储库连接为子模块怎么办?例如。 gitlab repo 有一个位于 github 的子模块?
猜你喜欢
  • 2018-07-26
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多