《SVN宇宙版教程》:第四章 TortoiseSVN核心技能之分支与合并-2

4.2 合并Merge操作

分支branches开发结束之后往往需要合并到主线trunk中,但由于分支与主线有可能存在很多冲突的地方,那么在合并Merge时经常需要用手工的方式来解决这些冲突。

下面的章节将介绍不同情况的合并Merge操作。

4.2.1 Merge range of revisions选项

与合并Merge有关的Merge range of revisions选项的作用可以将主线trunk(分支branches)多个revision版本中的内容合并到分支branches(主线trunk)中。在使用Merge range of revisions选项的过程中可以选择revision版本来进行合并,这是Merge range of revisions选项的特色。

如果操作的工作副本文件夹是主线的,则合并的范围是分支上的改动,如果操作的工作副本文件夹是分支的,则合并范围是主线上的改动,并且需要注意的是,合并的起始位置URL一定要和当前操作的工作副本对应仓库的URL是相同的。

4.2.1.1 主线不更改分支更改-将分支合并到主线

Step01:初始化实验环境,删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.59所示。

图4.59 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.60所示。

图4.60 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.61所示。

图4.61 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.62所示。

图4.62 导出到桌面atest文件夹revision值是5

 

Step05:再对atest创建分支,配置分支的代码如图4.63所示。

图4.63 创建分支的配置界面

 

    Step06:单击OK按钮成功创建了分支如图4.64所示。

图4.64 分支的revision版本号+1变成6

 

    Step07:将分支仓库file:///C:/svn_repository/a/branches/atestA导出到桌面atestABranches文件夹,成功导出的效果如图4.65所示。

图4.65 导出分支仓库

 

    Step08:更改桌面的atestABranches文件夹中的a.txt内容如图4.66所示。

图4.66 更改分支中的内容

 

    Step09:对文件夹atestABranches调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/branches/atestA路径中,成功Commit提交效果如图4.67所示。

图4.67 成功提交

 

    Step10:继续更改桌面的atestABranches文件夹中的a.txt内容如图4.68所示。

图4.68 继续更改分支中的内容

 

    Step11:对文件夹atestABranches调用Commit菜单后将最新版的代码再次提交到file:///C:/svn_repository/a/branches/atestA路径中,成功Commit提交效果如图4.69所示。

图4.69 成功提交revision变成8

 

    前面步骤第1次Commit时产生的revision值是7,第2次Commit时产生的revision值是8。将最新版的代码的内容要阶段性,经常性的提交到SVN仓库是一个好的习惯。

Step12:现在实验的环境是有一个主线仓库a及分支仓库atestA,现在想要把atestA分支中的代码合并Merge到主线trunk中,因为分支中的代码已经设计完毕。

    Step13:在继续操作之前先来看一下Merge合并操作过程中需要配置的一个界面选项如图4.70所示。

图4.70 配置合并Merge的类型

 

在此界面中有3个选项可以被选择,这3个选项的作用分别是:

(1)Merge a range of revisions合并一个版本范围,将主线(分支)合并到分支(主线),合并的过程中可以选择revision值。

(2)Reintegrate a branch复兴分支,将主线(分支)合并到分支(主线),合并的过程中不可以选择revision值。

(3)Merge two different trees合并两个不同的树,此方法适用于合并两个分支的差异到工作副本。

那么在本示例中想要将分支合并到主线,上面3个选项都可以使用,所以先来测试一下使用Merge a range of revisions选项来进行合并。

    回顾一下,现在的情况是主线的工作副本,也就是桌面的atest文件夹中的代码没有被更改,而分支工作副本,也就是桌面atestABranches文件夹中的代码被更改了,而且还将更改的内容提交到分支atestA的仓库中,那么下一步就是将服务器端分支仓库atestA中的代码合并到主线工作副本,也就是桌面atest文件夹中。

Step14:继续操作,一定要对桌面atest 文件夹调用Merge菜单,而不要对atestABranches文件夹调用Merge菜单,另外在调用Merge菜单之前最好对桌面的atest文件夹执行一下Update菜单,以便将atest工作副本中的内容更新到最新版,因为有可能其它人在这个过程中更新了atest仓库,如果有冲突还要解决冲突。

Step15:对文件夹atest调用Merge菜单如图4.71所示。

图4.71 调用Merge菜单

 

    Step16:单击Merge菜单后的弹出窗口如图4.72所示。

