【问题标题】:What happens to a git submodule when its referenced repo is deleted?删除引用的 repo 时 git 子模块会发生什么?
【发布时间】:2021-04-27 20:38:56
【问题描述】:

假设我在 github 上找到一个我想使用的有趣存储库,我将其添加为子模块,然后有一天 repo 的所有者决定删除 repo,我的子模块会损坏吗?

【问题讨论】:

  • 为了缩短 jthill 的回答:是的,它们 确实 损坏了,但是以一种容易修复的方式。 :-)

标签: git github repository git-submodules git-remote


【解决方案1】:

您仍然拥有已经获取的历史记录,包括子模块更新或获取,或者您想要执行此操作。您仍然可以从任何拥有它们的存储库中获取这些历史记录,并将它们推送到任何地方,重要的是历史记录,而不是您或任何人将它们保存在哪个存储库中。.gitmodules 文件只是说明在哪里可以找到它们;当上游删除他们的仓库时,这些注释已经过时了,但这就是为什么 git submodule initgit submodule update 是单独的命令:init 从 .gitmodules 的注释中加载你的仓库配置,然后你可以随意更改它们。

【讨论】:

  • 如果我没有 repo 的本地缓存怎么办?我可以拉子模块吗?
  • 如果您曾经更新过子模块,那么您就拥有了所有需要的历史记录。 git submodule update 为您进行克隆和/或获取(然后进行结帐或您配置的任何内容,可能通过采用从 .gitmodules 设置的默认值 git submodule init)。当您git add 子模块提交时,Git 会在您提交的树中记录提交 ID。 Git 根本不在乎提交来自哪里,事实上git submodule 是一个辅助命令,可以帮助您获取历史记录中说它想要在那里检查的提交。这就是它的全部目的。
  • 我的意思是,如果我没有任何 repo 的本地克隆。我克隆了我的仓库,它有一个子模块。如果我打电话给git submodule update,我会在删除之前从stage中获取已删除repo的所有文件吗?
  • 如果.gitmodules 中的 URL 不再托管该存储库,则不会。如果您可以找到所需提交的替代来源,您可以更新您的配置以指向仍然(或现在)有效的 url 或路径,然后再试一次。许多子模块的内容并不是真正可选的,我已经开始在主仓库中携带非可选的子模块历史。 helper 命令并没有真正实现自动化,但设置很简单,git submodule init 和 git worktree add。
  • 好的。因此,如果我使用一个不知名的存储库,那么将其用作子模块是不安全的,因为如果它被删除,那么我就找不到任何其他人的副本指向。你会说我们应该为非著名的存储库 fork 存储库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 2017-06-16
  • 2020-12-20
  • 1970-01-01
  • 2012-03-02
相关资源
最近更新 更多