一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并。同时,在开发中,共通的部分修改后,其它人要保持同步。
这种情况反应到SVN的分支/合并功能上,再贴切不过了。
SVN可以为一个版本库中的内容(主干)建立一个分支.分支和主干完全独立,就相当于把代码再复制一份,重新添加到版本库中。但SVN提供另一个功能,就是把主干做出的修改合并到分支中,以及把分支修改的内容合并到主干中。当然,我们也可以把主干的版本库的路径切换到分支上,然后更新,来实现把分支的修改更新到主干;以及修改分支路径来同步主干的修改。但过程复杂,还容易出错。
SVN 的分支功能还提供一些合并的测试,可以在不改动版本路径的情况下完成上面的需求。
 
示例:
 
1.将一个整项目建一个分支.
 
 
 
建立时要注意:
 
1.当前复制源,即专业术语中的 "主干(truck)"
2.分支存放的位置. 当然,分支也是在SVN版本库中.
3.写上日志.这个大家应该懂的.
4.是否把主干的路径切换到分支.如果勾选了,建立分支后,在主干里做出的修改并提交后,更新会提交到分支上。主干的版本源内容不会变.
 
这时我们看一下 trunk 目录的属性,可以看到它的路径已经变成: /calc/branches/my-calc-branch 了。

 
为了避免产生困惑。以及失误。在建立的时候不要勾上 "切换到分支" 的选项。如果勾上了,我们还是切换回去:

 
注意:
 
1.主干的目录
2.版本库源路径
这时你便可以在 /calc/branches/my-calc-branch 分支上开发新的功能,且不会影响到其他成员开发或维护主干的内容。
 
2.合并主干的变更
也许过了一段时间,原本的 /calc/trunk 主干可能已经有其他成员陆续修正了一些 Bugs,但这时你的分支 /calc/branches/my-calc-branch 就可以直接套用主干 ( /calc/trunk ) 的更新,除了避免重复的工作外 ,也可以避免版本的冲突,因为多人改同样的文件可能发生冲突。
 
经常將 开发主干 ( /calc/trunk ) 的变更透过 svn merge 合并至 分支 ( /calc/branches/my-calc-branch ) 是一个非常好的习惯,这样才不会让你脱离主干(trunk) 过久而导致将分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 时发生许多冲突。

 
从主干 ( /calc/trunk ) 合并至分支 ( /calc/branches/my-calc-branch ) 通常选第 1 个,也就是 [Merge a range of revisions]
 
注意.我们是在分支上使用的 Merge 功能.因为是要在分支上应用主干的更新.

 
在 Merge 的窗口有以下注意事項:
 
1.合并的来源,由于我们打算从主干 ( /calc/trunk ) 合并至分支 ( /calc/branches/my-calc-branch ),所以合并的來源要选 /calc/trunk 才对!
2.合并的结果会直接与目前「工作目录」(Working Copy) 做比对,并修改目前工作目录中的所有文件。因此建议在做合并之前可以将所有尚未 commit 的档案先 commit 到版本库,避免不必要的冲突事件发生。

 
在正式进行合并(Merge)之前,建议先执行 Test merge 看看是否会发生什么事!
 
若无异状则可直接按下 [Merge] 按钮进行合并动作,这时从 主干 ( /calc/trunk ) 分支出来的到目前工作目录的版本就会做个比较,然后直接套用变更到你现有的文件、目录或属性里。

 

在合并之后如果没有发生冲突,不代表真的没冲突,所以必须再次对原始码做出验证后才能 commit 进版本库,建议可参考以下流程:
 
1.将项目进行建置(Build)
2.如果没问题再对项目进行单元测试(Unit Testing)或手动测试(Manual Testing)
3.如果都没问题再 commit 目前合并无误的版本到版本库!
 

 
3.合并分支到主干
最后我们的 my-calc-branch 分支已经将新功能开发完成且测试无误,所以要将 分支 ( /calc/branches/my-calc-branch ) 的最终版本合并回 主干 ( /calc/trunk ),这时的手续如下:

 
从 分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 通常选第 2 个,而特别选择 [Reintegrate a branch] 这个选项是很重要的,因为这有以下好处:
 