图4.72 在配置Merge窗口中选择第1项

 

    Step17:单击Next按钮出现界面如图4.73所示。

图4.73 设置URL to merge from是服务端分支的路径

 

选项Revision range to merge是选择要合并的版本号,在这里不设置,代表要将分支的最新版合并到atest工作副本中。

    而Working Copy选项的作用是要将上面URL中的内容合并到下面Working Copy的工作副本路径中,如图4.74所示。

图4.74 向哪个工作副本进行合并

 

    Step18:单击Next按钮继续配置出现界面如图4.75所示。

图4.75 配置Merge选项默认即可

 

    Step19:单击Merge按钮开始合并,效果如图4.76所示。

图4.76 成功合并

 

    Step20:这时桌面文件夹atest中a.txt文件的内容如图4.77所示。

图4.77 文件a.txt被更改

 

    Step21:下一步对桌面的atest文件夹调用Commit菜单将内容更新到路径file:///C:/svn_repository/a/trunk中,效果如图4.78所示。

图4.78 成功更新到仓库a中

 

    Step22:而仓库a中a.txt的内容也是最新版如图4.79所示。

图4.79 成功更新的a.txt文件在仓库a中

 

4.2.1.2 主线更改分支不更改-将分支合并到主线

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.80所示。

图4.80 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.81所示。

图4.81 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.82所示。

图4.82 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.83所示。

图4.83 导出到桌面atest文件夹revision值是5

 

Step05:再对atest创建分支,配置分支的代码如图4.84所示。

图4.84 创建分支的配置界面

 

    Step06:单击OK按钮成功创建了分支如图4.85所示。

图4.85 分支的revision版本号+1变成6

 

    Step07:分支atestA中的a.txt文件旧内容如图4.86所示。

图4.86 分支atestA中a.txt的旧内容

 

    Step08:继续更改桌面atest文件夹中的代码如图4.87所示。

图4.287 桌面atest文件夹a.txt更改内容

 

    Step09:对桌面atest文件夹调用Commit提交命令提交到路径file:///C:/svn_repository/a/trunk中,成功提交后的效果如图4.88所示。

图4.88 成功更改主线

 

    Step10:仓库a中的内容如图4.89所示。

图4.89 仓库中的内容也同步更改

 

现在的情况是主线仓库被更改,分支还是旧版没有被更改,下面的实验是想将分支中的代码合并到主线中,也就是用分支中的旧代码将主线中的新代码进行替换,来看看会出现什么样的情况。
    Step11:在进行合并之前先对atest文件夹调用Update菜单以便将工作副本更新到最新版,这是一个好习惯,Update更新后的效果如图4.90所示。

图4.90 更新Update后revision的值是7

 

Step12:对文件夹atest调用Merge菜单后还是选择第1项,单击Next按钮后显示如图4.91所示的界面:

图4.91 URL to merge from写上分支的路径

 

    Step13:单击Next按钮后再单击按钮出现如图4.92所示界面:

图4.92 成功合并

 

    Step14:桌面atest文件夹中的a.txt内容如图4.93所示。

图4.93 文件a.txt的内容没有被替换

 

    通过此实验可以得知,如果服务器端的分支仓库中的内容没有被更改,而在桌面主线工作副本中的内容被更改并且已经提交到仓库时,在后面合并的过程中,主线工作副本文件a.txt中的新内容没有被分支仓库中的a.txt文件的旧内容所替换,因为主线工作副本中a.txt的revision值比分支工作副本a.txt的revision值大,在合并时不会将revision值小的文件内容覆盖到revision值大的文件内容,一句话总结:旧分支中的内容不能合并到新主线中,新分支中的内容可以合并到旧主线中。

4.2.1.3 主线更改分支也更改-将分支合并到主线

    Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.94所示。

图4.94 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.95所示。

图4.95 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.96所示。

图4.96 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk路径file:///C:/svn_repository/a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.97所示。

图4.97 导出到桌面atest文件夹revision值是5

 

Step05:再对atest创建分支,配置分支的代码如图4.98所示。

图4.98 创建分支的配置界面

 

    Step06:单击OK按钮成功创建了分支如图4.99所示。

图4.99分支的revision版本号+1变成6

 

    Step07:将分支仓库路径file:///C:/svn_repository/a/branches/atestA导出到桌面atesetBranches文件夹中,如图4.100所示。

