git子模块究竟是如何工作的
git子模块究竟是如何工作的,git,git-submodules,Git,Git Submodules,.gitmodule文件仅指定模块存储库url。git子模块如何知道下载哪个版本?它似乎总是在检查最新版本。那么,开发人员如何确保主项目和子模块之间的兼容性呢?您的子模块被表示为具有特殊模式的特殊条目(称为,请参见“”): (见“”) 因此,它不是签出“最新”版本,而是始终签出一个特定的SHA1,它是在一个文件中签出的(请参阅“”) 这并不意味着不能更新子模块,正如我在“”中解释的那样 有关子模块的更多信息,以及您可能不想使用它们的原因(!),请阅读(另请参阅)中令人警醒的文章“” 只有一个小摘
.gitmodule
文件仅指定模块存储库url。git子模块如何知道下载哪个版本?它似乎总是在检查最新版本。那么,开发人员如何确保主项目和子模块之间的兼容性呢?您的子模块被表示为具有特殊模式的特殊条目(称为,请参见“”):
(见“”)
因此,它不是签出“最新”版本,而是始终签出一个特定的SHA1,它是在一个文件中签出的(请参阅“”)
这并不意味着不能更新子模块,正如我在“”中解释的那样
有关子模块的更多信息,以及您可能不想使用它们的原因(!),请阅读(另请参阅)中令人警醒的文章“”
只有一个小摘录,用于踢和咯咯笑(我的重点):
调用git submodule update
时,它会在父存储库中查找每个子模块的SHA,进入这些子模块,并检查相应的SHA。
与在常规存储库中签出SHA一样,这会使子模块处于分离的头状态
如果您随后在子模块中进行更改并提交,Git将很高兴地创建提交…并让您保持一个独立的头部。看到这是怎么回事了吗
<>你说你合并了一些其他的改变,它包含了另一个子模块更新。如果你还没有将你自己的子模块更改提交到父项目中,Git不会认为子模块中的新提交是冲突,并且<强>如果运行<代码> Git子模块更新< /代码>,它将愉快地消灭你的提交而不被警告,将其替换为刚刚合并到的分支中的分支
我希望您启用了子模块的reflog
,或者在终端回滚中仍保留了旧的提交,因为否则,您就失去了所做的所有工作
呃…“哎哟”
请注意,现在子模块可以从分支跟踪最新的:请参阅“”
new file mode 160000
index 0000000..4c4c5a2