原则:
- 1,将主线合并到分支后,得将分支合并到主线,保持代码始终一致,毕竟最终目的是主线代码最全,也有利于分支再次更改后跟主线的合并,也就是一对一关系,如果主线合并到了分支,如果再有将主线合并到分支的需求,最好先将分支合并到了主线(当然可能此时的主线代码又有改动)。
- 2,如果按照分支、主干始终保持一致的情况下,分支的revision number 首次合并为创建分支的
revision number
,合并后的revision number
选择为主线合并到分支后并分支提交了提交到分支此时的revision number
。
分支合并两种方式:
1 、开两个工程:
- 如果想直接合并在
trunk
下,则提交branches
分支的代码,直接合并Integrate Directory ...
。source1
为合并的最终目的地,此类模式source1为trunk
,source2为branches
。注意,创建分支后用AS
打开先update
一下,因为有可能projectname.iml
会报不一致错误,所以先更新。 - 如果想
trunk
和branches
都保持代码一致,一般情况下先将主线合并到分支,建再将合并后的也就是最全的分支代码提交,再将分支的内容合并到主线上。
2 、开一个工程(更新、提交、切换分支、合并
)
这种情况下适用于确保本地开发结束或者阶段结束并全部提交代码后,先切换分支(update 并勾选
),再将分支/主干合并到主干/分支上。
两种方式的工程名均可不一致,需要注意的是revision version number
。以下记载为之前的,跟补充的个别的不一致,但是仍可参考。
前言
干了android
几年,团队几个人共同开发一个项目的情况下关于 svn
的管理根据各自负责的模块都在主干trunk
上开发合并,上线release
后打tag
版本,虽然也能满足svn
合并管理,然而觉得既然有分支一说还是琢磨琢磨分支是怎么回事、怎么使用。
根据项目需求要求并行开发、需求上线时间不一致,可能并行开发多个需求,而先上线的需求版本不能携带未上线的正在开发或已完成开发的代码内容,这就体现出分支开发的重要性。
创建分支时记得添加创建信息,合并的时候需要!!!使用AS
下载trunk
下的代码和分支branches
下的代码,开两个工程,各自提交,合并前,先更新,保持跟svn代码一致。先将主线合并到分支,如果是首次合并,则分支的revision number
为创建分支前的最后一次提交的revision number
(也可为创建分支时的信息number)。切换分支,可在分支工程切换到主线svn路径。
现介绍下大体合并流程。
- 1、创建分支前最后一次主干
trunk
的代码提交时,标明该次提交信息为创建分支前的提交信息,此时提交信息的revision number
有用(如果先将分支合并到主线,则用创建分支前的最后一次提交的revision number,如果先将主线合并到分支,则使用创建分支时的revision number
即可。否则会出现被覆盖的问题。) - 2、创建分支,创建时加上创建分支的信息,如果主线合并到分支,该提交信息对应的revision number有用。避免被覆盖,总而言之,对应的为合并前最后一次提交的信息对应的revsion number。
- 3、更改
trunk
下的代码,实时提交,分支需要合并主干的内容时切换到分支(update directory
方式)。 - 4、
source2
(将xxx)合并到source1(xxxx)
,合并后相当于在work space
有未提交的内容,所以也得提交,总之不管谁被合并都得先提交自身。 - 5、当分支提交后切换到主干,再将分支合并到主干,由于分支此时代码 最新也最全(包含了主干的代码),直接以
HEAD
默认版本合并即可。
根据我所理解的分支开发,现在一步一步记录下我所操作的完成流程。
- 首先创建工程
SVNTestDemo
,可在文件夹中使用小乌龟将其添加到svn服务器上,之前开发的几年老是直接使用AS工具,就一个新建的工程可能要提交一天,特别费劲不可取。 - 通过小乌龟在
svn
服务器想要创建的地址下创建文件夹并命名该工程名,在其下面创建trunk、branches、tag
等文件
- 右击选择创建文件夹,选中
trunk
目录右击添加通过AS
创建的SVNTestDemo
工程文件夹,并将该工程下载到本地关联上svn
。
创建好的svn服务器工程目录
使用AS
的操作步骤流程
-
1,先创建分支
创建分支时主干最后一次提交
代码写上提交注释,该注释对应的revision number
很重要。创建成功后可更改主干的代码并提交。 创建分支二选一,一般选择从svn
服务器copy
路径。
-
2,切换到分支目录
分支路径可能不可以选,那可以直接复制对应的branches
地址粘贴进去即可。
注意:如果将 主干合并到分支时,因为要的是主干最新的内容,所以默认主干source2选择的revision为HEAD即可,而source1是source2创建的,也就是分支代码是跟主干创建分支前最后一次提交代码对应的revision的版本一致或者说就是创建分支时的代码一致(在svn上),而主线更改了,分支也可能更改了,所以合并的时候将最新的主线内容合并到创建主线之前的最后一次提交的revision number
代码合并,这样既能保证包含主线最新内容,也能检测出主线跟分支冲突的地方,也不干扰分支新建的内容。如果非首次合并,已经合并过了,那么分支选择为最后一次合并的revision number
。
根据上面的流程操作后到合并那步流程,如下
将分支合并到主干上。
问:
trunk提交了代码,合并到branches,trunk创建branches的commit id为1,trunk提交的commit id为2 合并的时候branches的指向为1,合并后提交的branches commit id为3,然后再次更改了trunk并提交为4,更改branches 并提交为5,那此时再将trunk合并到branches branches指向几?
答:最后合并没有提交,所以还是指向5,生成新的id6 ?
????