版本控制系统SVN的分支开发

在公司开发中,代码一直是使用svn管理,虽然是用svn管理,但是一直只是把svn作为简单的代码仓库来使用,并没有使用svn的其它功能,所有的人都在master上作修改提交,所以代码的管理相对较混乱,上线不好做版本发布,因为我可能提交了多次,中间其他童鞋也提交了n次,有可能出现了版本冲突,导致最后版本发布上线极为麻烦。

在平常自己的开发中源码都是基于git来管理(http://git.oschina.net/zhangwj-9991-com),虽然版本中只有我一个人进行开发,但是还是采取了分支开发方式。分支开发相对于比较清晰,在分支上进行开发完成后在进行合并到master上,然后从master进行提交。因为git的版本管理事分布式的,本地就是版本仓库,这样的管理方式相当实用,当然分支版本也是可以pull到仓库上的。

在一些情况下不得不引入branch的开发方式,虽然svn也是支持brach的开发的,但是相对于git来说svn的branch较为原始,svn的branch是以直接copy来进行实现的,在mereg的时候也是对两个文件夹进行操作。但是这样做的缺点就是代码管理中就需要多了一个版本库代码的copy,不像git一样只是在同一个文件夹中就可以完成一个或者多个branch的管理。

公司还是使用svn进行代码管理,所以这里就简单实践了一下svn的分支开发方式,也作了一个简单的记录。

首先来说一下svn版本库有一个较为标准的目录结构,比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是

   svn://proj/
   |
      +-trunk
      +-branches
      +-tags  

trunk为主开发目录,branches为分支开发目录,tags为tag存档目录

下面以开发的一个项目作为例子进行说明:

首先check代码库

sh-3.2# svn checkout svn://172.16.0.245/book.2345.com/ book_test.2345.com
sh-3.2# cd /opt/case/book_test.2345.com/
sh-3.2# ls
.svn		branches	tags		trunk

主分支是trunk,创建的分支我这里放在了branches

接下来我们进行分支的创建

sh-3.2# svn copy trunk branches/zhangwj_20140208
A         branches/zhangwj_20140208
sh-3.2# svn commit -m "create new branch" ./*
Adding         branches/zhangwj_20140208

Committed revision 123460.
sh-3.2# cd /opt/case/book_test.2345.com/branches/zhangwj_20140208/

然后在这个分支下面进行新文件的开发并提交svn服务器

sh-3.2# touch demo.php
sh-3.2# svn add demo.php 
A         demo.php
sh-3.2# svn commit -m "add new file" demo.php 
Adding         demo.php
Transmitting file data .
Committed revision 123461.

这个时候分支与主干的代码就会不一样,这个时候我们首先把主干上的代码合并到分支上来(如果主干进行修改了的话),分支测试完成之后再将分支代码合并代码主干上面去。

sh-3.2# svn log --verbose --stop-on-copy svn://172.16.0.245/book.2345.com/branches/zhangwj_20140208/
------------------------------------------------------------------------
r123461 | weijian | 2014-02-08 19:01:42 +0800 (Sat, 08 Feb 2014) | 1 line
Changed paths:
   A /book.2345.com/branches/zhangwj_20140208/demo.php

add new file
------------------------------------------------------------------------
r123460 | weijian | 2014-02-08 18:59:14 +0800 (Sat, 08 Feb 2014) | 1 line
Changed paths:
   A /book.2345.com/branches/zhangwj_20140208 (from /book.2345.com/trunk:123459)

create new branch
------------------------------------------------------------------------

查看分支的最新版本号与主干进行合并

sh-3.2# svn merge -r 123461:HEAD /opt/case/book_test.2345.com/trunk/
--- Merging r123462 into '.':
U    404.php
--- Recording mergeinfo for merge of r123462 into '.':
 U   .

如果同一个文件主干与分支同时进行了修改,解决冲突可以使用svn resolved,或者直接选择想使用的版本

分支开发与测试完成之后,这个时候我们可以把分支的修改与主干进行合并,当然我们首先需要进入主干的目录

sh-3.2# cd /opt/case/book_test.2345.com/trunk/
sh-3.2# svn log --verbose --stop-on-copy svn://172.16.0.245/book.2345.com/branches/zhangwj_20140208/
------------------------------------------------------------------------
r123463 | weijian | 2014-02-08 19:46:55 +0800 (Sat, 08 Feb 2014) | 1 line
Changed paths:
   M /book.2345.com/branches/zhangwj_20140208/404.php

add new file
------------------------------------------------------------------------
r123461 | weijian | 2014-02-08 19:01:42 +0800 (Sat, 08 Feb 2014) | 1 line
Changed paths:
   A /book.2345.com/branches/zhangwj_20140208/demo.php

add new file
------------------------------------------------------------------------
r123460 | weijian | 2014-02-08 18:59:14 +0800 (Sat, 08 Feb 2014) | 1 line
Changed paths:
   A /book.2345.com/branches/zhangwj_20140208 (from /book.2345.com/trunk:123459)

create new branch
------------------------------------------------------------------------
sh-3.2# svn update
sh-3.2# svn merge -r 123460:HEAD /opt/case/book_test.2345.com/branches/zhangwj_20140208/
--- Merging r123461 into '.':
A    demo.php
--- Recording mergeinfo for merge of r123461 through r123464 into '.':
 G   .
sh-3.2# svn status
 M      .
A  +    demo.php
sh-3.2# svn commit -m "Merged zhangwj_20140208 changes r123460:123464 into the trunk."
Sending        .
Adding         demo.php

Committed revision 123466.

这个时候主干就已经完成了与分支的合并

这里要注意的是:

svn merge -r 123460:HEAD /opt/case/book_test.2345.com/branches/zhangwj_20140208/

这个命令参数-r的值的填充 123460为分支的起始版本号,此版本号可使用如下命令进行查看,最后一条为其实版本号 例如:r123460

svn log --verbose --stop-on-copy 分支地址

HEAD为最新版本,也就是后面分支的最新版本


合并完成之后,我们可以根据需要删除之前的分支

sh-3.2# svn rm -m "delete zhangwj_20140208 branch " svn://172.16.0.245/book.2345.com/branches/zhangwj_20140208/

Committed revision 123468.

分支建立的规则一般是自己的名字接上当前的日期 例如:zhangwj_20140208

最后再说一句 其实命令行来做代码管理也是挺不错的!

转载于:https://my.oschina.net/9991/blog/197966

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值