SVN版本控制工具介绍报告.doc

上传人:牧羊曲112 文档编号:3981591 上传时间:2023-03-30 格式:DOC 页数:23 大小:625.50KB
返回 下载 相关 举报
SVN版本控制工具介绍报告.doc_第1页
第1页 / 共23页
SVN版本控制工具介绍报告.doc_第2页
第2页 / 共23页
SVN版本控制工具介绍报告.doc_第3页
第3页 / 共23页
SVN版本控制工具介绍报告.doc_第4页
第4页 / 共23页
SVN版本控制工具介绍报告.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《SVN版本控制工具介绍报告.doc》由会员分享,可在线阅读,更多相关《SVN版本控制工具介绍报告.doc(23页珍藏版)》请在三一办公上搜索。

1、SVN版本控制工具介绍Version historyIndexVersionAuthorDateComment11.0.0Xiaoyong Wen2012-8-14Create21.0.1Xiaoyong Wen2012-8-15Fix up目录SVN版本控制工具介绍1Version history1目录2前言3术语41. SVN简介41.1 SVN的历史41.2 SVN的特点51.3 SVN Client图形化软件61.4 其它版本控制工具,VSS,CVS,GIT62. SVN server,VisualSVN-Server72.1 下载安装VisualSVN-Server72.2 配置Vi

2、sualSVN-Server82.2.1 创建资料库82.2.2 配置用户访问权限103. SVN client,TortoiseSVN和Linux中的SVN命令。123.1 下载TortoiseSVN123.2 TortoiseSVN的基本操作123.3 Ubuntu 10.04,svn命令174. SVN版本控制过程184.1 Linux kernel开发环境184.2 SVN版本控制基本流程184.2.1 SVN server side184.2.2 SVN client side184. 3 SVN高级主题225. 参考资料23前言版本控制(Revision control)是维护工程

3、蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程式档案都得到同步。本文档介绍了SVN server、client的安装,配置,和使用。SVN server使用Windows版本,VisualSVN-Server-1.7.2.msi。SVN client使用Windows版本,TortoiseSVN-1.6.2.16344-win32-svn-1.6.2.msi,和Ubuntu Linux 32-bit,svn, version 1.6.6 (r40053)。读者可以根据需要下载最新的稳定版本。术语基线

4、(Baseline)基线是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础。档案库(Repository)存储档案的新版本还有历史资料的地方,通常是在服务器上。有时候也叫Depot(像是在SVK、AccuRev还有Perforce中)工作版本(Working copy):从档案库中取出一个本地端(客户端)的复制,针对一个特定的时间或是版本。所有在档案库中的档案更动,都是从一个工作版本中修改而来的,这也是这名称的由来。观念上,这是一个沙盒。提交(Commit)将本地端的修改送回档案库。(由版本控制软件处理“跟上次更动相比,哪个档案又被更动”的事)变更(Change)对一份文件作

5、的特定更动。变更记录(Change List)取出(Check-Out)从档案库取出档案到本地端(客户端)。更新(Update)将档案库的修改送到本地端(与送交相反)。合并(Merge / Integration)合并各个改变。版次(Revision)一个revision或version指的是一系列版本变迁的其中之一。汇入(Import)汇出(Export)冲突(Conflict)当两方更动同一份文件会发生冲突。1. SVN简介1.1 SVN的历史Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越

6、来越多的控制服务从CVS转移到Subversion。在2000年初,开发人员要写一个CVS的自由软件代替品,它保留CVS的基本思想,但没有它的错误和局限。2000年2月,他们联系了Open Source Development with CVS(Coriolis, 1999)的作者Karl Fogel,问他是否愿意为这个新专案工作。巧的是这时Karl已经在和他的朋友Jim Blandy讨论一个新的版本控制系统的设计。在1995年,两人开了一家提供CVS技术支持的公司,叫作Cyclic Software。虽然公司已经卖掉了,他们仍然在日常工作中使用CVS。在使用CVS时受到的束缚已经让Jim开始

7、仔细思考管理版本化数据的更好的路子。他不仅已经起好了名字“Subversion”,而且有了Subvesion资料库的基本设计。当CollabNet打来电话时,Karl立刻同意为这个专案工作。Jim征得他的老板RedHat Software的同意,让他投入这个专案,而且没有时间限制。CollabNet雇用了Karl和Ben Collins-Sussman,从5月份开始详细设计。由于Greg Stein和CollabNet的Brian Behlendorf和Jason Robbins作了恰当的推动,Subversion很快吸引了一个活跃的开发人员社区。这说明了许多人有相同的受制于CVS的经验,他们

