【发布时间】:2021-04-27 20:38:56
【问题描述】:
假设我在 github 上找到一个我想使用的有趣存储库,我将其添加为子模块,然后有一天 repo 的所有者决定删除 repo,我的子模块会损坏吗?
【问题讨论】:
-
为了缩短 jthill 的回答:是的,它们 确实 损坏了,但是以一种容易修复的方式。 :-)
标签: git github repository git-submodules git-remote
假设我在 github 上找到一个我想使用的有趣存储库,我将其添加为子模块,然后有一天 repo 的所有者决定删除 repo,我的子模块会损坏吗?
【问题讨论】:
标签: git github repository git-submodules git-remote
您仍然拥有已经获取的历史记录,包括子模块更新或获取,或者您想要执行此操作。您仍然可以从任何拥有它们的存储库中获取这些历史记录,并将它们推送到任何地方,重要的是历史记录,而不是您或任何人将它们保存在哪个存储库中。.gitmodules 文件只是说明在哪里可以找到它们;当上游删除他们的仓库时,这些注释已经过时了,但这就是为什么 git submodule init 和 git submodule update 是单独的命令:init 从 .gitmodules 的注释中加载你的仓库配置,然后你可以随意更改它们。
【讨论】:
git submodule update 为您进行克隆和/或获取(然后进行结帐或您配置的任何内容,可能通过采用从 .gitmodules 设置的默认值 git submodule init)。当您git add 子模块提交时,Git 会在您提交的树中记录提交 ID。 Git 根本不在乎提交来自哪里,事实上git submodule 是一个辅助命令,可以帮助您获取历史记录中说它想要在那里检查的提交。这就是它的全部目的。
git submodule update,我会在删除之前从stage中获取已删除repo的所有文件吗?
.gitmodules 中的 URL 不再托管该存储库,则不会。如果您可以找到所需提交的替代来源,您可以更新您的配置以指向仍然(或现在)有效的 url 或路径,然后再试一次。许多子模块的内容并不是真正可选的,我已经开始在主仓库中携带非可选的子模块历史。 helper 命令并没有真正实现自动化,但设置很简单,git submodule init 和 git worktree add。