树状与网状版本仓库分析
问题背景
软件版本结构并不是总是线状的.线状,即版本按先后顺序一个接一个地更新,这是非常理想的情况.实际上大部分项目并不这样维护.
项目时间久了,版本可以变得非常复杂.
考虑下面的仓库:
主干分支为master, 另外还有三个分支C,B1及B2.
它们的关系是,master维护最基本的共用代码,为其它分支所共用,C在master上定制的,B1与B2在C上定制的.
此时的任务是,在B1及B2上应用最新的master代码,要怎么处理呢?
树状结构
即使用rebase对分支进行重构,让版本保持树状结构,分支之间没有回环.
树状方式的优点是明显的,它能清晰地展示分支之间的关系.
两个分支运算的时候,寻找公共祖先是非常容易的.
为了完成上述的任务,可以有两种方式:
树状方式一
这种方式,为了尽量体现分支之间的关系,就是先把C2 rebase到master上,再将B1,B2分别rebase到C2:
这个方案逻辑上是没问题的,但操作起来并不理想.
这个操作需要移动C分支,而负责C分支的人并不希望自己的代码被改动.
为了让C保持不动,又要体现B对C的依赖关系,那就要为同时维护C的新旧两个分支.
如果C上有重要的更新,如果建立在旧的上面,那B分支将无从