8、对终于有机会对它做点什么表示欢迎。最初的设计团队设定了几个简单的目标。他们并不想在版本控制方法论上有新突破。他们只想修补CVS。他们决定Subversion应该与CVS相似,保留相同的开发模型,但不复制CVS最明显的缺点。虽然它不一定是CVS的完全的替代品,它应该和CVS足够象,从而任何CVS用户可以不费什么力气的转换过来。经过14个月的编码,在2001年8月31号,Subversion可以“自我寄生”了。就是说,Subversion开发人员停止使用CVS管理Subversion的源代码,开始使用Subversion代替。虽然CollabNet发起了这个项目,而且仍然支助一大部分的工作(它为一

9、些专职的Subversion开发人员发薪水)。但是 Subversion像大部分开放源码的项目一样运作,由一个松散透明,鼓励能者多劳的规则管理。CollabNet的版权许可证和Debian FSG完全兼容。换句话说,任何人可以免费下载,修改,按自己的意愿重新分发Subversion,而不必得到来自CollabNet或其他任何人的许可。2009年11月,Subversion被Apache Incubator专案所接收。2010年1月,正式成为Apache软件基金会的一个顶级专案。1.2 SVN的特点SVN的特性: * 统一的版本号。CVS是对每个文件顺序编排版本号,在某一时间各文件的版本号各不相

10、同。而Subversion下,任何一次提交都会对所有文件增加到同一个新版本号,即使是提交并不涉及的文件。所以,各文件在某任意时间的版本号是相同的。版本号相同的文件构成软件的一个版本。 * 原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。 * 重命名、复制、删除文件等动作都保存在版本历史记录当中。 * 对于二进制文件,使用了节省空间的保存方法。(简单的理解,就是只保存和上一版本不同之处) * 目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。 * 分支的开销非常小。 * 优化过

11、的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量。 * 支持元数据(Metadata)管理。每个目录或文件都可以定义属性(Property),它是一些隐藏的键值对,用户可以自定义属性内容,而且属性和文件内容一样在版本控制范围内。* 支持FSFS和Berkeley DB两种资料库格式。SVN的不足* 只能设置目录的访问权限,无法设置单个文件的访问权限。(目前可以通过辅助模块比如wandisco access control实现单文件访问)* 数据库为二进制格式,无法方便的利用其它软件读取数据库的内容。1.3 SVN Client图形化软件Tor

12、toiseSVN在windows非常受到欢迎的一套Client软件,与资源管理器集成得相当不错,可以通过资源管理器在文件或目录上用鼠标右键的菜单完成SVN的操作。 TortoiseSVN官方站点Ankhsvn将subversion的操作集成进Visual Studio的SVN Client软件。 Ankhsvn官方站点Subclipse将Subversion的操作集成进Eclipse的SVN Client软件。 Subclipse官方站点Subversive和Subclipse相同 Subversive官方站点SCPluginMac OS下类似TortoiseSVN的软件 SCPlugin官方

13、站点SVNxMac OS X下的一款Client软件 SVNx官方站点eSVNUnix下类似TortoiseSVN的软件 eSVN官方站点kdesvnLinux下使用KDE桌面管理下类似TortoiseSVN的软件 kdesvn官方站点RabbitVCSLinux下使用Gnome桌面管理下类似TortoiseSVN的软件 RabbitVCS官方站点1.4 其它版本控制工具,VSS,CVS,GITVSSMicrosoft Visual SourceSafe是美国微软公司出品的版本控制系统,简称VSS。软件支持Windows系统所支持的所有文件格式,兼容Check out-Modify-Check

14、 in(独占工作模式)与Copy-Modify-Merge(并行工作模式)。VSS通常与微软公司的Visual Studio产品同时发布,并且高度集成。VSS使用文件系统作为存储方式,每次版本变更时就需要大量地读写硬盘。这也是VSS最广受垢弊的缺点。快速大量的信息交换的需要,使得VSS仅适用于快速本地网络,而无法实现基于Web的快速操作,尽管一个妥协的办法是可以通过慢速的VPN。VSS2005 拥有Web访问功能,不再与Visual Studio同时发布。为了实现VSS的远程和跨平台访问,微软推荐VSS用户使用第三方工具,例如SourceAnywhere for VSS。在Visual Stu

15、dio2008 Team System 中集成了另外一个叫做Team Foundation Server的项目生命期管理工具。VSS未来将面向独立开发者和小型开发团队。VSS虽然是微软公司的产品,但微软内部却很少使用它。微软内部使用一个名为SLM的版本控制系统,直至1999年。之后,微软内部改以使用修改自Perforce的SourceDepot。CVSCVS(Concurrent Versions System)代表协作版本系统或者并发版本系统,是一种版本控制系统,方便软件的开发和使用者协同工作。很多开源或者自由软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这

