Git 如何基于超级项目分支切换子模块分支
我一直在研究Git子模块以创建一个“Git项目中的Git项目”,但我遇到了一个问题,它告诉我子模块可能不是正确的解决方案 让我解释一下我想做什么: 目前,我有一个具有多个分支(master和development)的单个项目和一个库,我想将其分离到它自己的Git项目中(这样它就可以独立开发,并具有自己的提交历史)。具体而言,我还希望能够:Git 如何基于超级项目分支切换子模块分支,git,git-submodules,git-subtree,Git,Git Submodules,Git Subtree,我一直在研究Git子模块以创建一个“Git项目中的Git项目”,但我遇到了一个问题,它告诉我子模块可能不是正确的解决方案 让我解释一下我想做什么: 目前,我有一个具有多个分支(master和development)的单个项目和一个库,我想将其分离到它自己的Git项目中(这样它就可以独立开发,并具有自己的提交历史)。具体而言,我还希望能够: 在库项目的单独克隆中提交和推送更改,这些更改在明确请求之前不会在超级项目中更新 在超级项目主分支上使用库主分支 在超级项目开发分支上使用库开发分支 能够做到以
我已经看过了和,但它们似乎都没有提供我所要求的功能——可以用Git实现吗?不需要大量额外的移动/重命名/签出目录是否可行?您的要求1-3可以通过子模块实现。需求4可以通过子树实现,但只能通过子模块以有限的方式实现 首先,请注意,在不同的项目/回购协议之间进行多次互动必然需要多次干预,以保持项目同步。(所谓交互,我的意思是对子模块的微小更改需要对子项目进行更改。) 有两件事需要注意:
- 子模块的当前提交存储在超级项目的每个提交中
- 子模块仅存储提交id,而不存储特定分支
具体来说,每次您想要更新子模块时,您必须
git子模块更新
git子模块更新
cd子模块;git提交;git推送
有效李>
您遇到了哪些问题?此建议可能不适用于您的案例,但一般来说,如果模块需要位于开发分支上,而依赖模块也位于开发分支上,我通常会选择将两个模块放在同一个存储库中。如果该模块是外部服务的客户端库,而您正在准备开发分支使用新版本,该怎么办?我敢打赌这是一个非常常见的用例。我不确定这是否解决了以下问题:1。子模块位于开发分支中。2.超级项目开发分部现已并入主分部。3.git子模块更新在superproject中运行。4.超级项目现在有了子模块的开发分支(我希望它仍然是主分支)。还是我误解了你的解释?“每次你想更新你的子模块,你必须1.手动检查子模块中的最新版本”。我还添加了一个解释,即子模块的提交存储在每个超级项目提交中。因此,在合并之后(或合并期间),您必须手动签出子模块的主分支。