图4.100 成功将分支仓库导出到桌面atesetBranches文件夹中

 

    Step08:更改桌面atest文件夹中的代码如图4.101所示。

图4.101 桌面atest文件夹a.txt更改内容

 

    Step09:对atest文件夹执行Commit提交后的效果如图4.102所示。

图4.102 对atest成功提交

 

    Step10:继续更改桌面atesetBranches文件夹a.txt的内容如图4.103所示。

图4.103 更改桌面atesetBranches文件夹a.txt的内容

 

    Step11:对atesetBranches文件夹执行Commit提交后的效果如图4.104所示。

图4.104 对atesetBranches成功提交

 

现在实验的环境是分支仓库的工作副本和主线仓库的工作副本的内容都被更改并且都已经被Commit到所对应的仓库中。在后面的步骤中会出现很多不同的情况等待我们去处理冲突,所以步骤操作到现在应该为系统的环境做一个“快照”,制作快照的步骤其实就是把路径C:\svn_repository中的a文件夹及桌面的atest和atesetBranches文件夹复制到桌面新建文件夹中,如图4.105所示。

图4.105 保留系统环境的快照

 

Step12:下一步要将分支工作副本中的内容合并到主线工作副本中,先对文件夹atest调用Update菜单以便将内容更新到最新版。

Step13:继续操作,对文件夹atest调用Merge菜单后还是选择第1项选项,单击Next按钮后显示如图4.106所示的界面:

图4.106 继续配置分支的路径

 

    Step14:单击Next按钮后再单击按钮出现如图4.107所示界面:

图4.107 出现冲突

 

    出现冲突的原因很简单,就是主线副本被更改而分支工作副本也被更改,这时就得解决冲突。

    Step15:在此步骤中单击按钮代表使用主线工作副本atest文件夹中a.txt的内容,单击后的运行效果如图4.108所示。

图4.108 成功合并

 

    Step16:而主线工作副本atest中a.txt的内容还是保持不变如图4.109所示。

图4.09 主线工作副本a.txt的内容保持不变

 

    至此按钮的作用已经演示完成。

    Step17:下一步初始化实验环境,将C:\svn_repository中a文件夹删除,再删除桌面的atest和atesetBranches文件,将桌面“新建文件夹”中的内容各就各位。

    Step18:再次对atest文件夹调用Merge菜单,还是选择第1项,在单击Merge合并按钮时再次弹出界面如图4.110所示。

图4.110 出现解决冲突的界面

 

    Step19:这次单击按钮代表使用分支仓库中的内容进行合并,成功合并后的效果如图4.111所示。

图4.111 使用分支仓库中的内容进行合并

 

    Step20:桌面atest文件夹中a.txt的内容就是分支中的内容如图4.112所示。

图4.112 文件a.txt是分支中的内容

 

    至此按钮的作用已经演示完成。

    Step21:下一步初始化实验环境,将C:\svn_repository中a文件夹删除,再删除桌面的atest和atesetBranches文件,将桌面“新建文件夹”中的内容各就各位。

Step22:再此对atest文件夹调用Merge菜单,还是选择第1项,在单击Merge合并按钮时再次弹出解决冲突的界面,这次单击按钮代表手动解决这个冲突后再合并,单击后弹出手动解决冲突的TortoiseMerge工具,如图4.113所示。

图4.113 手动解决冲突改变文本内容

 

    Step23:编辑完文本后单击左上角的保存按钮进行文本的保存,关闭TortoiseMerge工具后显示界面如图4.114所示。

图4.114 单击Resolved按钮代表冲突已解决

 

    Step24:然后出现成功合并的效果如图4.115所示。

图4.115 成功合并

 

    Step25:桌面atest文件夹中a.txt的内容就是手动解决冲突合并后的效果,如图4.116所示。

图4.116 最终a.txt的内容

 

    至此按钮的作用已经演示完成。

    Step26:下一步继续初始化实验环境,将C:\svn_repository中a文件夹删除,再删除桌面的atest和atesetBranches文件,将桌面“新建文件夹”中的内容各就各位。

Step27:再此对atest文件夹调用Merge菜单,还是选择第1项,在单击Merge合并按钮时再次弹出解决冲突的界面,这次单击按钮,它的作用是先合并无冲突的文件,有冲突的文件在后面再延迟去解决,而按钮的作用是可以有选择性的对某一个文件的冲突进行延迟解决。

Step28:单击按钮后出现如图4.117所示。

