版本控制一(序言)

什么是版本控制?

版本控制(Revision Control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程.是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.

因为版本控制并不是从软件行业发展而来的,最初是运用在各种工程管理上,后来有了软件工程,也引入了版本控制.

版本控制能够解决什么问题?

只要参与过2个人以上的软件项目开发,不管是在工作中,还是在大学的项目中,就应该遇到过问题.比如大家先是划分好各自的工作,也许有一些约定,但是一些公共的方法或类可能就被成员写了很多次,而且每个都不一样,这样在代码上就会有冲突,容易引发BUG.而且想恢复到之前的版本只能copy、paste,不方便,而且还要经常这么做.发布项目时也困难重重:

所以总结之后,没有版本控制的项目有如下难处:

  • 代码管理混乱
  • 备份多个版本,占用磁盘空间大
  • 解决代码冲突困难
  • 容易引发BUG
  • 难于追溯问题代码的修改人和修改时间
  • 难于恢复至以前正确版本
  • 无法进行权限控制
  • 项目版本发布困难

SVN

SVN(Subversion)是一种开放源码的全新版本控制系统,是新一代的版本控制工具,由于其优于CVS的一些特点,得到了越来越多人的关注和使用,支持可在本地访问或通过网络访问的数据库和文件系统存储库.不但提供了常见的比较、修补、标记、提交、恢复和分支等功能,而且Subversion 还增加了追踪移动和删除的能力.此外,它支持非ASCII 文本和二进制数据,所有这一切都使Subversion不仅对传统的编程任务非常有用,同时也适于Web开发、图书创作和其他在传统方式下未采纳版本控制功能的领域.Subversion是近年来崛起的版本管理工具,在当前的开源项目里(JavaEE),几乎95%以上的项目都用到了SVN.Subversion项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升,同时也能较好的解决CVS系统的一些不足.

工作流程图:

从该图可以看出SVN分为三部分:客户端、服务器和数据仓库.客户端又分为命令行和图形用户界面两种,SVN安装完默认只有命令行.GUI只是对命令行功能的一种封装;服务器的访问方式有三种,主要是两种:mod_dav_svn和svnserve.mod_dav_svn是借助Apache的方式进行访问,svnserve是SVN内置的独立服务器;SVN支持两种数据仓库:数据库和文件系统.使用文件系统是推荐方式.以下是SVN对工程的管理方式:

这种方案被称为拷贝-修改-合并,是Subversion、CVS和一些版本控制系统共同使用的模型,在这种模型里,每一个客户联系项目版本库建立一个个人工作拷贝和到版本库中文件和目录的本地映射.用户并行工作,修改各自的工作拷贝,最终各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误.拷贝-修改-合并模型感觉有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有交迭发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少.最后,一切都要归结到一条重要的因素:用户交流.当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事.拷贝-修改-合并有一个很致命的缺点,就是对那些无法合并的二进制文件管理起来困难,因此,Subversion也提供了锁定-修改-解锁的方案,用来更好的管理二进制文件.因此,我们采取混合版本控制方案,即,对源代码的纯文本文档实行拷贝-修改-合并的方案,对二进制文件,如dll、图书等采用锁定-修改-解锁的方案.也就是通过autoprops.reg中的信息,来告诉Subversion怎么去管理这些文件.

以下是采用锁定-修改-解锁方案的vss工作流程:

可以看出这种模型的效率并不高,在一个时间段里版本库的一个文件只允许被一个人修改.但是它也有优点:能非常好的保证版本库中所有文件的一致性,能避免大部分的冲突.但锁定-修改-解锁模型有一点问题就是限制太多,经常会成为用户的障碍,比如:

  • 锁定可能导致管理问题
  • 锁定可能导致不必要的线性化开发
  • 锁定可能导致错误的安全状态

如果万一被某个人锁住,然后离开,半天不回来,那项目组的其他人就可以放假了.当然这种情况基本上不会发生.

SVN需要与人交互,来获取服务器的最新文件,或者更新服务器版本库的文件,流程图如下:

上图也基本列出了必然使用的方法,SVN工作的基本思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序.由仓库管理员统一管理这些源程序,这样,就好像一个人在修改文件一样.避免了冲突,每个用户在使用仓库之前,首先要把仓库的项目文件下载到本地.用户做的任何修改首先都是在本地进行,然后用SVN命令进行提交,由SVN仓库管理员统一修改,这样就可以做到跟踪文件变化、冲突控制等等.

 

 



 

如果本文有任何问题,请及时指出,以免对后来者产生不必要的困扰,不胜感激!

时间: 2024-10-08 18:56:01

版本控制一(序言)的相关文章

版本控制入门插图教程

我知道版本控制系统(VCS)很有用. 但是,我平时只是业余写一些小程序,感觉特地装一个VCS太麻烦,所以一直没有用.最近,因为想认真做一个中等规模的项目,所以决心好好学一下怎么用. 下面就是我翻译的一篇入门教程,主要解释了VCS的一些主要概念. ====================== A Visual Guide to Version Control 版本控制入门插图教程 作者:Kalid Azad 译者:阮一峰 原文网址:http://betterexplained.com/articl

Version cue+bridgh(cs3)优化版本控制【碳酸饮料会】

我们在做项目的时候经常遇到需要产出多个版本的情况,以往的版本管理方法很落后,今天给大家介绍个新朋友version cue 什么是version cue Adobe的一个基于服务器的文件管理系统,主要用于协同编辑和版本控制. 借助 Version Cue 您可以集中管理共享的项目文件.使用直观的版本控制系统与他人齐头并进.使用注释跟踪文件状态. 由于我们平时的项目大部分还是独立完成,所以我么先来谈一下适用于个人设计师的私人版本控制功能: Version cue之前的版本控制方法: 1.Ps历史快照

.Net中VSS实现版本控制管理的方法

初始入库 方法一:        第一步:用VS.NET连接到要入到VSS受控中心库的源VSS库,创建一个存放源VSS库中解决方案的一个本地路径,如果项目是一个WEB项目,还会要求创建一个WEB虚拟路径对应的一个本地路径,此路径用来存放WEB项目文件:创建好上面两个目录,就会在VS.NET中看到已经打开的源VSS库中的解决方案,此时进行第一次编译,看看拿过来的VSS源库中的解决方案有没有问题,如果编译成功,进入我们的第二步:        第二步:在VS.NET的"文件"菜单下,依次打

C# 语言规范--1.13 版本控制

规范|控制 版本控制是一个过程,它以兼容的方式对组件进行不断的改进.如果依赖于早期版本的代码重新编译后可以适用于新版本,则组件的新版本与早期版本源代码兼容.相反,如果依赖于早期版本的应用程序不用重新编译即可适用于新版本,则组件的新版本为二进制兼容. 大多数语言根本不支持二进制兼容性,而且许多语言对促进源代码兼容性所做甚少.实际上,某些语言所含的缺陷使得用它开发出来的组件在不断的改进过程中,一般至少会使依赖于该组件的某些客户端代码失效. 例如,请看一个发布名为 Base 的类的基类作者的情况.在第

程序集的版本控制[下]

程序|控制 这里就具体的实现对程序集版本的控制简单地说说两种方法.希望能有一定的参考意义吧. 1.手动编码实现: 在类中添加静态只读的字符串类型的属性CodeVersion表示程序集(即变量所在类)的版本号.例如在2005年1月20日第一次编写了Member类,那么依照本文上半部分(http://blog.csdn.net/crazytomato/archive/2005/01/28/codelibraryversioncontrolshang.aspx)的讨论,该程序集编译后的版本号应为1.0

程序集的版本控制[上]

程序|控制 在开发ASP.NET应用程序时,可以根据所开发应用程序的具体需求和设计,将代码封装成各种处理相应操作的类.并以此来组织和管理已有的代码.由此便形成了很多在ASP.NET应用程序中的程序集(即编译后形成的DLL文件). 在这些程序集中,很多对底层代码的封装,不涉及应用程序的事务逻辑,那么是可以在各种应用程序中反复应用(代码的重用).例如,对各种常用数据库操作的封装,形成专门用于数据库操作的类,那么该类是可以在所有需要数据库的应用程序中使用的.随之而来的便也有一个问题,可能在各种不同的应

《产品经理》第一集 (序言)+(产品概论) 讲

文章描述:产品经理系列讲座第一季:序言及产品概论. <产品经理>( The Internet Product Manager.S01E01).第一季第一集 (序言)+(产品概论) 讲座的内容主要涉及产品经理技能初步方面,从最基础的零开始介绍,并且循序渐进.在每期中,我们将进行大约30mins的讲演和方法论介绍.如果你有问题,可以随时和我们取得联系,百分百回复.欢迎大家提出可行性建设性意见和建议.本系列视频为互联网才子授权站长之家转载.互联网才子微博:http://weibo.com/ireal

Fireworks MX 2004版本控制和文件上传

控制|上传 Studio MX 2004将站点管理功能扩大到了每个软件中,充分考虑到了团队合作对版本控制的要求,同Dreamweaver一样,新版本的Flash和Fireworks都加入了站点文件管理的功能.不过Fireworks MX 2004的站点功能是整合在Dreamweaver MX 2004中的,也就是说二者只能协同工作,单独的Fireworks MX 2004无法进行站点文件的管理.下面我们来简单看看Fireworks MX 2004中的文件版本控制及FTP管理.一.站点的建立 也许

SSRS的报表版本控制

问题 如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 SQL Server 2008 R2的 Reporting Services (SSRS) 开始,微软视图为减轻IT团队的工作量,推出了报表工具 Report Builder 3.0.  在此之前建立复杂的报表必须用BIDS (就是 Visual Studio ,2012以后叫SSDT).现在报表都可以用 BIDS或者Report Builder建立. 因为可以使用两个工具创建修改的关系. 报表的版本控制愈加