1.让 Subversion 能知道 主干 ( /calc/trunk ) 是从哪个分支、哪些版本合并进来的
2.有效节省 Subversion Repository (SVN储存库) 的空间,因为不用重复储存分支的所有变更信息
3.可以产生 Revision graph 得知项目开发的分支状况

 
一样可以先 测试合并(Test merge) 再正式进行 合并(Merge)

 
合并完后再将变更 commit 到版本库

 
4.删除使用完毕的分支
当 分支 ( /calc/branches/my-calc-branch ) 合并回 主干 ( /calc/trunk ) 并 commit 了之后,该分支就没用了,该分支如果未来不再更新或继续开发,Subversion 也不会继续追踪这个分支的变更 (因为之前已经 Reintegrate 过了),建议将该分支删除。

SVN - 主干/分支的更多相关文章

  1. compass(sass)+seajs+frozenui+frozenjs+svn主干分支

    1.compass框架 sass编译 1.compass create 项目名 2.cd目录,执行compass watch 2.frozen框架 js(frozen.js),css(global.c ...

  2. idea svn 主干分支切换

    使用快捷键ctrl+t或者点击工具栏中的 vcs update 出现如下窗口:点击复选框,在框2中进行选择你要切换的分支的地址,点击OK即可 : 查看是否切换成功可以再version control ...

  3. 解决版本冲突-使用SVN主干与分支功能

    解决版本冲突-使用SVN主干与分支功能 1  前言 大多数产品开发存在这样一个生命周期:编码.测试.发布,然后不断重复.通常是这样的开发步骤: 1)    开发人员开发完毕某一版本(如版本A)功能后, ...

  4. [0] 解决版本冲突-使用SVN主干与分支功能

    解决版本冲突-使用SVN主干与分支功能 1  前言 大多数产品开发存在这样一个生命周期:编码.测试.发布,然后不断重复.通常是这样的开发步骤: 1)    开发人员开发完毕某一版本(如版本A)功能后, ...

  5. SVN主干与分支的合并 ***

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

  6. [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)

    [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下) 本篇导读: 接上篇继续介绍SVN的高级功能,即使用分支并行开发.随着需求的不断变更,新功能的增加.特别是 ...

  7. svn 合并分支 等

    [转载]svn分支(branch)创建.合并(到trunk).冲突解决. Leave a reply 转载自:http://zccst.iteye.com/blog/1430823 一.创建分支 1, ...

  8. windows 下svn 创建分支 合并分支 冲突

    我用的系统是win7+Subversion 1.7.4.服务器搭建就略过了,我也是从网上找的,基本上就是几个命令吧!我用的CentOs6.5 .网上找了几个命令搭建很快,基本上是: 1.# sudo  ...

  9. SVN版本分支合并

    SVN,开发中常用的工具,也没什么可说的.这里只是记录一下,以免太久不用了想用的时候又忘了. 首先已经有两个目录,一个是分支目录SVNChild,一个是主干目录SVNMain.SVNChild是从SV ...

随机推荐

  1. Nginx简单性能调优

    Nginx默认没有开启利用多核CPU (忍不住吐槽,然怪总感觉服务器性能没充分发挥), 我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU.CPU是任务处理,计算最关键 ...

  2. (转)《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期

    C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对 ...

  3. 请给出一个左侧定宽右侧自适应的HTML结构及样式

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  4. 备份了一个nginx的虚拟主机配置文件报错

    [root@localhost vhost]# service nginx restart 停止 nginx:[确定] 正在启动 nginx:nginx: [warn] conflicting ser ...

  5. MySQL与Oracle主键Query性能测试结果

    测试结果总结如下: 1. 按主键读:SQL形式:SELECT * FROM table WHERE id=?. 1.1. 主键为数字.如果所有ID均不存在,纯比较SQL解析能力.MySQL解析SQL的 ...

  6. 去除C/C++程序代码中的注释

    最近搞软件著作权,去除代码空行和注释比较麻烦,想写个程序自动去除,去网上搜了下,发现有类似的程序,不过只有去除注释.鉴于word中可以去除空行(用^p^p替换^p),先用网上的代码,以后有时间写个完整 ...

  7. 彻底弄懂LSH之simHash算法

    马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说.这种说法同样适用于“经典”的计算机书籍. 最近一直在看LSH,不过由于matlab基础比较差,一直没搞懂.最近看的 ...

  8. 团体程序设计天梯赛-练习集L1-004. 计算摄氏温度

    L1-004. 计算摄氏温度 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈建海 给定一个华氏温度F,本题要求编写程序,计算对应的 ...

  9. The 5th Zhejiang Provincial Collegiate Programming Contest------ProblemK:Kinds of Fuwas

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1974 题意:问四个角都有同一个福娃的矩形有多少个. #include<b ...

  10. Spring+MyBatis实践—MyBatis数据库访问

    关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...