16、些项目包括:Gnome、KDE、GIMP、Wine等。CVS的使用获GNU通用公共许可证授权。这是一个将一组文件放在层次目录树中以保持同步的系统。人们可以从CVS服务器上更新他们的本地层次树副本,并将修改的结果或新文件发回;或者删除旧文件。CVS基于客户端/服务器结构(C/S)的行为使得其可容纳多用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。GITGit是一个由林纳斯托瓦兹 (Linus Benedict Torvalds)为了更好地管理linux内核开发而创立的分布式版本控制软件配置管理软件。需要注意的是和GNU Interac

17、tive Tools,一个类似Norton Commander界面的文件管理器相区分。Git最初的开发动力来自于BitKeeper和Monotone。Git最初只是作为一个可以被其他前端比如Cogito或StGIT包装的后端而开发的。不过,后来Git内核已经成熟到可以独立地用作版本控制。很多有名的软件都使用Git来进行版本控制,其中有Linux内核、X.Org服务器和OLPC内核开发。林纳斯托瓦兹自嘲地取了这个名字git。在英式英语中指一个愚笨或者不开心的人。“ Im an egotistical bastard, and I name all my projects after myself

18、. First Linux, now git. ”2. SVN server,VisualSVN-Server2.1 下载安装VisualSVN-Server官方网站:最新版本是Version 2.5.5。System RequirementsOperating Systems * Windows XP * Windows Server 2003 * Windows Vista * Windows Server 2008 * Windows Server 2008 R2 * Windows 7Minimum hardware * Pentium 500MHz or greater * 128

19、MB RAM or greater * 30 MB hard drive space2.2 配置VisualSVN-ServerVisualSVN-Server的启动界面(图2-1)。图2-12.2.1 创建资料库右击Repositories,弹出下面的对话框(图2-2)。图2-2资料库名称是“Eyesight_SoC”,勾选“Create default structure(trunk, branches, tags)”,点击“OK”,即创建成功(图2-3)。图2-3同样,通过快捷菜单,在”trunk”目录下创建相应的子目录“project”、“kernel”、“rootfs”、“app”、

20、“u-boot”、“doc”来归类源代码、文档、项目管理。规划的项目管理流程中,有一个配置管理计划文档(图2-4)。图2-42.2.2 配置用户访问权限可以针对组和单个用户进行管理。同一组可以给于不同的权限,每个用户也可以配置成不同的权限。创建用户,通过快捷菜单(图2-5),输入用户名和口令,点击OK。图2-5创建组,通过快捷菜单(图2-6),输入用组名,添加组成员,点击OK。图2-6创建组app(图2-7)。图2-7针对目录,配置访问权限:不可访问,只读,可读可写。例如,针对project目录,配置project组的可读可写权限(图2-8)。图2-83. SVN client,Tortois

21、eSVN和Linux中的SVN命令。3.1 下载TortoiseSVN官方网站:The current version is 1.7.7。3.2 TortoiseSVN的基本操作访问SVN server中的资料库(图3-1)。图3-1输入帐号和口令登录后(图3-2)。图3-2通过快捷菜单,弹出操作菜单(图3-3):图3-3Show log: 显示日志。Revision graph: 修订版本图。Export: 导出资料库,不做版本控制。Checkout: 签出资料库,做版本控制。同时,在Windows的资源管理器中,自动加下SVN的快捷菜单(图3-4)。图3-4如果对已加入SVN版本控制的目录

22、右击,弹出的快捷菜单(图3-5)。图3-5对加入SVN版本控制的单个文件,快捷菜单(图3-6)。图3-6可以对当前的工作版本和SVN库里的版本进行比较,例如Linux kernel的.config配置文件(图3-7)。图3-73.3 Ubuntu 10.04,svn命令安装svn client命令:# apt-get install subversionsvn帮助命令:#svn helpusage: svn options argsSubversion command-line client, version 1.6.6.Type svn help for help on a specific

