下面我将step by step地演示如何一次完整的branching和merging,包括创建分支、分支开发、分支和主线同步,分支合并到主线的全过程,甚至包括如何在本地创建一个测试用的repository。

  注意:主干分支的合并,是与本地库做比较,即,合并的结果会直接与目前「工作目录」(Working Copy) 做比对,并修改目前工作目录中的所有文件。因此建议在做合并之前可以将所有尚未 commit 的档案先 commit 到版本库,避免不必要的冲突事件发生。由于合并的结果在本地库,所以本地库要做一次提交,才能形成最终的版本库。

1、本地Repository的创建

repository的创建很简单,假设我要在D:\TortoiseSVN\TestRepository目录中创建repository,只需右键TestRepository目录,依次选择"TortoiseSVN" -> "Create repository here"便完成了repository的创建。

2、Check out

假设要check out到D:\TortoiseSVN\TestSVN,同样很简单,在D:\TortoiseSVN目录下创建TestSVN目录,然后在该目录上右键,选择"SVN Check out...",在弹出的窗口中的"URL of repository"中填入"file:///D:/TortoiseSVN/TestRepository",其他默认即可,最后点击ok。

3、trunk创建新项目MyProject

相当简单就不赘述了,只列出本次操作所作出的修改:

4、创建branch

在/trunk/MyProject目录上右键,依次选择"TortoiseSVN" -> "Branch/tag...",在弹出窗口的"To URL"中填入分支的地址,在这里目标revision选择HEAD revision,如下图所示,添加log后点击ok分支便建立了。这个操作速度非常快,新建的branch在repository中其实只是一个指向trunk某个revision的软连接而已,并没有真的复制文件。

5、Check out分支

右键TestSVN目录选择"TortoiseSVN Update"即可将刚刚建立的分支下载回本地。进入/branches/MyProject目录下你会发现其文件结构和/trunk/MyProject一模一样。

6、branch提交一个新文件

7、trunk紧接着提交一个修改

8、branch再次提交一个修改

9、将trunk中的修改同步到branch

6-8演示的是branch和trunk在独立、并行地开发。为了防止在“错误”的道路上越走越远,现在branch意识到是时候和trunk来一次同步了(将trunk合并到branch)。

首先,在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步,然后在/branches/MyProject上右键,依次选择"TortoiseSVN" -> “Merge...”,在弹出的窗口中选择第一项"Merge a range of revision",这个类型的Merge已经介绍得很清楚,适用于将某个分支或主线上提交的多个revision间的变化合并到另外一个分支上。

点击next后,出现如下窗口:

由于是要从trunk合并到branch,理所当然这里的"URL to merge from"应该填trunk的路径,"Revision range to merge"很好理解,就是你要将trunk的哪些revision所对应的变化合并到branch中,可以是某一连串的revision,比如4-7,15-HEAD,也可以是某个单独的revision号。由于在r4中,trunk修改了Person.Java中的talk()方法,所以这里的revision只需填4即可。点击next后出现下图:

在这里只需保留默认设置即可。在点击Merge按钮前你可以先Test merge一把,看成功与否,以及merge的详细信息。点击Merge按钮后trunk所做的修改将同步到branch中。

10、提交合并后的branch

至此,branch已经完全和trunk同步,branch和trunk的代码相处很融洽,没有任何冲突,如果branch已经开发结束,那是时候将branch合并回trunk了,当然,如果branch还要继续开发,那你将不断地重复6-10这几个步骤。

11、将branch合并回trunk

在/trunk/MyProject上右键(注意是在主线的目录上右键),依次选择"TortoiseSVN" -> "Merge...",在弹出的窗口中,Merge type选择第二项"Reintegrate a branch",这种类型的合并适合在分支开发结束后将所有的改动合并回主线。

点击next后出现如下窗口:

在这里,"From URL"选择/branches/MyProject,无需选择revision号,Reintegrate会将branch上所有修改合并到trunk。后面的步骤和上文第9步中的一样,不再啰嗦了。如无意外,branch将成功合并到trunk,你需要做的只是将合并后的trunk赶紧commit!

12、提交合并后的trunk

合并后的项目上右键,Temp -> Commit。

13、删除branch

如果你认为你新加的功能已经开发完成了,你可以删除你的分支!

14、查看log信息

到这里,我已经给你演示完了整个过程,不过最后我们还是看看所有的log信息吧,通过log能发现我们干的所有事情:

r1-r7正是我上文在干的事情,从Message中你能发现我对trunk和branch都干了什么,另外,在Log Messages窗口的左下角勾选了"Include merged revisions"你还能看到额外的Merge information:

