刚看到有同学遇到这方面的问题,于是把自己以前看的总结一下,虽然一直用着!!

创建分支的意义:

简单说,分支就是用于区分开发版本与当前发布版本的。

    1、 主干负责新功能的开发

    2.、分支负责修正当前发布版本的bug(对于可以放入下个发布版本的改进性bug可以直接在主干上开发)

    3.、分支上修改的bug,经常性merge到主干上,尽量及时merge(避免大面积红色区域)。

    4.、只能分支往主干靠拢(merge),不能反向!

    5.、直到下个新版本发布,该分支停止修改

1、svn 创建分支

svn copy trunk_path branch_path -m ‘描述’

Svn的分支和标签操作都是复制一份副本。可能有人觉得,如果创建太多分支的话,不停的复制,服务器会不会太多东西了,负荷太重了,这个大可放心,svn的复制操作并不是真正的复制一份同样的数据,而是一个“钱复制”,它只是创建了一个链接而已,一个到主干的 连接。在你对分支没做任何修改之前,分支都只是一个链接,当你对分支的文件作了修改后,该文件在分支那才会真正的创建一个文件。如下代码,我在我的google code上面创建了一个我自己项目的分支

svn copy https://simaopig.googlecode.com/svn/trunk https://simaopig.googlecode.com/svn/branches/20091022 -m ‘a new branches’

提交后的修订版为 21。

2、svn 查看创建分支时的版本号

大家在上面的例子中看到了我的创建分支时的版本号为21。可是当我把分支里的内容改过,或者trunk的内容被别人改过后。就凭咱这脑袋是打死也不会记得这个创建分支时的版本号的。这可就成问题了,不知道合并哪些版本了。。

svn info查看最新版本

看现在的版本号变成23了,这才几分钟。如果时间长了的话。我真的会不记得这个创建分支时的版本号的。咋办呢?

svn log –verbose –stop-on-copy branch_path

看我执行该命令后的结果:

看到没,在最后一行,显示的那个版本号就是你创建该分支时的版本号。 stop on copy 多么形象啊。赞一个。

3、svn 合并分支:

内容改完了,要上线了。我们应该把分支的内容与trunk上的内容合并。咋合并呢?

#进入有trunk版本的目录中,也就是在主干目录把修改过的分支的代码合并过来svn merge -r 旧的版本号:现在的版本号 branch_path

4、svn 代码冲突的解决:

使用svn管理的代码可能有多个人在维护。哪怕就是你自己也可能让trunk和branch上面的代码产生冲突。合并后的C符号就是代表文件有冲突的意思。

我解决冲突的方法是手动去掉那些不必要的代码。看留哪个。但是去掉后一些svn冲突的文件仍然存在,咋办?

svn resolved 冲突的文件名

当手动解决完冲突后你会发现这些多出来的文件仍然存在,别怕,使用上面的命令:如果你的冲突真的解决了,那么多出来的文件会自动删除掉的。可比你自己手动rm要方便的多了。

5、eclipse中创建分支与合并

创建分支:我在eclipse中的项目(主干)上的svn url:  https://ajsdjksjmxmkase/svn/newrep/trunk/displaytag

然后在项目上右击——》Team——》分支/标记,出现如下:

修改URL为:https://ajsdjksjmxmkase/svn/newrep/branch/displaytag-branch,然后一直默认next就行了,此时可以看到在visual SVN的branch分支中有了display-branch项目(主干项目的copy),然后在eclipse中——》Team——》commit。

在创建了分支后,也可以不check out出分支项目到工作区,可以切换主干与分支:当你创建分支后,肯定是想在分支那修改东西。想修改分支的内容,要把本地的副本的切换到分支。操作步骤如下: 
在本地工作区的package Explorer面板里,右击要切换分支的文件,在弹出的菜单现在Team->切换,在”至URL“中填写刚才创建的分支URL对应文件,就切换到分支了,而不再是主干了,当你修改提交时也是修改分支的文件。

