一.SVN 的工作模型:Subversion 缺省使用复制-修改-合并模型
实际上是文件共享的问题,目前有两种策略:
A.锁定-修改-解锁模型有一点问题就是限制太多,经常会成为用户的障碍:
-
锁定可能导致管理问题。有时候 Harry 会锁住文件然后忘了此事,这就是说 Sally 一直等待解锁来编辑这些文件,她在这里僵住了。然后 Harry 去旅行了,现在 Sally 只好去找管理员放开锁,这种情况会导致不必要的耽搁和时间浪费。
-
锁定可能导致不必要的线性化开发。如果 Harry 编辑一个文件的开始,Sally 想编辑同一个文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行工作而没有太多的坏处,没有必要让他们轮流工作。
-
锁定可能导致错误的安全状态。假设 Harry 锁定和编辑一个文件 A?? Sally 锁定并编辑文件 B,如果 A 和 B 互相依赖,这种变化是必须同时作的,这样 A 和 B 不能正确的工作了,锁定机制对防止此类问题将无能为力—从而产生了一种处于安全状态的假相。很容易想象 Harry 和 Sally 都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发现他们不匹配的修改。
B.复制-修改-合并(CVS,SVN采用)
在这种模型里,每一个客户读取项目版本库建立一个私有工作副本—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
二。分支的概念
版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线).
版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。这个过程被称作标记。
分支中最重要的概念就是独立于主干进行开发,在合并前,不同分支提交的代码互相不可见,互不干扰。但是主干持有所有分支的版本记录,因此主干可以合并分支。比较适用不同团队独立开发各自模块。另外在分支合并的时候需要做回归测试
三。版本库的布局
svn文档是有推荐的目录结构,适用大多数情况:)当然理解了分支的概念,心中有剑也无需受此限制。
There are some standard, recommended ways to organize a repository. Most people create a trunk
directory to hold the “main line” of development, a branches
directory to contain branch copies, and a tags
directory to contain tag copies. If a repository holds only one project, then often people create these top-level directories:
如果一个版本库包含多个项目,人们通常按分支来安排布局:
大致用法如下:
traceview项目 有两个开发人员wya,htyoung ,同时htyoung做为项目管理员,
1.项目开始时htyoung在trunk 创建了最初的文件 这个作为main line,然后 用
svn cp trunk tags/first_init
svn cp tags/first_init branches/wya
svn cp tags/first_init branches/htyoung
创建工作文件夹,我们的开发人员 wya , htyoung 只在他们的开发文件夹 branches/wya,branches/htyoung 内工作,也就是commit.
2.一段时间后由项目管理员(htyoung),merge所有的修改到主线 trunk上,
同时htyoung和wya同主线同步.
3.再过一段时间我们发布0.1版本, 为了有一个记录 项目管理员(htyoung)用以下命令建了一个tags
svn cp trunk tags/Release0.1.0
4.这时又有一个开发人员 JRD来了,项目管理员(htyoung)基于 0.1 给她建了一个工作分支
svn cp tags/Release0.1.0 branches/jrd
5.在我们发布完 0.2 时来了一个 测试员 TA, 我们用以下命令为TA建一个工作文件夹
svn cp trunk tags/Release0.2.0
svn cp tags/Release0.2.0 branches/ta
分享到:
相关推荐
### Git 面试知识点详解 #### 1. 什么是 Git? **知识点解析:** - **定义:**Git 是一个开源的分布式版本控制系统,旨在帮助软件开发者管理代码变更历史。 - **特点:** - 分布式:每个开发者的本地仓库都完整...
【PHP面试知识点详解】 1. **表单中GET与POST提交方法的区别** GET方法将表单数据附加到URL后面,以问号分隔,数据可见且有长度限制(通常为2KB左右)。这种方式适用于传递少量、不敏感的数据。而POST方法将数据...
面试宝典-v4.0是一本集合了多种技术知识点的面试准备材料,旨在帮助求职者在面试过程中更好地展现自己的专业技能和理解能力。以下是从文档中提取的知识点,它们涵盖了多个重要的IT技术领域。 **Java基础** - ...
这本书涵盖了各种编程语言、数据结构、算法、操作系统、计算机网络、数据库、软件工程等多个领域的核心知识点,旨在帮助求职者在面试中展现出扎实的技术功底。 一、编程语言 在面试中,对特定编程语言的理解是必不...
根据提供的文件内容,这里主要涉及的是iOS开发领域内的面试题目及知识点概述,下面将对这些内容进行详细解析。 ### iOS面试题经典汇总 #### 1. iOS基础介绍 - **重要性**:作为iOS开发的基础,理解iOS的核心概念是...
文章首先列举了一些常用的Git命令,接着介绍了几种常见的Git工具(如命令行、IDEA Git插件、SourceTree等)的特点,对比了Git与SVN的不同之处,讨论了分支管理和标签的使用,解决了常见操作失误(如误删文件、修改...
**知识点概述:** - **String 类型的基本理解:** 在 Java 中,`String` 是一个不可变的对象,它代表了字符序列。 - **与其他类型的不同:** `String` 是对象而非原始数据类型;`String` 对象一旦创建后,其值不能...
在准备PHP面试时,了解各种知识点是至关重要的。以下是一些可能会出现在PHP面试中的关键话题,根据提供的描述,我们可以推测这些面试题可能涵盖了从基础知识到更高级的SVN版本控制等主题。 1. PHP基础: - PHP语法...
根据给定文件的信息,我们可以提炼出以下与前端开发相关的Git知识点: ...这些知识点涵盖了Git的基础概念、常用命令以及如何高效地管理版本控制流程等方面的内容,对于前端工程师来说具有较高的实用价值。
java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集: JAVA核心知识点整理-282页 Java与哈希算法.docx Java中Lambda表达式的使用.docx JAVA多线程之线程间的通信方式.docx Java注解详解.docx ...
1. **JAVA面试知识点**: - 基础概念:深入理解Java面向对象编程,包括封装、继承、多态。 - 类与对象:掌握类的构造器、访问修饰符、静态与非静态成员的区别。 - 内存管理:理解垃圾回收机制,了解堆内存和栈...
以下是一些重要的面试知识点,涵盖了多线程、运行时机制、图片加载库、内存管理、设计模式、性能优化等方面: 1. **多线程**: - `NSOperation` 和 `GCD`(Grand Central Dispatch)是iOS中实现多线程的两种主要...
【软件测试工程师面试知识点】 1. **需求与测试需求**: - 在面试时,面试者需要理解如何从产品人员那里获取并理解需求,通过需求评审确保清晰度。 - 测试需求分析是关键,包括功能点分解、需求规则分析(如输入...
在软件测试领域,面试通常会涉及多个方面,包括个人经历、理论理解、实践经验以及特定的技能和...在准备软件测试面试时,深入了解这些知识点并结合个人经验,将有助于展现你的专业性和潜力,增加成功获得职位的机会。
以下是他所涉及的主要知识点和技术栈: 1. **项目管理**:工程师参与了工程项目管理系统,该系统包含了多级任务管理、物资管理、预算控制、合同管理、进度管理、物资库存管理、档案管理、流程管理和报表生成等功能...
根据提供的内容,我们可以总结出与iOS面试相关的知识点。尽管原文中的部分内容似乎被特殊字符和乱码所替代,但我们可以尝试解读并围绕标题“iOS面试题”及其描述来构建相关知识点。 ### iOS面试题 #### 1. iOS基础...
根据给定的信息,我们可以整理出一系列与PHP及MySQL相关的面试知识点。下面将详细解析这些知识点。 ### 1. 时间日期处理 #### PHP日期格式化 - **知识点**: 使用`date()`函数结合`strtotime()`来获取昨天的时间。 ...
根据给定的文件信息,以下是从“PHP面试宝典,面试大全”中提炼出的关键知识点,涵盖基础概念、技术细节及应用实践。 ### 基础知识点 #### GET与POST提交方法的区别 - **GET**: 请求信息通过URL参数传递,适用于...