4

我仍在尝试解决 Git 子模块的问题。假设我正在使用指向公共存储库的子模块,而我只有读取权限。

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

4

3 回答 3

4

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

任何“中央”存储库只是项目开发人员agree将更改推送到的位置。用最简单的术语来说,写入权限意味着您可以推送到这个预先商定的位置。从理论上讲,您甚至可以将多个“中央”存储库主机联网,并让开发人员推送到每个主机,或者让每个存储库运行挂钩以相互同步。

因为 git 存储库(包括子模块)的每个克隆本身都是一个完整的存储库,所以如果该中央官方推送位置发生更改或消失,您仍然拥有一个完全正常工作的存储库,具有对本地克隆的完全读/写访问权限。

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

看:

GitHub:添加遥控器

GitBook:远程分支

GitBook:使用遥控器

更新

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

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

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

  1. 您可以在没有被授予对official中央存储库的写入权限的情况下对您的分叉进行更改。
  2. 如果官方中央存储库变暗,您仍然有一个完整的实时版本供任何想要查看您的项目的人使用。
  3. 与复制/粘贴版本不同,将分叉的 repo 与官方 repo 保持同步相对容易。另外,您可以保留原始 repo 的所有分支和历史记录,其中与复制/粘贴一样,您只需获得初始复制提交历史记录项。
  4. 子模块 repo 维护者可能决定将您的一些更改合并回“官方”版本。同样,如果他们有一个完整的 repo 克隆可以使用(它是一个子模块),那么相对容易做到。
于 2013-08-22T14:48:01.300 回答
2

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

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

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

于 2013-08-22T14:43:55.910 回答
1

您的存储库是您的,您仍然拥有以前所做的一切。如果您可以找到该项目的其他来源,只需更改 URL。里面有管理分发的.gitmodules行政协助,没有什么说你必须使用建议的 URL。您的仓库使用.git/config. git submodule只加载默认值。

于 2013-08-22T14:44:04.410 回答