图4.117 先合并后解决冲突

 

    Step29:查看桌面atest文件夹中的内容如图4.118所示。

图4.118 文件夹atest中有冲突发生

 

    Step30:对桌面的文件夹atest调用“Check for modifications”菜单如图4.119所示。

图4.119 工作副本的状态有冲突

 

    Step31:双击a.txt文件进行手工编辑如图4.120所示。

图4.120 手动编辑内容

 

    Step32:然后单击左上角的按钮保存编辑后的文本再单击按钮代表解决了这个冲突。当回到“Check for modifications”窗口时单击按钮冲突消失了,如图4.121所示。

图4.121 对延迟的冲突手动解决了

 

    Step33:关闭“Check for modifications”窗口对atest文件夹调用Commit菜单如图4.122所示。

图4.122 成功提交

 

    Step34:仓库a中的内容也是最新版如图4.123所示。

图4.123 仓库a中的内容

 

4.2.1.4 主线不更改分支更改-将主线合并到分支

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.124所示。

图4.124 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.125所示。

图4.125 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.126所示。

图4.126 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.127所示。

图4.127 导出到桌面atest文件夹revision值是5

 

Step05:再对桌面的atest工作副本的最新版创建分支,将分支存储在a仓库的branches/atestA路径中,创建完分支后revision的值是6。

    Step06:将分支仓库file:///C:/svn_repository/a/branches/atestA导出到桌面atestABranches文件夹,导出的revision版本号也是6。

    Step07:更改桌面的atestABranches文件夹中的a.txt内容如图4.128所示。

图4.128 更改分支中的内容

 

    Step08:对文件夹atestABranches调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/branches/atestA分支仓库的路径中,成功Commit提交效果如图4.129所示。

图4.129 成功提交

 

现在实验的环境是有一个主线仓库a的工作副本文件夹atest,它在桌面中,还有分支仓库atestA的工作副本atestABranches,它也在桌面中,后面的步骤想要把服务端主线仓库中未改变的代码合并到更改过代码的分支工作副本中。

Step09:继续操作,一定要对桌面atestABranches文件夹调用Merge菜单,而不要对atest文件夹调用Merge菜单,另外在调用Merge菜单之前最好对桌面的atestABranches文件夹执行一下Update菜单,以便将atestABranches工作副本中的内容更新到最新版,因为也有可能其它人在这个过程中更新了atestA仓库,如果有冲突还要解决冲突。

Step10:对文件夹atestABranches调用Merge菜单后的弹出窗口如图4.130所示。

图4.130 在配置Merge窗口中选择第1项

 

    Step11:单击Next按钮出现界面如图4.131所示。

图4.131 配置a仓库的URL

 

    Step12:单击Next按钮继续配置出现界面如图4.132所示。

图4.132 配置Merge选项默认即可

 

    Step13:单击Merge按钮开始合并,效果如图4.133所示。

图4.133 成功合并未出现异常

 

    Step14:这时桌面文件夹atestABranches中a.txt文件的内容如图4.134所示。

图4.134 文件a.txt未更改

 

Step15:而仓库a中a.txt文件的内容是图4.135所示。

图4.135 仓库a中存储的是旧版的文件内容

 

    通过此实验可以得知旧版主线中的内容不能覆盖到新版分支中。

4.2.1.5 主线更改分支不更改-将主线合并到分支

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.136所示。

图4.136 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.137所示。

图4.137 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.138所示。

图4.138 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.139所示。

图4.139 导出到桌面atest文件夹revision值是5

 

Step05:再对桌面的atest工作副本的最新版创建分支,将分支存储在a仓库的branches/atestA路径中,创建完分支后revision的值是6。

    Step06:将分支仓库file:///C:/svn_repository/a/branches/atestA导出到桌面atestABranches文件夹,导出的revision版本号也是6。

    Step07:更改桌面的atest文件夹中的a.txt内容如图4.140所示。

图4.140 更改主线工作副本的a.txt文件内容

 

    Step08:对主线Trunk工作副本文件夹atest调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/trunk路径中,成功Commit提交效果如图4.141所示。

图4.141 成功提交

 

现在实验的环境是有一个主线仓库a的工作副本atest,它在桌面中,还有分支仓库atestA的工作副本atestABranches,它也在桌面中,后面的步骤想要把主线中新代码合并到分支工作副本的旧代码版本中。