合并(把在分支做的修改合并到主干中):

测试:在eclipse中把刚才copy的分支项目check out到eclipse中,然后做些修改,然后提交,然后在主干项目上右击——》Team——》合并——》默认next——》然后单击update升级工作副本——》在Merge from中输入要合并的分支URL:https://ajsdjksjmxmkase/svn/newrep/branch/displaytag-branch,然后合并,会出现合并的状态,这时在eclipse中的主干中的对应的文件会有修改(来自分支的),然后在主干——》Team——》commit。这样就完成了分支到主干的合并。

反之,主干到分支也一样的操作。


下来是选项的含义:

合并选项:


1、合并一个范围的版本

此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。

2、复兴合并 
复兴合并可以理解为是第一种合并类型的一种特例,在复兴合并中,主干可以理解为是自从开创分支之后没有任何修改,而分支是经过修改的,而且合并中分支是没有版本选择的。经过复兴合并,分支中所有的修改都会合并到主干中,合并的结果将使得分支和主干一模一样,从而可以删除分支

4、合并两个不同的树 
此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;第二种类型是主干和分支都不能选择合并的版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。 
起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点) 
结束URL:选择要合并的分支的URL。 
起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。

5、仅记录的合并

选择此项意味着并没有实际的合并动作,只是在将来的合并过程中,svn将过滤掉此版本的修改动作。例如,我在合并的过程中,选择对分支的23版本只记录合并(阻止这个版本将来被合并),那么23版本并不会合并到主干中。在以后的合并中,如果选择合并分支的22到24版本,那么23版本将被忽略,要慎重使用这个选项,一旦使用了,那么表示这个版本在以后的合并中就不能再使用了。也就是:分支使用 --reintegrate 合并回主干后,如果继续在该分支上开发,当需要同步主干的修改到分支过来时,默认会包括之前 reintegrate 的修改,而这些修改已经在分支上做过了,所以这样往往会导致冲突。这也是前面“最佳实践”中最后一个建议的一个原因。当然,想要使这个分支继续可用也是可以的。忽略祖先:如果在分支上有一个文件曾经被删除过,后来又加了一个同文件名的文件,那么在merge的时候svn会识别到这两个文件不是同一个祖先而直接覆盖旧文件增加新文件。而实际上我是要对这两个不同祖先的文件进行合并的,这个时候就需要使用svn merge --ignore-ancestry 忽略祖先来进行合并才能保证正确。



合并深度:

一、工作副本:即你当前的工作目录,一般默认为这个选项;

二、全递归:即你选择的目录的版本库,包括了其下面的子文件,子文件夹,包括子文件夹里面的内容;

三、直接子节点,包括文件夹:即你选择的目录下面的文件,文件夹,但是不包括文件夹里面的子文件,子文件夹;

四、仅文件子节点:即你选择的目录下面的文件,但不包括文件夹,当然不包括的文件夹下面的所有内容也都不纳入合并范围; 五、仅此项:没有任何合并内容;

五、仅此项:没有任何合并内容。

SVN命令:http://www.blogjava.net/jasmine214--love/archive/2011/01/12/342839.html

