我有一个项目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}}也会更新到与该提交相对应的版本?他是否需要运行任何其他命令才能将子模块更新为正确的版本?
感谢。
答案 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/