Git子模块和拉动变化

时间:2017-08-22 18:45:22

标签: git git-submodules

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

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

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

/home/me/projects/Alpha $ git status

收益率:“modified: DM (new commits)”。

如果我理解得很好,那么$ git add DM$ git commit -m "Blo bli"会更新项目Alpha提交指向的DM提交(因此,给定项目Alpha提交知道它与哪个DM兼容的版本)。 / p>

那么,这是否意味着(在推动我的更改之后)如果我的团队中的某个人在项目Alpha上运行/home/teammate/my-projects/Alpha $ git pull,那么他的项目Alpha的文件将更新为最新提交的文件和{下的文件{1}}也会更新到与该提交相对应的版本?他是否需要运行任何其他命令才能将子模块更新为正确的版本?

感谢。

2 个答案:

答案 0 :(得分:1)

首先,一个观点:如果你将子模块视为主要只读模式,你会发现生活更简单,只有通过从上游远程控制器中提取更改才能更新它们。

  

如果我理解的话,做$ git添加DM和$ git commit -m“Blo bli”   更新项目Alpha提交指向的DM提交(所以,a   给定项目Alpha提交知道它兼容的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

答案 1 :(得分:0)

在此阶段,您只会在项目DM中进行新的提交。 在项目Alpha(以及另一个项目中)现在将更改子模块,并且在下一次提交Alpha时,可以提交对子模块更改的引用。 因此:你必须在引用子模块的每个repo中做一个额外的提交。

由于您想要使用旧的DM提交来检查Alpha提交的旧提交,因此需要进行双重提交。

您可以找到有关子模块的其他信息 https://chrisjean.com/git-submodules-adding-using-removing-and-updating/