SVN创建分支与合并(命令与界面)相关推荐

  1. SVN创建分支与合并分支

    SVN创建分支与合并分支 SVN忽略target文件夹 SVN创建分支 SVN合并分支 merge a range of revisions merge two different trees 合并分 ...

  2. Android studio使用svn创建分支及合并分支----终极图解

    Android studio使用svn创建分支及合并分支这里面涉及的内容比较多,比较复杂,大家要仔细看. 1,创建本地svn仓库(主干与分支现在都是空的) 2,创建一个安卓项目,这大家应该都会吧[My ...

  3. svn服务器创建分支原理,svn 创建分支、合并分支、以及报错处理

    Q:为什么要分支? A:项目开发一个迭代之后,在开发一个迭代之前,一般都是需要给项目设置分支,独立保存上一个版本的代码.这样有什么好处呢?比如说:开始下一个迭代,开发到一半的时候,发现上一个版本有一个 ...

  4. Visual Studio SVN创建分支 合并分支 切换分支 vs 插件 visualsvn

    Visual Studio SVN创建分支 合并分支 切换分支 vs 插件 visualsvn 使用场景 项目越来越大,开人人员越来越多.版本越来越多 项目中有不同的里程碑,不同版本.最悲催的是 ...

  5. idea使用svn拉取源码,创建分支,合并分支教程

    svn拉取源码,创建分支,合并分支教程 最近对svn的分支使用比较感兴趣了,花时间研究了一下,分享给大家: 此文章记录了idea使用svn的过程:包括拉取源码.建立分支.切换分支.合并分支等常用操作. ...

  6. idea创建分支、合并分支、解决分支冲突

    文章起因: 分支和版本控制,在工作的时候经常遇到分支合并,版本回退等问题,比较难受的就是在分支合并冲突的时候,要花很多时间去处理,因此做一个笔记记录,当然这个笔记是基于idea图形化工具去记录的,命令 ...

  7. AndroidStudio git 提交代码,创建分支,合并分支,回滚版本,拉取代码

    主要有: 提交代码,创建分支,合并分支,回滚版本,拉去代码 1 首先电脑中下载git 2 新建的项目把.git 仓库放到项目总中as 工具的右下角 会显示 Git:master 点击有一个弹框如下 然 ...

  8. git上传分支的原理_GIT分支,创建分支与合并分支的工作原理与教程

    开发一个版本,采用的发布流程: (1).从master的最新代码拉取一个开发分支,在上面进行开发 (2).在开发分支上不断地进行提交版本,期间,master也会有因为其他版本上线而不停有版本合并 (3 ...

  9. Git创建分支并合并到主分支

    Git创建分支并合并到主分支 1.创建分支 2.切换分支 3.合并分支代码 4.将master主分支push到远程仓库 5.将login分支push到远程仓库 1.创建分支 使用如下命令创建一个名称为 ...

  10. Git创建分支以及合并分支

    Git创建分支以及合并分支 首先我们准备了一个项目 最初内容: 查看当前所在分支: git branch 说明我们只有一个分支,现在我们新建一个分支: git branch dev git branc ...

最新文章

  1. linux时间 a x z,关于linux的命令一个莫名的想法,a到z有哪些命令
  2. mysql报错:Column 'id' in field list is ambiguous,以及tp的三表联合查询语句,打印sql等
  3. ASP.NET CORE 入门教程(附源码)
  4. 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian
  5. js 和 css动画
  6. 两条曲线所围成的面积_脆值(损坏边界曲线)
  7. appium环境搭建全套
  8. Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions
  9. 各类常用食物的热能含量及营养价值
  10. C# http请求挂代理
  11. 使用express+vue在网页上显示RTSP流视频
  12. android手机赚钱软件排行
  13. 如何选择一款适合你的外贸管理软件
  14. NRF51822 2.4G无线
  15. 字符串快速变dict字典key
  16. 什么是阻抗(Electrical impedance)
  17. java公路车组装教程_骑行入门:怎样组装一辆自行车——零部件的准备
  18. 016_jie_chu_b_zhan_qu_yu_xian_zhi
  19. 电子会议桌牌或将替代纸质桌牌标签
  20. ubuntu和win7双系统,重装win7后如何恢复Ubuntu启动项的问题。

热门文章

  1. 流量转发的思路-软件流量转发 管家婆 客户端 端口 更改
  2. 搜人2013笔试题(java)
  3. Lwip的udp编程
  4. DRM-widevine 总结
  5. Web前端工程师需要什么学历
  6. 即时通讯之xmpp协议简析
  7. 关于PopWindow的一些介绍
  8. VS2017使用C#编写COM组件
  9. sql server 2012序列号密钥
  10. js页面跳转与url获取