Step09:继续操作,一定要对桌面atestABranches文件夹调用Merge菜单,而不要对atest文件夹调用Merge菜单,另外在调用Merge菜单之前最好对桌面的atestABranches文件夹执行一下Update菜单,以便将atestABranches工作副本中的内容更新到最新版,因为也有可能其它人在这个过程中更新了atestA仓库,如果有冲突还要解决冲突。

Step10:对文件夹atestABranches调用Merge菜单后的弹出窗口中还是选择第1项,选择后单击Next按钮出现界面如图4.142所示。

图4.142 配置仓库a的URL

 

    Step11:单击Next按钮继续配置出现界面如图4.143所示。

图4.143 配置Merge选项默认即可

 

    Step12:单击Merge按钮开始合并,效果如图4.144所示。

图4.144 成功合并未出现异常

 

    Step13:这时桌面文件夹atestABranches中a.txt文件的内容如图4.145所示。

图4.145 文件a.txt内容和主线中一样

 

    到此分支中的内容和主线中的内容一样了。

4.2.1.6 主线更改分支也更改-将主线合并到分支

    主线中的代码被更改,而分支中的代码也被更改,然后将主线中的代码合并到分支中时,那就有可能出现冲突,需要解决冲突。

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.146所示。

图4.146 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.147所示。

图4.147 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.148所示。

图4.148 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.149所示。

图4.149 导出到桌面atest文件夹revision值是5

 

Step05:再对桌面的atest工作副本的最新版创建分支,将分支存储在a仓库的branches/atestA路径中,创建完分支后revision的值是6。

    Step06:将分支仓库file:///C:/svn_repository/a/branches/atestA导出到桌面atestABranches文件夹,导出的revision版本号也是6。

    Step07:更改桌面的atest文件夹中的a.txt内容如图4.150所示。

图4.150 更改主线工作副本的a.txt文件内容

 

    Step08:对工作副本文件atest调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/trunk路径中,成功Commit提交效果如图4.151所示。

图4.151 成功提交

 

    Step09:更改桌面的atestABranches文件夹中的a.txt内容如图4.152所示。

图4.152 更改atestABranches工作副本的a.txt文件内容

 

    Step10:对工作副本文件atestABranches调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/branches/atestA路径中,成功Commit提交效果如图4.153所示。

图4.153 成功提交

 

Step11:继续操作,一定要对桌面atestABranches文件夹调用Merge菜单,而不要对atest文件夹调用Merge菜单,另外在调用Merge菜单之前最好对桌面的atestABranches文件夹执行一下Update菜单,以便将atestABranches工作副本中的内容更新到最新版,因为也有可能其它人在这个过程中更新了atestA仓库,如果有冲突还要解决冲突。

Step12:对文件夹atestABranches调用Merge菜单后还是选择选项来将仓库中的内容合并到atestABranches工作副本中。

    Step13:单击Next按钮出现界面如图4.154所示。

图4.154 配置URL

 

    Step14:单击Next按钮继续配置出现界面如图4.155所示。

图4.155 配置Merge选项默认即可

 

    Step15:单击Merge按钮后出现解决冲突的界面,如图4.156所示。

图4.156 解决冲突

 

此界面在前面的章节中也有介绍,可以用手动的方式解决冲突就可以了。

到此Merge range of revisions选项的常用用法已经介绍完毕,通过上面的6个实验可以知道Merge range of revisions选项可以将分支合并到主线,也可以将主线合并到分支。

4.2.1.7 选项Revision range to merge的含义-单版本号

    在使用Merge range of revisions类型合并时会出现一个Revision range to merge选项,它的作用是在合并时可以选择欲合并的revision版本号。

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.157所示。

图4.157 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.158所示。

图4.158 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.159所示。

图4.159 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.160所示。

图4.160 导出到桌面atest文件夹revision值是5

 

Step05:再对atest创建分支,配置分支的代码如图4.161所示。

图4.161 创建分支的配置界面

 

    Step06:单击OK按钮成功创建了分支如图4.162所示。

图4.162 分支的revision版本号+1变成6

 

    Step07:分支atestA中的a.txt文件旧内容如图4.163所示。

图4.163 分支atestA中a.txt的旧内容3的后面有光标

 

    将分支路径file:///C:/svn_repository/a/branches/atestA中的内容导出到桌面atestABranches文件夹中。

    Step08:继续更改桌面atestABranches文件夹中的代码如图4.164所示。

