git - 如何使用`git submodules`通过分支跟踪超级项目
问题描述
我有一个超级项目,我在其中添加了许多项目作为子模块。这些项目是微服务架构的一部分。使用带有(微服务)项目作为子模块添加的超级项目的想法是能够在单个存储库中获取所有项目。
另一个用例是跟踪所有项目的变化。这个想法是对超级项目进行分支,这样每个分支都会在给定时间创建所有项目的“快照”。
但是,我发现每当我创建一个新分支并更新子模块(git submodules update --remote
)时,超级项目的所有分支都会更新。这是意料之中的,因为子模块只是原始项目的链接。
现在我的问题是,我有没有为超级项目拍摄快照的策略?我们可以分支单个项目的方式,有没有这样的方法可以为子模块超级项目做到这一点?
谢谢你。
解决方案
我相信在创建该超级项目时,您将子模块设置为使用以下内容跟踪分支
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 步不是必需的,只是推荐。
推荐阅读
- c# - 如何将变量参数传递给根据参数数量调用特定函数的函数?
- ssis - SSIS项目不断失败并出现COM错误
- python - Popen 在本地工作但不是远程问题
- java - 如何从 mat 对象中获取整数数组,反之亦然
- image-processing - 为什么视差的准确性会随着距离的增加呈指数下降?
- php - PHP SQL 请求:仅选择 name = $name 和 stage = $stage 的最低时间值
- java - 在 Chrome 浏览器上运行测试 Testng
- swift - NEVPNManager saveToPreferences/loadFromPreferences 回调从未被调用
- asp.net - Razor @Html.ActionLink 没有正确传递控制值
- c# - 放置算术符号时枚举 C# 中的错误