概述
节选了《51cto.com》文章原始网址:http://developer.51cto.com/art/201005/202665.htm
SVN分支资深专家专题讲解
本节向大家介绍一下什么是SVN分支,如何使用SVN分支,如何创建SVN分支,如何进行廉价的拷贝,对于这些问题本节会给你一一解答,欢迎大家一起来学习关于SVN分支的知识。
1、概述
分支,标签,与合并几乎是所有版本控制系统的基本概念.如果你不熟悉这些功能,我们在这章提供了一个很好的介绍.如果你非常熟悉了,也能很好的让你看看Subversion是如何实现这些功能的.
分支是版本控制的一项基本的功能.如果你将要使用Subversion来管理你的数据.这是一个特色你将最终依赖它.这篇文章要求你已经对Subversion的基本概念比较熟悉.
分支是版本控制的一项基本的功能.如果你将要使用Subversion来管理你的数据.这是一个特色你将最终依赖它.这篇文章要求你已经对Subversion的基本概念比较熟悉.
2、什么是SVN分支?
假设你需要在你的电脑上维护一份被分离的文档,一个手册或是别的什么.某天要求你对同份文档做一个不同的修改分离,但分离后他们两者只有一小部分不同,因此只有轻微的不同。你将怎么解决这种处境?显而易见的方法是:可以再拷贝这份文档,然后保存两个不同的分离版本.当某个部分要进行修改时,只要写入对应的文件就可以了。经常需要对两个拷贝版本进行同样的修改.例如:如果发现一个打印错误在第一个文件里,这也很可能存在第二个拷贝文件里。因为这两个文件是相同的.
这就是分支的基本概念,一条基于另外一条开发线存在的分支.并共享在分离之前的日志.一个分支就象一个拷贝的存在,并从那里离开,并具有自己的历史.
针对这样的需求Subversion便提供了一些功能来保持文件或目录分支的平行性.允许通过拷贝数据来创建分支,并记录与源文件的关系.也能帮助你将一个分支的修改复制到另外其他的支流上.总的来说,能够映射出不同的工作拷贝.这样就可以在不同的分支上进行工作.
这就是分支的基本概念,一条基于另外一条开发线存在的分支.并共享在分离之前的日志.一个分支就象一个拷贝的存在,并从那里离开,并具有自己的历史.
针对这样的需求Subversion便提供了一些功能来保持文件或目录分支的平行性.允许通过拷贝数据来创建分支,并记录与源文件的关系.也能帮助你将一个分支的修改复制到另外其他的支流上.总的来说,能够映射出不同的工作拷贝.这样就可以在不同的分支上进行工作.
3、使用SVN分支
假设Sally与你同时拥有"calc"项目的工作副本,并都有/calc/trunk的工作副本.所有项目相关的文件都在/calc目录下,因为你们的团队已经商定/calc/trunk用于存放开发主线.
此时你被要求完成一个任务就是新增项目的一个基本新特性.这将需要很长的时间来完成,并可能回影响到项目中的大部分文件.问题是你不想与Sally有任何冲突,她正在修改项目中的一些存在的小BUG.并依赖于最新发布的项目版本,这里(/calc/trunk)主线版本是最有效的.如果你提交修改那么肯定会打乱Sally的修改工作.一种策略就是进入一个空洞:你和Sally在一到两周内停止共享信息.那就是获取一份主线版本的工作副本,并写在你修改的功能结束以前不做任何提交,直到你完成工作任务再尽心提交.这个方案存在着很多问题,第一,这样做很不安全.很多人喜欢频繁的将工作结果上传到版本库,以防止工作副本被突发事件破坏引起的后果.第二,不够容易.如果你在不同的机器上工作,你就需要手工的将工作副本进行拷贝修改.最后,当你完成你的所有修改后,你将发现很难将你的工作合并到主线项目的代码中去.更好的解决方法就是创建你自己的分支.这样就能在不与其他人的冲突的前提下,频繁的提交工作,也能有选择性的共享信息。
假设Sally与你同时拥有"calc"项目的工作副本,并都有/calc/trunk的工作副本.所有项目相关的文件都在/calc目录下,因为你们的团队已经商定/calc/trunk用于存放开发主线.
此时你被要求完成一个任务就是新增项目的一个基本新特性.这将需要很长的时间来完成,并可能回影响到项目中的大部分文件.问题是你不想与Sally有任何冲突,她正在修改项目中的一些存在的小BUG.并依赖于最新发布的项目版本,这里(/calc/trunk)主线版本是最有效的.如果你提交修改那么肯定会打乱Sally的修改工作.一种策略就是进入一个空洞:你和Sally在一到两周内停止共享信息.那就是获取一份主线版本的工作副本,并写在你修改的功能结束以前不做任何提交,直到你完成工作任务再尽心提交.这个方案存在着很多问题,第一,这样做很不安全.很多人喜欢频繁的将工作结果上传到版本库,以防止工作副本被突发事件破坏引起的后果.第二,不够容易.如果你在不同的机器上工作,你就需要手工的将工作副本进行拷贝修改.最后,当你完成你的所有修改后,你将发现很难将你的工作合并到主线项目的代码中去.更好的解决方法就是创建你自己的分支.这样就能在不与其他人的冲突的前提下,频繁的提交工作,也能有选择性的共享信息。
4、创建一个SVN分支
创建一个分支非常简单-只需要用svn copy命令拷贝项目就可以完成创建. Subversion不单支持单文件,也支持整个文件目录的分支创建.在此例中,我们要拷贝/calc/trunk文件夹.那么应该把拷贝放在那里呢?任何地方你想要放置的地方.这里需要提到项目的策略在库中有/calc/branches目录空间,并且你想要拷贝的目录名重命名为my-calc-branch.
有两种不同的方法来进行拷贝。
创建一个分支非常简单-只需要用svn copy命令拷贝项目就可以完成创建. Subversion不单支持单文件,也支持整个文件目录的分支创建.在此例中,我们要拷贝/calc/trunk文件夹.那么应该把拷贝放在那里呢?任何地方你想要放置的地方.这里需要提到项目的策略在库中有/calc/branches目录空间,并且你想要拷贝的目录名重命名为my-calc-branch.
方法一:首先介绍有些麻烦的方法。只是为了让概念清晰一点.首先,检出一份版本库./calc到本地工作目录work/calc/。先
进入本地工作目录:
在这个例子里,拷贝命令递归拷贝trunk下的文件到新的工作目录branches/my-calc-branch下。使用svn status 命令,可以看到新的目录被添加到了版本库中。同时注意"+"符号前面的字母A.它表明添加的列表是一些数据的拷贝,并不是新添加的版本库的数据。$ cd calc/ $ svn copy trunk branches/my-calc-branch $ svn status A + branches/my-calc-branch
之后需要你提交修改后版本库才能完成分支的创建。
$ svn commit -m "Creating a private branch of /calc/trunk."
Adding
branches/my-calc-branch
Committed revision 341.
方法二: 现在介绍一种简单的创建分支的方法,那就是可以通过给svn copy 命令传入两个URL路径来实现.
从版本库的角度来看,实际上这两种方法并无任何区别。唯一的区别只在于前者是在本地客户端进行操作,后者可以立即执行SVN分支任务,简单,并不需要你检出庞大的工作副本。后者的方法是最常用的。 5、廉价的拷贝——如何使用分支代码?$ svn copy http://svn.example.com/repos/calc/trunk http://svn.example.com/repos/calc/branches/my-calc-branch -m "Creating a private branch of /calc/trunk." Committed revision 341.
使用SVN分支进行工作,建立了项目的一个分支之后,我们就可以检出该分支并开始工作使用它。
这个工作副本并无任何特别之处;只是简单镜像了一个库中项目.当你提交修改后,Sally并不期望当她更新工作副本的时候看到这些修改,因为她的工作副本是/calc/trunk。让我们假设看看一个星期里所发生的事:$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch A my-calc-branch/Makefile A my-calc-branch/integer.c A my-calc-branch/button.c Checked out revision 341.
You make a change to /calc/branches/my-calc-branch/button.c, which creates revision 342.
You make a change to /calc/branches/my-calc-branch/integer.c, which creates revision 343.
Sally makes a change to /calc/trunk/integer.c, which creates revision 344.
现在这里出现了两条独立的开发线。
最后
以上就是喜悦薯片为你收集整理的透彻的解释了svn copy 的工作原理-强力推荐的全部内容,希望文章能够帮你解决透彻的解释了svn copy 的工作原理-强力推荐所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复