首页 > 解决方案 > 如何使用`git submodules`通过分支跟踪超级项目

问题描述

我有一个超级项目,我在其中添加了许多项目作为子模块。这些项目是微服务架构的一部分。使用带有(微服务)项目作为子模块添加的超级项目的想法是能够在单个存储库中获取所有项目。

另一个用例是跟踪所有项目的变化。这个想法是对超级项目进行分支,这样每个分支都会在给定时间创建所有项目的“快照”。

但是,我发现每当我创建一个新分支并更新子模块(git submodules update --remote)时,超级项目的所有分支都会更新。这是意料之中的,因为子模块只是原始项目的链接。

现在我的问题是,我有没有为超级项目拍摄快照的策略?我们可以分支单个项目的方式,有没有这样的方法可以为子模块超级项目做到这一点?

谢谢你。

标签: gitgit-branchgit-submodules

解决方案


我相信在创建该超级项目时,您将子模块设置为使用以下内容跟踪分支

git submodule add -b <yourBranch> <URL>

这就是git submodule update --remote更新每个子模块的原因。所以你可能需要git submodule tracking latest的逆。

一种方法是开始清理,删除子模块,然后在没有说明符的情况下重新添加-b

要拍摄快照,请在超级项目中创建一个新分支,删除子模块,然后在不使用-b说明符的情况下重新添加。

创建新分支

git checkout -b <branch-name>

如何删除子模块的步骤:

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule

然后再次添加没有分支跟踪信息

git submodule add <URL>

添加后,有机会检查子模块中的特定提交,因此将像快照一样进行跟踪。

1. cd submodule
2. git checkout <commit hash>
3. cd ..

4. git add --all    # or after every submodule
5. git commit -m "Tracking revision xx"

6. git push

每次子模块更新后,第 4 步和第 5 步不是必需的,只是推荐。


推荐阅读