23、 subcommand.Type svn -version to see the program version and RA modules or svn -version -quiet to see just the version number.Most subcommands take file and/or directory arguments, recursingon the directories. If no arguments are supplied to such acommand, it recurses on the current directory (inclu

24、sive) by default.Available subcommands: add blame (praise, annotate, ann) cat changelist (cl) checkout (co) cleanup commit (ci) copy (cp) delete (del, remove, rm) diff (di) export help (?, h) import info list (ls) lock log merge mergeinfo mkdir move (mv, rename, ren) propdel (pdel, pd) propedit (ped

25、it, pe) propget (pget, pg) proplist (plist, pl) propset (pset, ps) resolve resolved revert status (stat, st) switch (sw) unlock update (up)Subversion is a tool for version control.For additional information, see http:/subversion.tigris.org/4. SVN版本控制过程4.1 Linux kernel开发环境因为我习惯在Windows xp中安装VMware,在V

26、Mware中安装Linux(这里使用Ubuntu 10.04), Ubuntu中安装ssh, samba, nfs, tftp服务。tftp、nfs用于方便开发调试。samba用于Windows和Linux之间的文件共享,在Windows上映射网络驱动器。在Windows xp上使用Source insight来做Linux kernel开发,个人认为这是最好的方法。用Putty, winscp, SecuCRT通过ssh 登录到Linux上编译。所以SVN Server安装在Windows上。Tips:Linux 上支持链接文件,通过Samba共享,Windows不支持链接文件,所以对Lin

27、ux kernel源代码目录树,一定要用Linux上的svn命令进行版本控制,否则会编译出错(没有深入研究,我认为是链接文件的原因)。4.2 SVN版本控制基本流程4.2.1 SVN server side建立好资料库,配置好资料库目录,用户名,组,各个组或者用户的访问权限。操作过程见2.2节。4.2.2 SVN client side把源代码或者文档导入到SVN server#svn import ./ Eyesight_SoC https:/10.0.0.159:8443/svn/Eyesight_SoC m “init”说明:svn import:svn导入命令./ Eyesight_S

28、oC:目录名称https:/10.0.0.159:8443/svn/Eyesight_SoC:svn server资料库地址-m “init”: 日志内容checkout到本地工作目录#svn checkout https:/10.0.0.159:8443/svn/Eyesight_SoC ./说明:svn checkout:svn 签出命令。https:/10.0.0.159:8443/svn/Eyesight_SoC:svn server地址。./:当前目录。查看svn版本控制信息:rootwenxy-desktop:/home/wenxy/src/Xilinx/kernel/linux-

29、2.6.35.3# svn infoPath: .URL: https:/10.0.0.62:8443/svn/wenxy/trunk/kernel/linux-2.6.35.3Repository Root: https:/10.0.0.62:8443/svn/wenxyRepository UUID: 28bcbc35-b5f1-a44b-91de-c8eadf4cf8d3Revision: 109Node Kind: directorySchedule: normalLast Changed Author: wenxyLast Changed Rev: 109Last Changed D

30、ate: 2012-07-10 14:44:53 +0800 (Tue, 10 Jul 2012)查看工作版本和资料库的变化:rootwenxy-desktop:/home/wenxy/src/Xilinx/kernel/linux-2.6.35.3# svn st|grep MM .config.oldM .version? arch/arm/plat-mxc/sdma/iapi/src/.iapiMiddleMcu.o.cmd? arch/arm/plat-mxc/sdma/iapi/src/.iapiLowMcu.o.cmd? arch/arm/plat-mxc/sdma/iapi/sr

31、c/.iapiMiddle.o.cmdM .configM include/generated/utsrelease.hM include/generated/autoconf.hM include/generated/compile.hM include/config/kernel.releaseM include/config/auto.confM include/config/tristate.confM Module.symversM make.log? drivers/sbc1651/Module.symversrootwenxy-desktop:/home/wenxy/src/Xi

32、lin说明:M表示修改过的文件。?表示新增加的文件,还没有加入版本控制,先用svn add命令加入相应的文件,然后用svncommit 命令提交对应的文件。如果要对整个工程目录做提交前,一定要先svn up同步更新下,已防止多人共同修改过同一个文件而冲突。向资料库新增加文件或者目录#svn add file-name or directory#svn commit file-name or directory m “your comment”如果放弃本地修改的文件,恢复到上一个版本#rm file-name#svn up或者#svn revert file-name提交修改的文件或者目录#sv

33、n commit file1 file2 directory m “title: modification”警告:提交到资料库中,至少要保证源代码能编译通过!这是最基本的原则,并且要加上简洁明了的注释,例如 m “I2C driver: fix up bug 12: kernel oops”。版本比较#svn diff file-name例如:rootwenxy-desktop:/home/wenxy/src/Xilinx/kernel/linux-2.6.35.3# svn diff .configIndex: .config=- .config (revision 109)+ .confi

