Git子模块和拉式更改

Git子模块和拉式更改,git,git-submodules,Git,Git Submodules,我有一个项目Alpha,它依赖于另一个项目DM。Project DM表示数据模型,其他项目也使用它 我的团队决定将project DM放在自己的git存储库中,以避免代码重复/发散,并将其作为子模块包含在project Alpha的git repo中 当我修改对应于项目DM的file1.txt时,位于/home/me/projects/Alpha/DM/file1.txt中,正在运行 /主页/me/projects/Alpha$git状态 收益率:修改:DM新提交 如果我理解得很好,那么执行$g

我有一个项目Alpha,它依赖于另一个项目DM。Project DM表示数据模型,其他项目也使用它

我的团队决定将project DM放在自己的git存储库中,以避免代码重复/发散,并将其作为子模块包含在project Alpha的git repo中

当我修改对应于项目DM的file1.txt时,位于/home/me/projects/Alpha/DM/file1.txt中,正在运行

/主页/me/projects/Alpha$git状态

收益率:修改:DM新提交

如果我理解得很好,那么执行$git add DM和$git commit-m Blo bli会更新项目Alpha的commit指向的DM commit,因此,给定的项目Alpha commit知道它与哪个版本的DM兼容

那么,这是否意味着在推动我的更改之后,如果我的团队中有人在project Alpha上运行/home/team/my project/Alpha$git pull,然后,他的项目Alpha的文件将更新为最新提交的文件,并且/home/队友/my projects/Alpha/DM/下的文件也将更新为与该提交对应的版本?他是否需要运行任何其他命令来将子模块更新到正确的版本


谢谢。

首先,有一个观点:如果您将子模块主要视为只读模块,并且仅通过从上游远程引入更改来更新它们,那么您会发现生活会简单得多

如果我理解得很好的话,执行$git add DM和$git commit-m Blo bli 更新project Alpha的提交指向的DM提交,因此 给定项目Alpha commit知道它兼容哪个版本的DM 有

答案有点像。签出的子模块可能处于分离的头状态,在这种情况下,添加和提交文件不会有任何用处。这就是我建议不要编辑子模块存储库中的文件的部分原因。假设您的本地子模块位于命名分支上,然后要提交父Alpha项目的使用者可见的更改,您将首先执行您描述的操作:

cd DM
git add my-changes
git commit -m 'some changes'
git push
然后在父存储库中提交以记录子模块的新提交:

cd ..
git add DM
git commit -m 'updated DM submodule'
git push
在此之后,Alpha存储库的新克隆将看到您的更新更改。现有签出将需要运行:

git pull
git submodule update

在这个阶段,您将只在project DM中有一个新的提交。 在项目Alpha和其他项目中,现在将更改子模块,并且随着Alpha的下一次提交,可以提交对子模块更改的引用。 因此:您必须在引用子模块的每个repo中执行额外的提交

当您想要使用DM的旧提交从Alpha签出旧提交时,需要双重提交

有关子模块的其他信息,请访问