[转]SVN中的Branches分支以及Tags标签详解与应用举例

1 篇文章 0 订阅

原文地址:

http://my.oschina.net/maczhao/blog/350058

摘要
SVN中的Branches分支以及Tags标签详解与应用举例
1.关于SVN

SVN 是Subversion的简称,在软件开发中,我们经常用于版本控制和源代码管理。

我们经常使用的几个SVN工具包括:


VisualSVN,这是一个Visual Studio的插件,可以便于开发者在VS中方便的执行迁入迁出的工作,这个工具是需要付费的,具体可以去http://www.visualsvn.com/visualsvn/download/下载试用版。

SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客
VisualSVN Servers,这是一个搭建SVN服务器端的工具,使用这个工具还可以很轻松的创建用户和用户组并进行权限控制管理,包括了Windows验证和用户验证的机制,还可以记录日志等,不过免费版并不包括完整的功能,但作为常用的版本控制工具是完全可以满足的,具体可以去http://www.visualsvn.com/server/download/下载。也可以不通过这个工具搭建服务器端,具体可以参看之前我的一篇日志:Subversion + VisualStudio 2008实战(一)。


TortoiseSVN,这是一个可以集成到Windows资源管理器中的Shell程序,可以方便的帮助我们执行各种命令,这是一个免费的工具,在VisualSVN失效的时候,我们依然可以针对项目的文件夹和文件执行签入迁出等各种工作,下载地址:http://www.visualsvn.com/visualsvn/download/tortoisesvn/ 。

2.关于SVN中的Branches与Tags

在版本控制的系统中,我们经常需要对开发周期中的单独生命线作单独的修改,这条单独的开发生命线就可以称为Branches即分支。分支经常用于添加新的功能以及产品发布后的bug修复等,这样可以不影响主要的产品开发线以及避免编译错误等。当我们添加的新功能完成后可以将其合并到主干中。
而Tags即标签主要用于项目开发中的里程碑,比如开发到一定阶段可以单独一个版本作为发布等,它往往代表一个可以固定的完整的版本,这根VSS中的Tag大致相同。
SVN中的Branches以及Tags经常容易混淆,因为在TortoiseSVN中创建方法是一致的,而且它们都是通过存储类似Linux中的lunch快捷方式一样,只是创建了指向某个版本的链接,而不会真正将此版本的内容复制到分支或者标签中,这样既可以节省空间,也可以很快速的创建。
为了便于创建分支和标签,我们习惯于将Repository版本库的结构布置为:/branches,/tags,/trunk。分别代表分支,标签以及主干。
还有一点值得注意的是,SVN不推荐在创建的Tag基础上Revision,这种情况应用Branches,因为Tag一般保持不变不作任何修改。

3.创建Branch分支或者Tag标签

当按照推荐的结构创建的版本库,创建分支以及Tag是很容易的。
在我的SVN服务器上创建了一个版本库Test,结构如下:
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客

在我的本地签出checkout,添加一个文件test.txt,然后提交。


加入这个时候我们需要发布一个版本的文件,同时有可能其他人会修改,但我们不能影响当前的文件,只能在其修改好后再合并,这种情况下我们创建一个分支。
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客

这个时候我们可以发现本地的trunk文件夹的SVN属性的URL已经被Switch到创建的版本的地址了:
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客

执行SVN更新命令,可以查看到,本地branches文件夹下新增文件夹v1.0以及文件夹里面的文件v1.0。


4.修改分支和使用合并Merge功能

修改branches/v1.0下面的文件test.txt,添加一行modified in branch v1.0.然后签入到SVN服务器中:



由于刚才我们已经将trunk的SVN版本库URL转换到对应的版本,所以这个时候更新trunk文件夹可以看到更新的test.txt文件。
为了作测试,我们将trunk文件夹switch至对应的trunk地址:


当switch成功后,我们可以看到trunk下test.txt文件的内容并没有任何的更改,这正体现了刚才我们所说的在分支中的修改不会影响到主干。
下面修改trunk文件夹下的test.txt,添加一行modified in trunk.然后签入到SVN服务器中:
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客

最好我们将实现一个重要的功能,就是Merge合并功能,将分支合并到主干中,这也是在团队软件开发中我们经常要使用的功能。
在TortoiseSVN的Revision Graph中可以查看trunk的版本变化图.


从上图可以得出,在版本10的时候我们创建了分支版本/branches/v1.0,且SVN版本为11,在版本11基础上我们对分支进行了修改于是有了版本12,我们再对trunk下的文件进行修改于是有了版本13,整个SVN目前的版本就为13,这与我们刚才做的修改是相吻合的。
下面将分支v1.0合并到主干中。
按照我们目前的情况,选择第二种:


选择v1.0:
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客


在我们的这次合并中肯定会产生问题,因为我们对test.txt文件进行了两次修改,因而会产生冲突Conflict,但这在实践中是不应出现这种情况的,因为建立的分支目的就是修改那些在主干中不会被修改的文件,以便修改完成后合并到主干中。不过没关系,我们这里仅是演示而已,所以只需处理下冲突,手动的将其合并(这在实际中不应该这样否则失去了分支的用途了):
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客


这个时候可以看到我们的test.txt文件已经按照我刚才手动处理冲突实现了:


然后将trunk签入到版本库中:
SVN中的Branches分支以及Tags标签详解与应用举例 - 三疯 - 翔博客

如果我们再去查看branches\v1.0下的test.txt文件它的内容依然是最初在trunk中编辑的内容。
另外再次强调一点:在实际操作中我们不会对一个分支文件在主干中再次进行修改,否则会造成一些冲突,这样就失去了分支的便利性了;Tag的创建与分支是类s似的,只不过Tag往往仅用于标识特定版本,而不会用于bug修复,增加新特性等情形。

------------------------------------------------------------------------------------------------------------------------------------

不适于迁入SVN管理的文件列表

1.vs与工程相关的文件有5种,“ .sln ” “ .suo ” “ .ncb”  “.vcproj” “.vcproj.XP-201108262034.XXX.user”,其中只有 .sln 和 .vcproj 是需要上传到svn中的,其他的文件都是系统编译时会自动生成的,请不要上传到svn,否则每个人生成的不一样,经常会出现冲突。
2. debug 目录,release目录
debug目录和release目录都是在编译的时候,可以自动生成的,里面的所有文件如.obj也是临时生成的,所以,千万不要把任何debug目录和release目录下的文件上传到svn
3. exe文件,lib文件,dll文件
这三个文件均指的是本工程自己生成的exe、lib和dll文件,由于工程每次编译后均会自动生成,因此不要上传。
4. GeneratedFiles 目录
如果是QT的项目工程,则编译结束后会出现一个 GeneratedFiles 目录,请注意,这个目录也是自动生成的,千万不要上传到svn中。
5.其他,比如有的项目可能用到数据库、配置文件什么的





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值