我正在使用Sharelatex(github上)在网站上,但它包含了用于构建主项目的其他库。 [...]我在git中遇到子模块,但由于主项目不包含任何子模块类型的东西,我无法使用它。
其实,你确实有一个子模块。这是一个嵌套的存储库,和(我对此很认真),只要你需要了解grok子模块,那就是所有的都有子模块。要理解子模块,想象你有一个嵌套的存储库(你这样做)并考虑管理需求,需要做什么才能在dvcs中支持该设置。
对于初学者来说,当人们克隆一个使用来自某些回购的子模块的项目时,你已经决定包含已发布的提交,该克隆显然不会获得子项目存储库(当然,它不应该让你的私人和上帝 - 知道你做了什么版本)。因此,他们也必须从其自己发布的某个存储库中获取子项目回购。
你如何告诉人们提取你的提交在哪里得到必要的子项目提交?显然,你必须在提交的文件的某个地方放下一个注释,说“这里是一个回购,应该有任何需要的$子项目提交”。 git submodule
已经在.gitmodules
作为存储这样的笔记的传统地点进行结算。
接下来:呃,如果你交给他们的网址离线,别人怎么办?他们显然需要使用另一个回购。因此,.gitmodules
只是建议,git submodule
命令使用您的.git/config
中的当前值,其中git submodule init
已从建议的.gitmodules中填充。
git submodule
的操作是全部这样。忘掉它。除非你需要一点帮助来做你已经发现的事情,否则你甚至都不会去看命令。从知识开始,简单的事实是,子模块只不过是一个嵌套的回购,而使用它的项目提交的只是一个提交ID,它应该在嵌套回购的某处。而已。这就是一个子模块。
当您在需要做的繁琐任务中运行时,请查找git submodule
子命令,它可以为您执行这些任务。您不必使用子命令。所有子命令正在做的是自动执行简单的任务,否则会很费力。它是一个工具包,可以做任何你需要做的事情,而且它不可能或者应该对世界上每个人施加一些任意和充分的(这是困难的部分)抽象。所以这是一个抓包。
这就是说,有一个重要的安全游戏git submodule update
和git submodule add
为你执行时,他们为你做git clone
。存储库通常在子项目顶层.git
下有实际的回购内容,但是如果签出的分支没有那个子项目,或者需要或希望该子项目不见了,它的.git
也会消失 - 而不是你想要的不仅仅是你的检出内容,而是整个实际的回购。因此,当git submodule update
执行其初始克隆时,它将子模块的.git
目录提升到包含项目回购库中的便利(和任意)小角落,并将其刚刚移出子模块的.git
目录替换为包含相对路径的.git
文件移动的目录。
为了让您当前拥有的仓库能够完成最初的吊装,请将其从当前仓库中移出,然后从任何位置进行添加和更新,然后修复.gitmodules
中的上游网址以方便其他人。
那里。现在,您知道了解git子模块所需知道的一切,并且只是在您发现需要时逐步获取详细信息,才能了解命令为您做了什么,以及为什么您实际上不必关心如何理解每一个小问题事先在它的手册页上。至少,我是这么认为的。
如果我错过了任何重要的事情,我会很高兴(温柔或钝,我真的不在乎)更正评论。