当GIT子模块“离线”时会发生什么?

时间:2013-08-22 14:31:19

标签: git github git-submodules

我仍然试图绕过GIT子模块。让我说我正在使用指向公共存储库的子模块,我只能读取它。

当该存储库脱机并且不再可访问时,我的项目会发生什么?

3 个答案:

答案 0 :(得分:3)

这是git / DSCM的优点之一:您的本地克隆是一个完整的常备存储库。子模块也不例外。

任何“中央”存储库都只是项目agree的开发人员推送更改的位置。最简单的写访问意味着您可以推动这个预先商定的位置。从理论上讲,你甚至可以联网多个“中央”repo主机,并让开发人员推送到每个主机,或者让每个repo运行挂钩以便彼此同步。

因为git存储库的每个克隆(包括子模块)本身都是一个完整的repo,如果该中央官方推送位置发生变化,或者消失,你仍然拥有一个完全可用的存储库,对你的本地克隆具有完全的读/写访问权限。

如果官方子模块项目开发人员认为他们只是想重新定位他们的“中央”克隆,那么您所要做的就是更新子模块的遥控器以指向新的正确位置。

请参阅:

GitHug: Adding a remote

GitBook: Remote Branches

GitBook: working with Remotes

<强>更新

假设您的项目可以被其他人访问。这隐含意味着这些用户还需要访问项目使用的任何子模块。

您可以重新托管您的本地子模块(称为“forks”)并修改您的主项目仓库以引用分叉的仓库。这比复制/粘贴更受欢迎,即使官方回购仍然存在,也可能是一个好主意。当然,这取决于原始项目的许可。

为什么这是一个好主意的几个原因:

  1. 您可以在未授予对official核心存储库的写入权限的情况下对您的分支进行更改。
  2. 如果官方的中央仓库变暗,你仍然可以为想要查看你的项目的人提供完整的实时版本。
  3. 与复制/粘贴版本不同,将分叉回购与官方回购保持同步相对容易。另外,您可以保留原始仓库的所有分支和历史记录,与复制/粘贴一样,您只需获取初始复制提交历史记录项。
  4. 子模块repo维护者可能会决定将您的一些更改合并到“官方”版本中。同样,如果他们有一个完整的repo克隆(子模块是),相对容易做。

答案 1 :(得分:1)

在某种程度上,子模块被视为单独的存储库。因此,如果您的子模块repo脱机 - 则无法更新子模块。

当您使用子模块时,您暗示在整个开发周期中所有开发人员都可以访问该repo。

仅对相对稳定的组件使用子模块。

答案 2 :(得分:1)

您的存储库是您的,您仍然拥有以前所做的一切。如果您可以找到该项目的其他来源,只需更改URL即可。 .gitmodules中的内容是管理分发时的行政协助,没有任何内容表明您必须使用建议的URL。您的仓库使用.git/config中的内容。 git submodule只会加载默认值。