分支的基本概念就正如它的名字,开发的一条线独立于另外一条线,若是回顾历史,能够发现两条线分享共同的历史,一个分支老是从一个备份开始的,从那里开始,发展本身独有的历史(以下图所示)
⑴建立分支
假设目前咱们版本库中的项目的布局以下图:
如图所示,咱们的项目放在了trunk(主线)目录,另外还有branch(分支)和tags(标签)目录,这样的布局是为了更清晰的区别主线、分支和标签三者的位置。
subversion对分支和标签是经过复制一份最新的版本库的快照来实现的。
开始建立分支:
在咱们CheckOut的主线目录(trunk)上,右键点击而后选择“Branch/tag…”
在弹出的窗口中,将To Url 指向branch目录并输入分支的具体目录名,这里是mybranch1.0,咱们即将建立的分支便存放于此处,点击OK。
Update一下本地的branch目录,你就能够看到你刚刚建立的分支“mybranch1.0”,这样一来咱们的分支就建立完成了。
建立分支的最大的目的就是跟主线进行并行开发的时候不影响主线的开发。
由于你在分支上所作的提交都只存于分支上,主线上的Update是看不到分支的修改的。以下图所示,trunk只能看到r344的版本,并看不到r343的版本。
(何时应该使用分支呢?例如你接到了一个任务,完成这个任务须要三四我的的合做,大家之间须要共享资源,那们就能够建立一个专为此次任务的分支,参与这次任务的人员则在分支上作开发,等完成以后再合并到主线上,才不会出现将实现了一半的不完成功能也提交到主线上,影响主线的正常工做。又或者本身须要一个较长的开发周期来完成任务,这么长的时间内若是一直没有将资源进行提交,万一丢失了就前功尽弃了。固然分支不是只用于此类状况,还有其它不少种状况也能使用分支来达到目的。)
使用分支须要注意,因为长期的独立开发,可能会在合并回主线时出现较多的冲突。因此在支线上开发间期若是发现主干有更新,并且这个更新有可能未来跟你产生冲突,那你能够先将主线的内容合并到分支上。已免等到作了大量修改再来更新。(其实此过程跟分支合并到主线上是同样的操做,只是目的地不一样。)
例如咱们在主线上的版本为3,咱们如何将此版本的信息合并到分支上呢?
在分支的根目录上右键点击,选择“TortoiseSVNMerge…”。
在这里咱们必需先弄明白一个合并背后的关健概念
合并的过程当中发生的全部事:首先两个版本库树的比较,而后将区别应用到本地拷贝.
这个命令是包括三个参数的:
1. 初始的版本树 2.最终的版本树 3一个接收区别的工做拷贝。
弄明白这些概念以后咱们继续往下操做。
在弹出的窗口中,选择主线目录和其版本号(初始的版本树),再选择主线目录和最新的版本号(最终的版本树),这里也能够是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是mybranch1.0。
在合并以前咱们能够经过点击“Unified diff”,查看两版本树之间全部文件的内容的变化,“diff”显示出有发生变化的文件列表,“dry run”能显示真正合并时的状态信息,但并无作任何的合并操做。
咱们点击“Merge”。
在点击“Merge”,合并后的文件(即对分支上的文件补上了主线上修改的内容),如无冲突则能够在分支上像其它文件同样使用了,若是合并后的内容不满意,能够经过撤销来取消此次的合并操做,前提是未对合并后的文件作提交操做。
分支合并到主线跟从主线上合并内容到分支上相似
不一样的是
一、开始的版本库是分支建立的版本
二、结束的版本库是完成因此开发工做以后的版本
三、应用的目的是主线目录
关于转换工做拷贝、标签(标签在Subversion中跟分支是相同原理的,一个不去作任何的修改的分支就是版本库某一时刻的一个快照,至关于为某一个版本作了一个标签)布局