Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git子模块究竟是如何工作的_Git_Git Submodules - Fatal编程技术网

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