图4.164 字符4的后面有光标

 

    Step09:对桌面atestABranches文件夹调用Commit提交命令提交到分支仓库中,成功提交后的效果如图4.165所示。

图4.165 分支成功被提交

 

    Step10:继续更改桌面atestABranches文件夹中的代码如图4.166所示。

图4.166 字符5的后面有光标

 

    Step11:对桌面atestABranches文件夹调用Commit提交命令提交到分支仓库中,成功提交后的效果如图4.167所示。

图4.167 分支成功被提交

 

前面2个步骤中在分支仓库中产生了值为7和8的revision值。

Step12:对当前的实验环境设置一个快照,全部内容存储在新建文件夹中,如图4.168所示。

图4.168 保存快照

 

    在进行合并之前先对atest文件夹调用Update菜单以便将工作副本更新到最新版,这是一个好习惯。

Step13:对文件夹atest调用Merge菜单后还是选择第1项,单击Next按钮后显示如图4.169所示的界面:

图4.169 设置合并的revision值是8

 

    Step14:单击Next按钮后再单击按钮出现如图4.170所示界面:

图4.170 成功将revision值为7的版本合并到主线工作副本中

4.2.1.8 选项Revision range to merge的含义-版本号范围

选项Revision range to merge的使用还有另外一种方式,就是定义合并的版本号范围。

Step01:创建实验用的仓库test,如图4.171所示。

图4.171 创建实验用的仓库test

 

    Step02:将空的test仓库导出Checkout到桌面test文件夹中,效果如图4.172所示。

图4.172 导出空的仓库到桌面test文件夹

 

    Step03:在桌面的test文件夹中创建a.txt文件,编辑内容并提交,效果如图4.173所示。

图4.173 提交a.txt内容到仓库中

 

    Step04:从桌面的test文件夹创建一个分支,配置效果如图4.174所示。

图4.174 创建分支的配置界面

 

    Step05:继续操作,将分支仓库testA导出到桌面testOther文件夹,并且更改a.txt文件并提交,效果如图4.175所示。

图4.175 提交后的Revision值是4

 

Step06:继续更改a.txt文件并提交,效果如图4.176所示。

图4.176 提交后的Revision值是5

 

Step07:更改a.txt文件并提交,效果如图4.177所示。

图4.177 提交后的Revision值是6

 

Step08:更改a.txt文件并提交,效果如图4.178所示。

图4.178 提交后的Revision值是7

 

    Step09:备份实验环境快照,将2个工作副本及1个仓库备份到“新建文件夹”中,效果如图4.179所示。

图4.179 备份系统快照到新建文件夹

 

    实验环境的步骤如图4.180所示。

图4.180 实验环境的步骤下方的数字是Revision版本号

 

本实验想要实现的效果是将分支Revision版本从5-7找到差异,然后再合并到test主线工作副本中,在这过程中有可能出现冲突,所以就得需要进行自动或手动解决。

    Step10:开始合并Merge操作,对桌面的test文件夹调用“Merge”菜单,选择第一项,配置合并选项如图4.181所示。

图4.181 合并的配置选项

 

    Step11:单击Next按钮后再单击Merge按钮开始合并,出现提示有冲突的界面如图4.182所示。

图4.182 提示出现冲突

 

    Step12:在此界面中单击按钮代表保留冲突,冲突待后面再解决,单击此按钮的另外一个目的就是想查看一下冲突的位置,单击按钮后的效果如图4.183所示。

图4.183 冲突被保留

 

    Step13:而桌面test文件夹中的a.txt文件内容如图4.184所示。

图4.184 桌面test工作副本a.txt文件内容

 

    从合并Merge结果中可以看到,a.txt文件中一共10行,每一行都被更改了,所以出现了冲突,

 

 

4.2.2 Reintegrate a branch选项

    选项Reintegrate a branch的作用和Merge range of revisions基本是一致的,只不过不可以指定revision的版本进行合并,合并的永远都是最新版,所以此选项经常在发生Merge合并时使用。

4.2.3 Merge two different trees选项

在合并Merge类型中有一个选项,它的作用是将2个分支中的代码合并到一个工作副本中,这个工作副本可以是主线也可以是分支,也就是使用选项即可以将分支合并到主线,又可以将主线合并到分支,还可以在合并的过程中选择主线或分支的指定revision值。

4.2.3.1 主线不更改分支更改-将分支最新revision版本合并到主线

