编辑: 865397499 | 2019-07-06 |
nju.edu.cn 什么叫版本控制 版本控制(Revision control)是一种软件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新. 版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号.这种方法是维护(maintenance) of 工程图(engineering drawings)的标准做法, 它伴随着工程图从图的诞生一直到图的定型. 一种简单的版本控制形式,例如,赋给图的初版一个版本等级"A".当做了第一次改变后,版本等级改为"B",以此类推等等. 如何理解 团队开发的一种需要大家的进度可以共享,却可以独立的做自己的事情用版本号来控制每一次的更新 为什么要版本控制 其他问题 我想知道其他人最近做了什么发现以前的版本更好用,但我却找不到它同一模块不同的人做了不同的修改,如何解决冲突庞大的文件夹解决不了问题 工具 有需求就有工具,并且工具的强大功能让人耳目一新 我们需要一个类似于文件系统的工具来帮助管理和维护服务器和客户端这种模型能成为可能 几种工具 CVS (Current Version System ): linux,windowsVSS (Visual Source Safe):只能在windows下,作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目.SVN:比CVS高级一点,windows, linuxSubvertion:今天的主题 Subversion是什么 一个自由/开源版本控制系统,它管理文件和目录可以超越时间. 一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改. 更多 可以通过网络访问它的版本库,从而使用户可以在不同的电脑上使用.一定程度上可以说,允许用户在各自的地方修改同一份数据是促进协作. 不必担心由于失去某个通道而影响质量,如果存在不正确的改变,只要取消改变. 可以管理任何类型的文件集,对你这可能是源代码―对别人,可能是一个货物清单或者是数字电影. Subversion的历史 ,自由软件的成果 2000年,CollabNet开始寻找CVS替代产品的开发人员,CollabNet提供了一个协作软件套件SourceCast,它的一个组件是版本控制系统.2000年2月,他们联系Open Source Development with CVS(Coriolis, 1999)的作者Karl Fogel,并且询问他是否希望为这个新项目工作,巧合的是,当时Karl正在与朋友Jim Blandy讨论设计一个新的版本控制系统. 更多 RedHat软件赞助他们到这个项目并提供了一个宽松的时间.CollabNet雇佣了Karl和Ben Collins Sussman,详细的设计从三月开始,在Behlendorf 、CollabNet、Jason Robbins 和Greg Stein的恰当激励的帮助下,Subversion很快吸引了许多活跃的开发者,结果是许多有CVS经验的人们很乐于有机会为这个项目做些事情. 更多 经过14个月的编码,2001年8月31日,Subversion自己能够"成为服务"了,开发者停止使用CVS保存Subversion的代码,而使用Subversion本身.Subversion像许多开源项目一样,被一些激励知识界精英的宽松透明的规则支配着.CollabNet的版权许可证完全符合Debian的自由软件方针,也就是说,任何人可以自由的下载,修改和重新发布,不需要经过CollabNet或其他人的允许. 基本模型 Subversion是一种集中的分享信息的系统,它的核心是版本库,它储存所有的数据,版本库按照文件树形式储存数据―包括文件和目录.任意数量的客户端可以连接到版本库,读写这些文件.通过写,别人可以看到这些信息,通过读数据,可以看到别人的修改. TortoiseSVN的使用 安装:TSS,FTP://218.94.9.38基本概念:档案库Repository,工作拷贝Working Copies跟踪手段:.SVN目录命令:右键操作,方便简明 两个概念 档案库Repository:档案库用分层的"文件-目录"文件系统数来存储数据.连接到档案库的客户能读写数据.档案库记录了你的每一次修改!客户端可以从档案库中取到过去的版本.工作拷贝Working Copies:通常情况下,你的工作拷贝每一个文件夹有一个以.svn为名的文件夹,也被叫做工作拷贝管理目录,这个目录里的文件能够帮助Subversion识别哪一个文件做过修改,哪一个文件相对于别人的工作已经过期了. .SVN目录 保证工作拷贝能及时跟踪档案库 原因:对于工作拷贝的每一个文件,Subversion在管理区域.svn/记录两项关键的信息:工作文件所作为基准的修订版本(叫做文件的工作修订版本)和一个本地拷贝最后更新的时间戳.结果:四种状态 四种状态 未修改且是当前的 :文件在工作目录里没有修改,在工作修订版本之后没有修改提交到版本库.svn commit操作不做任何事情,svn update不做任何事情.本地已修改且是当前的 :在工作目录已经修改,从基本修订版本之后没有修改提交到版本库.本地修改没有提交,因此svn commit会成功的提交,svn update不做任何事情.未修改且不是当前的了 :这个文件在工作目录没有修改,但在版本库中已经修改了.这个文件最终将更新到最新版本,成为当时的公共修订版本.svn commit不做任何事情,svn update将会取得最新的版本到工作拷贝.本地已修改且不是最新的 :这个文件在工作目录和版本库都得到修改.一个svn commit将会失败,这个文件必须首先更新,svn update命令会合并公共和本地修改,如果Subversion不可以自动完成,将会让用户解决冲突. 创建档案库 进入资源管理器 创建档案库的子目录,如C:/SVNRepository.在新建的目录中右键 TortoiseSVN->在此建立档案库Create Repository here.... 可用FSFS和BDB两种格式创建. 数据汇入档案库Import 删除与项目无关的中间文件如生成的临时文件*.obj等. 在资源浏览器中进入项目顶层文件夹,右键得到快捷菜单,选择汇入… (Import...) 取出工作拷贝Check Out 在资源浏览器中选定将要存放工作目录的拷贝,右键弹出快捷菜单,选择CheckOut 汇出Export 如果不想包含.svn ,可将档案库汇出到一个空目录.这时所有文件不处在版本控制下.方法:右键,选择TortoiseSVN->汇出…(Export...). Status Of The Repository 想知道别人修改了哪些文件?用检查更新..(Check For Updates...) 命令.弹出的对话框将显示出你的修改或档案库中别人的修改,这样可在更新前检查是否有冲突. 改动送到档案库 Commit 如果你的工作拷贝已更新且没有冲突,可用快捷菜单中的送交Commit... 完成送交过程. 将别人的改动更新到你的工作拷贝 更新也许是单个文件、或选择的一组文件、或整个目录.在资源浏览器中选择待更新的文件或目录, 右键并选择更新Update ,他人的修改将合并到你本地的文件中,你所做的改动保存在同一文件中. 谁动了我的奶酪? 有时你不但要知道那些代码改动了,还要知道谁改动的!使用追根溯源(谴责)Blame... 即可! 资源 http://svnbook.subversion.org.cn That is all! Thank you!