目的
多个版本中并行开发,提高开发效率;
保证各个版本和各个环境(开发、测试、主干)的独立,避免相互影响;
通过分支与主干的合并,这样主干永远是最新、最高版本,并且都在后面的测试中,保证了质量;
用分支进行bug修改,而主干上进行新功能的开发。分支上的bug修改完合并到主干上;
SVN目录结构
Trunk(开发库) :
主干目录,负责新功能的开发;
此目录下的文件为基准文件,放置稳定代码的主要环境;
开发人员日常开发的工作区,由开发者所控制;
Branches(受控库) :
测试版本代码存放的地方,需要开发组长提交测试申请修改;
用于开发的分支目录,修正当前发布版本的bug,与此同时主干上的开发正常进行,两边互不干扰;
当一个branch完成了,并且认为它足够稳定的时候,它必须合并回trunk;
Tags(产品库) :
存放基线库、发布版,是测试通过版本存放的地方;
基线,就是给版本建立一个映像(或着叫快照),并不占用服务器物理磁盘;
这个文件夹下的内容通常只有配置管理员可以修改,其他人只读;
分支
分支是给源项目创建副本,让每个工作组在各自的副本上进行开发,最后再将各个工作组的副本合并到源项目中。在此,各个副本被称作分支(branches),源项目被称为主干(trunk);
分支不是复制版本内容,而是做一个内部的引用,对服务器也没有空间上的开销;
分支定义规则
project name + 日期时间 + 版本号,比如:project_20150202_v1.0.3,在创建每一个分支时,必须增加标注。
创建分支
1. 项目->右键->Team->Branch/Tag;
2.“到URL”填写创建新分支的路径地址;
3.选择当前最新的版本;
4.如果勾选了“切换工作复本为新的分支/标记”,eclipse的程序项目会自动切换到分支下;
工作复本切换
1.项目->右键->Team->切换;
项目里就可以在主干和若干分支间进行任意切换,来实现对不同版本/分支的程序进行修改提交操作;
![](https://i-blog.csdnimg.cn/blog_migrate/eb11f077c325bf9ac741f0b6b417e2e6.png)
2.选择要切换的项目版本路径,切换到分支下的项目路径;
3.切换后项目路径已改变;
标记分支
1.项目->右键->Team->配置分支/标记;
2.选择一个分支项目标记为分支;
![](https://i-blog.csdnimg.cn/blog_migrate/d1c6333ad15d01ed95baad0c3376155c.png)
3.更改标记分支名称
![](https://i-blog.csdnimg.cn/blog_migrate/8d9c3c2400dbb657dc23fabd8493858c.png)
合并
当branch版本已经修改和通过测试后合并到trunk,可以合并整个项目也可以合并单个文件;
1.分支版本做了修改,添加了一行注释,提交SVN;
![](https://i-blog.csdnimg.cn/blog_migrate/5a27aadb705168e7f0a84c1c214135e4.jpeg)
2.切换到trunk版本,选中AndroidManifest.xml文件->右键->Team->合并;
![](https://i-blog.csdnimg.cn/blog_migrate/da2c503ac526ac03f002bf927ae5100c.jpeg)
3.分支合并到主干
![](https://i-blog.csdnimg.cn/blog_migrate/62bdf0c963f1ebecb77fa0701215d4ef.png)
注:
上图中的选项:
1) 从主干合并到分支
2) 从分支合并到主干
3) 将主干上的修改合并到分支
4) 合并2个分支到主干
5) 从主干到分支,手工指定不需要合并的修改
6) 从主干到分支,手工指定要合并的修改
4.选择之前打标记的项目分支;
![](https://i-blog.csdnimg.cn/blog_migrate/a19333ac0b77ab2b515afb1c96809bd7.png)
5.显示合并详细信息,合并完成之后,trunk下的文件将会被更新,注意这里只是合并到本地,还需要你再检查一下合并后的文件是否正确,然后commit提交到服务器;
![](https://i-blog.csdnimg.cn/blog_migrate/57137fa7013faa5d5c31acacce4af83e.jpeg)
6.建议合并后,再对trunk下对修改过的内容进行测试,最好一个点一个点的进行测试,保证合并后的内容是稳定无误的;
标注tags
1.tags的定义规则
2. branches测试完成后,修复完bug,通过branches生成tags;
![](https://i-blog.csdnimg.cn/blog_migrate/b9ff116d0591e1db6bf1e95529b3f55b.png)
3.给标注过的tags起一个唯一的名字;
![](https://i-blog.csdnimg.cn/blog_migrate/da03727059b6754fb7ed51673e5691ae.png)