博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
版本控制系统SVN的分支开发
阅读量:6904 次
发布时间:2019-06-27

本文共 4281 字,大约阅读时间需要 14 分钟。

  hot3.png

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

在平常自己的开发中源码都是基于git来管理(),虽然版本中只有我一个人进行开发,但是还是采取了分支开发方式。分支开发相对于比较清晰,在分支上进行开发完成后在进行合并到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.comsh-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_20140208A         branches/zhangwj_20140208sh-3.2# svn commit -m "create new branch" ./*Adding         branches/zhangwj_20140208Committed revision 123460.sh-3.2# cd /opt/case/book_test.2345.com/branches/zhangwj_20140208/

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

sh-3.2# touch demo.phpsh-3.2# svn add demo.php A         demo.phpsh-3.2# svn commit -m "add new file" demo.php Adding         demo.phpTransmitting 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 lineChanged paths:   A /book.2345.com/branches/zhangwj_20140208/demo.phpadd new file------------------------------------------------------------------------r123460 | weijian | 2014-02-08 18:59:14 +0800 (Sat, 08 Feb 2014) | 1 lineChanged 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 lineChanged paths:   M /book.2345.com/branches/zhangwj_20140208/404.phpadd new file------------------------------------------------------------------------r123461 | weijian | 2014-02-08 19:01:42 +0800 (Sat, 08 Feb 2014) | 1 lineChanged paths:   A /book.2345.com/branches/zhangwj_20140208/demo.phpadd new file------------------------------------------------------------------------r123460 | weijian | 2014-02-08 18:59:14 +0800 (Sat, 08 Feb 2014) | 1 lineChanged paths:   A /book.2345.com/branches/zhangwj_20140208 (from /book.2345.com/trunk:123459)create new branch------------------------------------------------------------------------sh-3.2# svn updatesh-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.phpsh-3.2# svn commit -m "Merged zhangwj_20140208 changes r123460:123464 into the trunk."Sending        .Adding         demo.phpCommitted 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

你可能感兴趣的文章
针对桌面云终端做专用的高性价比CPU,吉湾微电子获首轮融资
查看>>
poj2481 树状数组
查看>>
Contrinex为高温应用推出新的RFID标签
查看>>
Q3中国光网络系统支出放缓
查看>>
MapXtreme 2005 学习心得 第八节Session问题澄清-两种配置方式致开发方式不同(九)...
查看>>
Windows 10即将针对共享功能进行大量修复和改进
查看>>
数据驱动业务决策的5个步骤
查看>>
上网个人信息如何不“裸奔” 10条信息安全建议
查看>>
JIRA的常用选项
查看>>
专访Facebook HipHop作者、阿里研究员赵海平:生物与计算机交织的独特人生
查看>>
监控视频须严加规范
查看>>
实例化需求的优点
查看>>
通过vmstat的简单分析数据库操作
查看>>
OpenStack详细解读:定义,好处与使用实例
查看>>
俄美共同研制出新型钙钛矿太阳能电池
查看>>
黑莓Android安全补丁推送保持零延迟
查看>>
SQL Server中数据库文件的存放方式
查看>>
西部光伏电站不景气 屋顶光伏春天将至
查看>>
计算机取证如何追踪网络罪犯?
查看>>
Ignite 内存数据组织框架进入 Apache 基金会孵化
查看>>