- 浏览: 184458 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
为什么昵称都叫没了:
对的,我也在做微信公众平台的开发,发现一个简单的教程 http ...
微信公众平台API -
guji528:
想找一个好一点的调试器,不知eric是否OK,有空再研究一下
Eric IDE安装 -
youyang:
受教了,不得不顶。
NoSQL非关系数据库简介 -
zhongzhai:
谢谢分享,波一个
Java中的UDP协议编程 -
huwenbiao2010:
有实现JPopupMenu透明的案例不,发个给我 ,谢谢了 , ...
一道笔试题
Subversion有一个很标准的目录结构,是这样的。
比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是
svn://proj/ | +-trunk +-branches +-tags
这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如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的分支上修复
此时的目录结构
svn://proj/
+trunk/
+branches/
+dev_1.0 (1.0bugfix)
+dev_2.0 (进行2.0开发)
+tags/
+tag_release_1.0 (copy from trunk)
- 选择性的进行代码merge
这其实是一种分散式的开发,当各个部分相对独立一些(功能性的),可以开多个dev的分支进行开发,这样各人/组都不会相互影响。比如dev_2.0_search和dev_2.0_cache等。但是这样merge起来就是一个很痛苦的事情。
这
里要注意一下的,第六步进行选择性的merge,是可以当2.0开发结束后一起把dev_1.0(bugfix用)和dev_2.0(新版本开发
用)merge回trunk。或者先把dev_1.0 merge到dev_2.0,进行测试等之后再merge回trunk。
这两种方法各有利弊,第一种方法是可以得到一个比较纯的dev_2.0的开发分支,而第二种方法则更加的保险,因为要测试嘛。
以上呢,就是我说的两种开发模式了,具体哪种好,并没有定论。这里大致的说一下各自的优缺点
第一种开发模式(trunk进行主要开发,集中式):
优点:管理简单
缺点:当开发的模块比较多,开发人数/小团队比较多的时候,很容易产生冲突而影响对方的开发。因为所有的改动都有可能触碰对方的改动
第二重开发模式(分支进行主要开发,分散式):
优点:各自开发独立,不容易相互影响。
缺点:管理复杂,merge的时候很麻烦,容易死人。
其实,这里并没有一定之规,更多的时候是两种模式结合使用。我个人来说是采用第一种方式为主,在某些情况下使用第二种方法。
如果你还有其他的好的方法,那么请赐教。:)
发表评论
-
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
2013-04-26 22:32 873继承 指的是一个类(称为子类、子接口)继承另外的一个类( ... -
数据库链接池(DBCP)配置参考
2012-01-31 17:20 1017链接池不但能提高数据库的访问效率,也能有效地控制自 ... -
设置半透明的JMenuBar
2011-01-17 17:33 3159源作:陈思羽. 更新:龚德伟. 2008.07.20 ... -
Socket TCP连接和断开过程
2010-11-03 09:22 2321在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握 ... -
几个重要的TCP/IP选项解析(Java Socket)
2010-10-28 13:22 10781. SO_LINGER / SO_REUSEADDR ... -
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
2010-10-25 13:41 973常见配置举例 堆大 ... -
jstat,jmap,jconsole,jvisualvm,jps,jinfo等JDK系统监控、性能调优工具
2010-10-11 13:57 805JProfiler在java程序性能调试方便表现优越,推荐使用 ... -
一道笔试题
2010-09-28 23:05 1005问题说明 : 计算一个整形数组里的连续元素和的最大值 ... -
一个题目:超大量数据的排序
2010-09-22 03:40 1830一个文件里,有一堆int,把它们排序一下,输出到另外一个文 ... -
各种系统架构图及其简介
2010-03-01 11:35 2440转载请保留出处 , 不胜人生 一场醉汇总。 ... -
Java抓图软件
2010-01-19 09:52 1017以下代码不是本人所写,乃是从网上搜到,记录下来供以后参考。 ... -
16进制字符串与byte数组互转(转载)
2010-01-13 21:07 1975import java.io.ByteArrayInp ... -
byte,int,char,double的相互转换(java)
2010-01-13 21:05 2692//整数到字节数组的转换 public stat ... -
Java中的UDP协议编程
2009-11-18 14:34 1919一. UDP协议定义 UDP协议的全称是用户数据报 ... -
System.getProperties()
2009-07-26 22:26 28541 、 java 通过 System.g ... -
System.getProperty()参数大全
2009-07-26 22:22 873java.version Ja ... -
JAVA打包后读取自身JAR中的文件
2009-07-26 21:48 5689在编写完Java程序后,打包成Jar时发布,会发现找不到Jar ... -
log4j 日志文件相对路径
2009-07-26 21:32 13011、在Tomcat 5.5中的Log4j ... -
windows下openldap的安装与java操作测试
2009-07-01 15:36 921windows下openldap的安装与 ... -
用Ant编译、junit测试、生成测试报告、最终自动发mail
2009-03-19 14:15 1574测试通过的版本如下:Eclipse:3.3.2jdk:1.6j ...
相关推荐
《TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi:版本控制利器——TortoiseSVN详解》 TortoiseSVN,作为一款广受开发者欢迎的Subversion(简称SVN)客户端,是软件版本控制的重要工具。在标题中提及的"TortoiseSVN-...
本文将深入讲解svn的基础知识和使用方法。 **一、为什么进行版本控制** 1. **代码历史记录**:在开发过程中,代码会不断迭代,有时需要回溯到早期版本以解决问题。 2. **协作开发**:多个人共同开发项目时,需要...
在提供的"Source_Insight教程及技巧(大全)——最终整合版.pdf"中,包含了详细的使用指南、常见问题解答和实用技巧,帮助你更高效地使用Source Insight。 ### 结论 Source Insight是一款强大的源代码编辑器,其丰富...
8. **res**:资源目录,包含应用的XML布局文件、图片、字符串、颜色、样式等资源。 9. **.settings**:Eclipse的项目特定设置,可能包含编译器选项、代码格式化规则等。 10. **assets**:此目录可以存放原始文件,如...
7. **版本控制**:源码中可能包含.git或.svn文件,这表明项目使用了Git或Subversion进行版本控制。通过它们,开发者可以追踪代码的历史修改。 8. **自动化测试**:为了保证代码质量,TongXunLu可能包含了单元测试和...
android"明确了这个项目是关于Android平台的,这意味着源代码将使用Java(或Kotlin)编程语言编写,并遵循Android应用开发的架构和最佳实践,如Activity、Service、BroadcastReceiver和ContentProvider等组件,以及...
6. **.svn**:这是一个版本控制系统Subversion的文件,表明这个项目可能是使用Subversion进行版本控制的。 7. **src**:这个目录包含了所有的源代码,包括Activity、服务、广播接收者等组件的Java或Kotlin文件。 8...
总之,《JBuilder 9_0程序设计——Java程序员成功之路》是一本全面介绍JBuilder使用方法的教程,通过学习,你将能够熟练地运用JBuilder进行高效的Java开发,无论你是新手还是经验丰富的开发者,都能从中受益。
9. **版本控制文件**:如.gitignore或SVN配置文件,如果项目是在版本控制系统下管理的。 综上所述,这个压缩包对Android开发者,尤其是对日历应用感兴趣的开发者来说,是一份非常有价值的学习材料。它不仅展示了...
9. **版本管理**:如果源码中包含了版本控制文件(如.git文件或SVN文件),则表明项目可能使用了Git或Subversion等工具进行版本控制,这对于团队协作开发和代码管理非常重要。 10. **性能优化**:为了确保在线钢琴...
- 集成源代码版本控制系统,例如Git、SVN等 - Source Insight的版本控制工具栏和界面操作 - 差异比较和代码合并的技巧 5. **调试辅助** - Source Insight的内置调试工具概述 - 设置断点和执行跟踪 - 调试窗口...
【iOS游戏应用源代码——bontoJR-InfoBar-0b62f42.zip】是一个包含iOS游戏应用源代码的压缩文件,其中的核心项目可能是"BontoJR",结合了"InfoBar"这一功能模块。从这个文件名我们可以推测,这是一款名为"BontoJR"的...
例如,使用Git或SVN等版本控制系统可以记录每个版本的变更,避免因版本混乱导致的工程问题。 最后,当施工开始时,BIM(建筑信息模型)技术可能会被引入,将二维图纸转换为三维模型,便于施工队伍理解和实施。BIM...
1. CRM(客户关系管理系统)开发:该项目使用了Tomcat6.0,她负责营销管理和基础数据代码的编码。系统实现了权限管理、营销管理、客户管理、服务管理、统计报表和基础数据等功能。通过该项目,她深化了对SSH框架的...
内置的GUI设计器允许开发者通过拖放组件来构建UI,无需编写大量布局管理代码。 - **事件处理**:NetBeans的代码提示和自动生成功能使得添加事件监听器变得简单快捷,有助于提高开发效率。 - **调试工具**:集成的...
1. **Chapter 01**:通常会介绍NetBeans IDE的基础知识,包括安装、界面布局、基本操作和项目创建。读者可以通过这部分代码学习如何在NetBeans中搭建开发环境,创建新项目,并理解项目结构。 2. **Chapter 04**:...
尽管教程可能未涵盖,但了解如何使用版本控制工具(如SVN或Git)来管理代码变更对任何开发者来说都是必要的。 通过这个简单的实例,你不仅能学习到C#的基础知识,还能掌握如何在Visual Studio中构建和调试应用程序...