图中灰色的是和merge相关的log,共发生了两次merge,第一次是在r6,在r6中,branch合并了trunk在r4时提交的变化;第二次是在r7,在r7中,trunk合并了branch从r2到r6的所有变化。

分类: SVN

SVN主干与分支的合并相关推荐

  1. svn主干开辟分支、分支合并到主干

    从主干拉出分支: 1,右键本地svn主干项目,先从主干拉去一个分支 2,指定分支在svn上的路径 3,此时可以将分支checkOut到本地,在分支上进行新版本的开发 把分支合并到主干: 1,当新功能开 ...

  2. 如何在Intellij IDEA中管理svn并进行分支的合并

    本文重点: 1.在svn服务中创建分支主干项目: 2.从主干中拉出分支: 3.将分支合并到主干中,分支与分支之间的合并: 注意:这里的主干和分支都是相对而言的也可以在分支上在创建分支,原来的分支就可以 ...

  3. SVN使用之分支、合并

    首先说下为什么我们需要用到分支-合 并.比如项目demo下有两个小组,svn下有一个trunk版.由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正 进行到一半的工作[ ...

  4. SVN主干到分支的详细操作!

    注:一下就是遇到冲突解决冲突,本文档正在进一步的完善,等待探索更新! 1.创建仓库 首先我们现在SVN中先创建一个仓库,添加用户,分配权限! 2.创建分支: 体步骤详见以下过程 点击Branch/ta ...

  5. svn 主干和分支项目代码更新与同步

    2019独角兽企业重金招聘Python工程师标准>>> 一.trunk -> branch 由于一些新特性和功能的开发.经常把从个人分支合入到主干trunk,几次之后发现别的同 ...

  6. SVN分支与合并【超详细的图文教程】(转载)

    SVN分支与合并 一. 分支与合并的概念 二. SVN分支的意义 三. 如何创建分支与合并分支 一.分支与合并的概念: 分支:版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上.这 ...

  7. 版本管理-SVN分支,合并,切换

    作者:vuefine 文献: svn帮助文档 您将透过学习一个实际应用SVN 管理项目的例子,深刻体会SVN 中的分支,合并,切换的概念,应用场景,更加深刻体会它们的作用. 1 分支 1.1 为什么需 ...

  8. svn拉取文件合并_SVN分支与合并【超详细的图文教程】(转载)

    SVN分支与合并 一.分支与合并的概念 二.SVN分支的意义 三.如何创建分支与合并分支 一.分支与合并的概念: 分支:版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上.这条线被 ...

  9. SVN:将分支合并到主干

    环境:1.该例子在eclipse Mars上的SVN插件上进行操作: 1.在主干项目上:右击--Team--合并. 2.根据提示选择第一种合并方式,并且将最下面的复选框的对勾去掉. 详解Merge i ...

最新文章

  1. PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组EC、通路、KO(200806更新)
  2. 运维工程师该干什么学些什么
  3. Kubuntu 9.10设置支持文件分级的方法
  4. Python基础高级用法,必须要掌握的知识点
  5. [poj3692]Kindergarten
  6. Linux线程(四)
  7. 网易云音乐刷听歌量_网易云音乐极速版悄然上线!听歌体验同之前没有差别
  8. jenkins pipeline_Jenkins流水线(pipeline)实战之:从部署到体验
  9. Java Tomcat SSL 服务端/客户端双向认证
  10. R语言保存EXCEL小技巧
  11. xp计算机u盘重装系统,传授如何使用u盘安装xp系统呢?教你安装步骤
  12. Linux创建WIFI热点
  13. 【网络攻防技术】实验九——嗅探与欺骗实验
  14. 【Vuejs】1454- 深入了解 vue-cli
  15. C4D和3DMAX有什么区别?选哪个好?
  16. FACIAL: Synthesizing Dynamic Talking Face with Implicit Attribute Learning 论文解读
  17. 需求分解 设计_分解设计专业知识
  18. 手机拍照要注意光线问题
  19. 汽轮机振动的日平均峰峰值的BP神经网络预测matlab仿真
  20. 马化腾:腾讯不会申请虚拟运营商牌照

热门文章

  1. mysql不支持python3吗_MySQL的4种事务隔离级别你还不清楚吗?
  2. 树莓派工程设计常见问题与处理
  3. mysql之慢日志查询
  4. vue项目打包到腾讯云服务器全过程
  5. css3-响应式布局
  6. 【JZOJ3636】【BOI2012】Mobile(mobile)
  7. json相关,浏览器打开json格式的api接口时,进行格式化,chrome插件
  8. 数字证书格式详细说明【转】
  9. 《那些年啊,那些事——一个程序员的奋斗史》——39
  10. [项目管理]团队管理中的起点:尊重