SVN的Trunk,Branch和Tag
2015-10-21 16:37
253 查看
原文 -》http://blog.csdn.net/xiaoyatou_00/article/details/6091735
创建一个Branch也相当简单,只需要一条命令即可。
这条命令是指给myproject这个repo创建一个名为releaseForAug的branch,使用-m来加入描述。之后你就可以通过
示例中是将Branch的从版本150到当前版本的所有改动都合并到Trunk中。你也可以将Trunk中的某些更新合并到Branch中,还是同样的方法。
查看Branch中那些改动还未合并。
Subversion有一个很标准的目录结构,是这样的。 比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags 这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs)。 对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。 第一种方法,使用trunk作为主要的开发目录。 一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。 此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。 例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。 按照时间的顺序 1.0开发完毕,代码冻结 基于已经冻结的trunk,为release1.0打tag 此时的目录结构为 svn://proj/ +trunk/ (freeze) +branches/ +tags/ +tag_release_1.0 (copy from trunk) 2.0开始开发,trunk此时为2.0的开发版 发现1.0有bug,需要修改,基于1.0的tag做branch 此时的目录结构为 svn://proj/ +trunk/ ( dev 2.0 ) +branches/ +dev_1.0_bugfix (copy from tag/release_1.0) +tags/ +release_1.0 (copy from trunk) 在1.0 bugfix branch进行1.0 bugfix开发,在trunk进行2.0开发 在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等 根据需要选择性的把dev_1.0_bugfix这个分支merge回trunk(什么时候进行这步操作,要根据具体情况) 这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录。 第二种方法,在每一个release的branch中进行各自的开发,trunk只做发布使用。 这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是。 1.0开发,做dev1.0的branch 此时的目录结构 svn://proj/ +trunk/ (不担负开发任务 ) +branches/ +dev_1.0 (copy from trunk) +tags/ 1.0开发完成,merge dev1.0到trunk 此时的目录结构 svn://proj/ +trunk/ (merge from branch dev_1.0) +branches/ +dev_1.0 (开发任务结束,freeze) +tags/ 根据trunk做1.0的tag 此时的目录结构 svn://proj/ +trunk/ (merge from branch dev_1.0) +branches/ +dev_1.0 (开发任务结束,freeze) +tags/ +tag_release_1.0 (copy from trunk) 1.0开发,做dev2.0分支 此时的目录结构 svn://proj/ +trunk/ +branches/ +dev_1.0 (开发任务结束,freeze) +dev_2.0 (进行2.0开发) +tags/ +tag_release_1.0 (copy from trunk) 1.0有bug,直接在dev1.0的分支上修复
原文-》http://www.cnblogs.com/huang0925/p/3254243.html
Branch的创建
在SVN中主干代码一般是放置在Trunk目录下的,如果要新建Branch的话则放置在Branchs目录下。(注意这是一种约定,SVN并不强制你这样做)注意Branhs和Trunk目录要平级,不能有嵌套,要不会引起混乱。1234 | myproject/trunk/branches/tags/ |
1 | svn copy http://example.com/repos/myproject/trunk http://example.com/repos/myproject/branches/releaseForAug -m 'create branch for release on August' |
svncheckout http://example.com/repos/myproject/branches/releaseForAug[/code]来迁出你的Branch源文件,在上面进行修改和提交了。 其实SVN并没有Branch的内部概念。我们只是创建了一个repo的副本,并自己赋予这个副本作为Branch的意义,所以这与git中的Branch有很大不同。需要注意的是Branch和Trunk使用同一套版本号,也就是说无论在Branch还是Trunk的提交都会引起主版本号的增加。这是因为svncopy只支持同一个repository内的文件copy,并不支持跨repository的copy,所以新创建的Branch和Trunk都属于同一个repository。合并
既然要创建分支也需要合并分支。基本的合并也是蛮简单的。假设现在Branch上fix了一系列的bug,现在我们想把针对Branch的改变同步到Trunk上,那么应该怎么做那?保证当前Branch分支是clean的,也就是说使用svn status看不到任何的本地修改。命令行下切换到Trunk目录中,使用svnmerge http://example.com/repos/myproject/branches/releaseForAug[/code] 来将Branch分支上的改动merge回Trunk下。如果出现merge冲突则进行解决,然后执行svnci -m 'description'来提交变动。当然在merge你也可以指定Branch上那些版本变更可以合并到Trunk中。
1 | svn merge http://example.com/repos/myproject/branches/releaseForAug -r150:HEAD |
查看当前Branch和Trunk的合并情况
可以使用svnmergeinfo来查看merge情况。查看当前Branch中已经有那些改动已经被合并到Trunk中:
12 | # cd to trunk directorysvn mergeinfo http://example.com/repos/myproject/branches/releaseForAug |
123 | #cd to trunk directorysvn merginfo http://example.com/repos/myproject/branches/releaseForAug --show-revs eligible |
相关文章推荐
- C# 完美解决窗体切换闪屏问题
- 2016百度网络系统平台研发一面总结
- 备注一份
- Android gradle使用教程<二> 引用android-library工程
- 冒泡排序和选择排序
- Android开发学习笔记:Intent的简介以及属性的详解
- Xcode更新后.xcodeporj变为白色了
- Dubbo 入门实例 本地伪集群测试Demo
- ueditor 配置无效?
- 智能卡应答信信号ATR
- fiddler限速
- 算法分析(借鉴版)
- ExpandableListView
- win10任务栏cortana选项怎么设置显示搜索框
- java获取某个字符在一个字符串中出现的下标(从0开始)
- 关于在平台中设置系统全局变量的使用和场景
- tasklet 与 softirq
- Mongodb存储过程使用
- Linux下文件解压命令汇总
- matlab中二维小波变换部分函数