首页 > 技术文章 > s​v​n​的​基​线​划​分​与​管​理

moonvan 2014-08-06 15:10 原文

一、基线(服务端默认划分3条基线)

  • trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
  • branches:表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。 (个人认为:产品定制的版本,会增加维护成本)
  • tags:表示标签存放的目录。(个人认为:它也是一个完整的里程碑版本,不允许开发人员修改)

 

在这需要说明下分三个目录的原因,如果项目分为一期、二期、三期等,那么一期上线时的稳定版本就应该在一期完成时将代码copy到branches上,这 样二期开发的代码就对一期的代码没有影响,如新增的模块就不会部署到生产环境上。

branches上的稳定的版本就是发布到生产环境上的代码,如果用户 使用的过程中发现有bug,则只要在branches上修改该bug,修改完bug后再编译branches上最新的代码发布到生产环境即可。

tags的作用是将在branches上修改的bug的代码合并到trunk上时创建个版本标识,以后branches上修改的bug代码再合并到trunk上时就从tags的version到branches最新的version合并到trunk,以保证前期修改的bug代码不会再合并。

二、创建分支

选择你要创建分支的文件,右击TortoiseSVN->分支/标记

 

 

在出现的窗口中填写相应的信息“确定”

 

注:

默认的目标URL将会是你当前工作副本所处的源URL。你必须给你的分支/标记编辑一个新路径。来取代如果你忘记了你上一次使用的命名约定,可以用鼠标右键打开版本库浏览器来察看已经存在的版本库结构。

现在你必须选择要复制的源位置。在这里你有三个设置选项:

(1)版本库中的最新版本

新分支直接从仓库中的最新版本里复制出来。不需要从你的工作副本中传输任何数据,这个分支的建立是非常快的。

(2)在版本库中指定具体的版本

在仓库中直接复制建立一个新分支同时你也可以选择一个旧版本。假如在你上周发布了项目时忘记了做标记,这将非常有用。如果你记不起来版本号,通过点击鼠标右键来显示版本日志,同时从这里选取版本号。和上次一样不需要从你的工作副本中传输任何数据,这个分支建立起来是非常快的。

(3)工作副本

新的分支是一个完全等同于你的本地工作副本的一个副本。如果你更新了一些文件到你的工作副本的某个旧版本里,或者你在本地做出了修改,这些改变将准确无误的进入副本中。自然而然地这种综合的标记会包含正在从工作副本传输到版本库的数据,如果这些数据还不存在的话。

 

 

三、合并分支

选择右键菜单TortoiseSVN → 合并...。

 

 

在从:域输入文件夹在分支或标记中的完整URL,它包含了你想应用到工作副本的修改。你也可以点击...浏览版本库,找到渴望的分支。如果以前已经从这个分支合并过,可以直接从包含历史的下拉列表选择以前使用的URL。点击“合并”按钮,完成合并。

 

 

因为要将同一分支的版本范围合并到工作副本,所以要确保使用 "从:" URL 检查框选中。

在从版本域输入开始版本号。它是在你要执行合并的修改之前的版本号。切记为了合并,Subversion将会创建一个差异,所以开始点务必准确。 例如,你的日志象这样:

版本 注释

39. Working on MyBranch

38. Working on trunk

37. Working on MyBranch

36. Create branch MyBranch

35. Working on trunk

34. Working on trunk

         ...

如果要将 MyBranch 的修改合并到 trunk,应该选择36作为开始版本,而不是象你想的是37。如果你选择37作为开始点,那么差异引擎将会比较结束点与版本37比较,这就丢失了版本37做的修改。如果这听起来很复杂,不要担心,在TortoiseSVN中有更简单的方法:

选择版本范围最简单的方法是,点击显示日志,列出最近的修改和日志。如果你要合并单个版本的修改,直接选取那个版本。如果你要合并多个版本,就选择范围(使用通常的Shift-键)。点击确认,就会为你填写合并对话框的全部域,开始版本和结束版本。

当选择了检查框 使用 "开始:" URL,只有按钮显示日志可用。这是因为显示日志对话框设置了全部开始:和结束:版本。所以你只用上面说的多项选择方法即可。

如果你已经从这个分支合并了一些修改,希望你在提交日志中注明最后一个合并的版本号。这时,你可以在工作服本上使用显示日志对话框跟踪日志。使用最后合并的版本号作为本次合并的开始版本。

例如,你已经合并了版本37到39,那么本次合并你应该从版本39开始。

如果你没有使用显示日志对话框显示版本范围,那么你需要手工设置结束版本。在范围中输入你想合并的最后一个版本号。这经常是最新版本,尽管它不必是 - 你只想合并单个版本。

如果其他用户可能提交,那么要小心使用最新版本。如果有人在你最近更新之后提交了,它指代的版本可能就不是你想的那样了。

 

 

四、合并冲突

合并通常很复杂,如果分支与最新版本差别很大,合并经常会出现冲突。发生冲突时文件夹和文件的图标就会带有警告标志,同时会多xx.working和两个压缩包文件

 

 

发生冲突的内容会有标记,你可以打开文件找到以<<<<<<开头的行,根据需要修改

 

 

也可以通过选中文件右击“TortoiseSVN->编辑冲突”,修改

 

 

在比较页面根据需要选择想要的内容,右击在弹出的窗体中选择所需要的,“保存”

 

 

编辑完冲突后文件的图标还没有改变,选择文件,右击-> TortoiseSVN->已解决的…

 

 

这样文件的图标就没有警告符号了,刚才有冲突引起的多余的文件也没有了,这表示冲突已经修改好了,剩下的就是更新了

 

 

 

 

 

如果你不信任合并操作,可以在允许它修改你的工作副本之前预览效果。有三个额外的按钮可以帮着你预览:

 

 

(1)预检:演习运行执行合并操作,但是根本不 修改工作副本。它显示在真实的合并中要修改的文件列表,还告诉你哪里会出现冲突。

 

 

 

(2)比较差异:创建差异文件(切记合并基于差异),显示你的工作目录哪些行将要被修改。因为这是统一差异(补丁)文件,所以离开上下文,它经常很难读。但是对于小的修改,由于它将所有修改在一起显示,因此很有用。

 

 

(3)准差异:差异显示修改文件列表。双击任一文件启动差异察看器。不像比较差异,它显示具有前后关系的详细修改信息。像比较差异那样,你看到的是开始版本: 和 结束版本:之间的差异。它不显示应用此改变之后,你的工作版本如何改变。

 

 

 

s​v​n​的​基​线​划​分​与​管​理

推荐阅读