34、g (working copy) -1,7 +1,7 # # Automatically generated make config: dont edit # Linux kernel version: 2.6.35.3-# Wed Mar 7 12:33:26 2012+# Thu Aug 2 10:30:34 2012 # CONFIG_ARM=y CONFIG_HAVE_PWM=y -79,6 +79,7 CONFIG_UID16=y CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y+# CONFIG_KALLSYMS_ALL is not set #

35、CONFIG_KALLSYMS_EXTRA_PASS is not set CONFIG_HOTPLUG=y CONFIG_PRINTK=y说明:语法参考diff工具,这是patch包的语法。版本回溯修订版本就是提交版本的一个快照,通过修订版本我们能够返回到原始的版本Subversion客户端可以理解一些修订版本关键字,这些关键字可以用来代替-revision (r)的数字参数,这会被Subversion解释到特定修订版本号:HEAD版本库中最新的(或者是“最年轻的”)版本。BASE工作拷贝中一个条目的修订版本号,如果这个版本在本地修改了,则“BASE版本”就是这个条目在本地未修改的版本。CO

36、MMITTED项目最近修改的修订版本,与BASE相同或更早。PREV一个项目最后修改版本之前的那个版本,技术上可以认为是COMMITTED -1。因为可以从描述中得到,关键字PREV,BASE和COMMITTED只在引用工作拷贝路径时使用,而不能用于版本库URL,而关键字HEAD则可以用于两种路径类型。#svn update -r HEAD/COMMITTED/PREV/BASE filename#svn update -r 1这里的1代表修订版版本号 能够用svn log 进行查看#svn co -r 时间点或时间段 例如:rootwenxy-desktop:/home/wenxy/src/

37、s3c6410/kernel/linux-2.6.36/drivers/char# svn update -r 22 gpio.cU gpio.cUpdated to revision 22. 说明:资料库中的最新版本是24。帮助命令是svn help update。Valid options: -r -revision ARG : ARG (some commands also take ARG1:ARG2 range) A revision argument can be one of: NUMBER revision number DATE revision at start of th

38、e date HEAD latest in repository BASE base rev of items working copy COMMITTED last commit at or before BASE PREV revision just before COMMITTED查看修改以及消除冲突#svn diff发生冲突后,手动修改 然后再#svn resolved4. 3 SVN高级主题标签(Tag)一个标签只是一个项目某一时间的“快照”,在Subversion里这个概念无处不在每一次提交的修订版本都是一个精确的快照。然而人们希望更人性化的标签名称,像release-1.0。他们

39、也希望可以对一个子目录快照,毕竟,记住release-1.0是修订版本4822的某一小部分不是件很容易的事。建立简单标签$ svn copy -m Tagging the 1.0 release of the calc project.Committed revision 351.例如,对linux-2.6.36打一个标签(图4-2):图4-2Tips:Tag一般用于测试版本(、 version)和发行版本(release version)。分支与合并(branch and meger)什么是分支?假设你的工作是维护本公司一个部门的手册文档,一天,另一个部门问你要相同的手册,但一些地方会有“区

40、别”,因为他们有不同的需要。这种情况下你会怎样做?显而易见的方法是:作一个版本的拷贝,然后分别维护两个版本,只要任何一个部门告诉要做一些小修改,你必须选择在对应的版本进行更改。你也许希望在两个版本同时作修改,举个例子,你在第一个版本发现了一个拼写错误,很显然这个错误也会出现在第二个版本里。两份文档几乎相同,毕竟,只有许多特定的微小区别。这是分支的基本概念正如它的名字,开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史(见 图4.3 “分支与开发”)。图4.3.分支与开发Subversion允许你并行的维护文件和目

41、录的分支,它允许你通过拷贝数据建立分支,记住,分支互相联系,它也帮助你从一个分支复制修改到另一个分支。最终,它可以让你的工作拷贝反映到不同的分支上,所以你在日常工作可以“混合和比较”不同的开发线。分支背后的关键概念首先,Subversion并没有内在的分支概念只有拷贝,当你拷贝一个目录,这个结果目录就是一个“分支”,只是因为你给了它这样一个含义而已。你可以换一种角度考虑,或者特别对待,但是对于Subversion它只是一个普通的拷贝,只不过碰巧包含了一些额外的历史信息。第二,因为拷贝机制,Subversion的分支是以普通文件系统目录存在的,这与其他版本控制系统不同,它们都为分支定义了另一维度的“标签”。具体的操作略去,例如,Linux kernel的一个分枝是Android kernel。5. 参考资料1. Subversion中文手册(svnbook),2. TortoiseSVN中文帮助手册,3. Linux help command, man svn4. 维基百科,http:/zh.wikipedia.org/zh-cn/Subversion

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号