Step01:初始化实验环境删除C:\svn_repository中的所有仓库,使用全新的模板仓库a,浏览一下a仓库中的文件夹结构如图4.185所示。

图4.185 仓库a中的结构

 

    Step02:下一步将更改文件夹结构如图4.186所示。

图4.186 更改后的仓库根文件夹结构

 

    Step03:那其它文件和文件夹去哪里了呢?它在file:///C:/svn_repository/a/trunk路径中,如图4.187所示。

图4.187 路径改变也能使revision的值+1

 

Step04:继续操作,将仓库a/trunk导出到桌面atest文件夹,导出revision的值是5,如图4.188所示。

图4.188 导出到桌面atest文件夹revision值是5

 

Step05:再对atest创建分支,配置分支的代码如图4.189所示。

图4.189 创建分支的配置界面

 

    Step06:单击OK按钮成功创建了分支如图4.190所示。

图4.190 分支的revision版本号+1变成6

 

    Step07:将分支仓库file:///C:/svn_repository/a/branches/atestA导出到桌面atestABranches文件夹,导出的revision版本值为6。

    Step08:更改桌面的atestABranches文件夹中的a.txt内容如图4.191所示。

图4.191 更改A分支中的内容

 

    Step09:对文件夹atestABranches调用Commit菜单后将最新版的代码提交到file:///C:/svn_repository/a/branches/atestA路径中,成功Commit提交效果如图4.192所示。

图4.192 成功提交

 

Step10:保留系统的环境快照,将3个核心文件夹备份到桌面“新建文件夹”中,如图4.193所示。

图4.193 保留系统快照

 

本实验的目的是将分支中改动的代码合并到主线中。

Step11:继续操作,对文件夹atest调用Merge菜单后的弹出窗口如图4.194所示。

图4.194 在配置Merge窗口中选择第3项

 

    Step12:单击Next按钮出现界面如图4.195所示。

图4.195 配置URL

 

    Step13:单击Next按钮继续配置出现界面如图4.196所示。

图4.196 配置Merge选项默认即可

 

    Step14:单击Merge按钮后成功更新,效果如图4.197所示。

图4.197 成功合并

 

4.2.3.2 主线不更改分支更改-将分支指定revision版本合并到主线

    Step01:重置系统环境,将“新建文件夹”中的内容进行各就各位。

    Step02:继续更改桌面atestABranches文件夹a.txt文件内容如图4.198所示。

图4.198 继续更改a.txt内容

 

    Step03:对atestABranches文件夹执行Commit提交,结果如图4.199所示。

图4.199 提交产生的revision版本为8

 

    Step04:继续更改桌面atestABranches文件夹a.txt文件内容如图4.200所示。

图4.200 继续更改a.txt内容

 

    Step05:对atestABranches文件夹执行Commit提交,结果如图4.201所示。

图4.201 提交产生的revision版本为9

 

    本实验的目的是要将atestA分支仓库中revision版本值为8的内容合并到atest工作副本中。

Step06:继续操作,对文件夹atest调用Merge菜单后选择第3项,再单击Next按钮出现界面如图4.202所示。

图4.202 配置URL和指定的revision值

 

    Step07:单击Next按钮继续配置出现界面如图4.203所示。

图4.203 配置Merge选项默认即可

 

    Step08:单击Merge按钮后成功更新,效果如图4.204所示。

图4.204 文件中的内容是revision为8的数据

 

4.2.3.3 使用Merge two different trees选项要注意一个事项

    Step01:重置系统环境,将桌面“新建文件夹”中的内容各就各位。

    Step02:在atest文件夹添加b.txt文件如图4.205所示。

图4.205 在atest文件夹添加b.txt文件

 

    Step03:提交后效果如图4.206所示。

图4.206 提交时产生revision值为8

 

    Step04:继续操作,对桌面atestABranches文件夹创建d.txt文件如图4.207所示。

图4.207 在atestABranches文件夹添加d.txt文件

 

    Step05:提交后效果如图4.208所示。

图4.208 提交时产生revision值为9

 

    Step06:对桌面atest文件夹调用Merge菜单并选择第3项后配置URL如图4.209所示。

图4.209 配置URL

 

    Step07:单击Merge按钮后的效果如图4.210所示。

图4.210 文件夹atest中的b.txt被删除了

 

    所以大多数的情况下,合并Merge的操作都是使用第1项或第2项,因为第3项会有文件丢失的情况。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值