《使用SVN来进行代码的版本管理》由会员分享,可在线阅读,更多相关《使用SVN来进行代码的版本管理(50页珍藏版)》请在金锄头文库上搜索。
1、组员及分工v第第16组成员名单组成员名单:v0443111023 覃长洪覃长洪0443111367牟雅丹牟雅丹v0443111336 王王 静静0443111197罗俊鑫罗俊鑫v0443111197 卢卢 怡怡0443111143杨杨 谦谦v0443111176 张张 觅觅v作业分工作业分工:v1.Use UML to model the Gourmet Coffee Systemv杨谦杨谦 张觅张觅 罗俊鑫罗俊鑫 覃长洪覃长洪v2. Using SVN for code version managementv覃长洪覃长洪 牟雅丹牟雅丹 王静王静 卢怡卢怡使用使用SVN来进行版本管理来进行版本
2、管理覃长洪牟雅丹王静卢怡一一. 简简 介介为什么要使用SVN?v程序员编写程序的过程中,每个程序都会生成很多不同的版本.v这就需要程序员能有效的管理代码,在需要的时候可以迅速,准确取出相应的版本v任何需要管理频繁信息改变的地方都需要它,这就是Subversion的舞台1.1 Subversion是什么是什么?vSubVersion(简称SVN)是版本管理工具vSubversion是一个自由/开源版本控制系统v一组文件存放在中心版本库,记录每一次文件和目录的修改vSubversion可以通过网络访问它的版本库1.2 Subversion的特性的特性v版本化的目录版本化的目录Subversion实
3、现了一个可以跟踪目录树更改的实现了一个可以跟踪目录树更改的“虚拟虚拟”版本化文件系统版本化文件系统v真实的版本历史真实的版本历史可以新增一个具有干净历史的文件可以新增一个具有干净历史的文件v原子提交原子提交可以让用户构建一个要提交修改的逻辑块,防止部分修改提交到版本库可以让用户构建一个要提交修改的逻辑块,防止部分修改提交到版本库v版本化的元数据版本化的元数据每一个文件或目录都有一套属性每一个文件或目录都有一套属性键和它们的值键和它们的值Subversion的特性的特性(续续)v可选的网络层可选的网络层在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制在版本库访问方面有一个抽象概念,利于
4、人们去实现新的网络机制v一致的数据操作一致的数据操作文件是建立在二进制文件区别算法基础上的文件是建立在二进制文件区别算法基础上的v有效率的分支和标签有效率的分支和标签建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制v可修改性可修改性由一系列良好的共享由一系列良好的共享C库实现,具有定义良好的库实现,具有定义良好的API1.4. 1安装安装SubversionvSVN服务器端,客户端哪个先装都可以.我的安装路径为是:服务端:C:ProgramFilesSubversion客户端:C:ProgramFilesTortois
5、eSVN服务端安装好后软件会自动在系统的环境变量中增加相应的值安装完成可以在cmd命令行中输入”svnadminhelp”来测试能否运行1.4.2 部署存储库并运行服务端部署存储库并运行服务端v建立SVN的存储库,路径以D:SVNRepo为例,创建完该文件后,就进行Windows的服务绑定,以便以后每次重启机器后都能自动运行,这里用到的是Windows自带的创建服务的命令sc,在命令行模式下执行:sccreateSVNServicebinpath=C:ProgramFilesSubversionbinsvnserve.exe-service-rD:SVNRepodisplayname=SVNS
6、ervicedepend=Tcpipstart=autov在提示建立成功后,可以直接输入“netstartSVNService”来启动服务,或者可以直接在“管理工具”的“服务”中直接启动。1.4.3创建项目以及配置访问权限创建项目以及配置访问权限v进到D:SVNRepo目录下,新建一个仓库文件夹repositoryv进入D:SVNReporepository下,鼠标右键选择TotoiseSVN-CreateRepositoryhere.进行创建v创建之前保证该目录下没有任何的文件夹和文件.v创建成功后会在里面自动生成几个文件夹:dav目录是提供给Apache与mod_dav_svn使用的目录,
7、让它们存储内部数据;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号;conf存放的是配置文件.访问权限的设置方法v在conf目录下,打开svnserve.conf,设置如下:generalanon-access=none(匿名用户的权限)autn-access =write(经授权的用户的权限)password-db=passwd(指定授权用户的密码存放文件)v在同一目录下打开passwd,也就是上
8、面设置的,也可以重命名,设置如下:vusersuser1=pass1v这里指定授权访问用户名和密码,格式为:用户名=密码v接下来就可以开始使用TotoiseSVN进行Import、Update、Checkout、Commit等操作了。二二. 基基 本本 概概 念念vSubversion是一种集中的分享信息的系统,它的核心是版本库版本库v它储存所有的数据,版本库按照文件树文件树形式储存数据包括文件和目录.v任意数量的客户端客户端可以连接到版本库,读写这些文件.v通过写,别人可以看到这些信息,通过读数据,可以看到别人的修改2.2 文件共享的问题文件共享的问题2.3. 锁定锁定-修改修改-解锁解锁
9、方案方案锁定-修改-解锁模型缺点v锁定可能导致管理问题锁定可能导致管理问题v锁定可能导致不必要的线性化开发锁定可能导致不必要的线性化开发v锁定可能导致错误的安全状态锁定可能导致错误的安全状态2.4.拷贝拷贝-修改修改-合并合并 方案方案3版本管理版本管理v我们使用SubVersion(简称SVN)作为版本管理工具。这里着重介绍SVN作为跨平台的多人协作使用方法。v在多个程序员管理同一段代码的过程中,版本的管理显得尤为重要,使用SVN可以方便的进行分支、合并,记录下所有的版本。3.1.1忽略文件v在SVN的Setting的General中,设置需要忽略的文件以便忽略掉一些临时的、无用的文件,常被
10、忽略的文件有*.opt*.ncb*.suo*.plg*.pch*.idb*.pdb*.scc*.objDebugRelease*.o*.bin*.out*.ilk*.apsdebugrelease*.clw*.bak.每个程序员可以根据自己的需要进行修改忽略文件,上面只是使用VC+与Tornado编程时常用的一些忽略文件。v以上说的忽略文件是指全局的忽略文件。SVN还能在特定的目录中指定需要忽略的文件。忽略文件支持通配符。3.1.2合并比较工具合并比较工具v在MergeTool中可以选择用来合并的工具,推荐用AraxisMerge.v在Setting-Diff中填C:ProgramFilesA
11、raxisAraxisMergev6.5Merge.exe;在Setting-Merge的选项中,填入C:ProgramFilesAraxisAraxisMergev6.5Merge.exe%theirs%mine%merged;v其中C:ProgramFilesAraxisAraxisMergev6.5Merge.exe是指合并工具的路径,%theirs%mine%merged分别指将要合并到主干的分支,主干,及合并后的结果。3.2 项目基本流程项目基本流程v一个项目会有多个人共同合作开发完成。基本流程是:v1.各开发成员建立自己的分支,并在此分支上开发;v2.各开发成员把分支合并到主干上并
12、形成较为稳定的版本;v3.各个成员重新从主干上建立新的分支,在此分支上开发(即回到第一步);v4.循环往复,直到工程结束。3.3 代码的版本管理代码的版本管理v运行独立服务器运行独立服务器 在任意目录下运行:在任意目录下运行:svnserve -d -r D:svndemorepository ,服务器程序就已经服务器程序就已经启动了。启动了。3.3.2.初始化导入初始化导入v在codetrunk目录下创建一个hello.c文件#include void main() printf(Hello World!n); 来到将导入的项目根目录,这里是D:svndemoinitprojectv右键-T
13、ortoiseSVN-Import.vURLofrepository输入“svn:/localhost/”v输入用户名和密码v完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了刚才定义的版本库中。3.3.3.仓库目录结构仓库目录结构v仓库的一级目录只有两个,分别为code和doc。其中,doc主要用来放置先期的文档,code主要用来放置工程的代码,也可以包含后期的文档。v仓库的二级目录只可以是branch与trunk两个目录,分别存放主干与分支。trunk目录下直接存放工程文件。branch目录下包括一些子目录分别对应各个分支。工作目录空白处鼠标点击鼠标右键TortoiseSVNR
14、epo-browser可以看到仓库浏览器3.3.4.基本客户端操作基本客户端操作v取出版本库到一个工作拷贝:来到任意空目录下,在本例中是D:SVNRepowc1,点击右键-Checkout,在URLofrepository中输入svn:/localhost/code/trunk,这样我们就得到了一份工作拷贝。v注意:从SVN仓库中取出代码时,一定不要把整个仓库取出来,而应该只取出trunk目录,或只取出branch下的某个分支目录,点OK.v在工作拷贝中作出修改并提交:打开hello.c作出修改,然后右键-Commit.,这样就把修改提交到了版本库,我们可以运行。v查看所作的修改:Hello.
15、c上右键-TortoiseSVN-ShowLog,这样就可以看到我们对这个文件所有的提交。v在版本1上右键-Comparewithworkingcopy,我们可以比较工作拷贝的文件和版本1的区别。3.4 版本的回退版本的回退v推荐几种方法:v1.若编辑了工程,在没有提交的前提下,想放弃这些修改,可以直接选择revert更新到工程的最新的版本。v2.若想退回到某一个版本,可以直接选择updatetoreversion,这样就可以把版本回退到选中的版本去,这种情况下SVN并没有显示出有什么冲突,并且新建立的文件也还在,但是并不能直接在回退后的版本上进行编辑,因为SVN的版本控制还是在最新的主干上。
16、我们需要update并解决冲突。v3.可以直接选择revertchangesfromthisrevision,这样可以直接解决冲突并提交。不过这种方法的不足是,新建的文件都没有了,整个工程都回退到之前的版本了。v4.在此推荐一种方法:直接export一个需要的版本,然后用export的版本覆盖你的最新的版本,这样就可以不丢失你新建的文件,同时获得head的SVN控制文件。3.5.分支与分支的合并分支与分支的合并v分支分支的基本概念:开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史。分支合并分支合并v在工作的目录
17、下点右键在工作的目录下点右键TortoiseSVN Merge 打开合并工具打开合并工具可以选择从一个版本合并到另一个版本,在合并之前,可以点Diff比较这两个版本的异同,然后就可以点Merge合并在工程目录上点右键,进行SVN-Resolved。这样会删除无用的临时文件。l最后提交所作的修改,并添加详细的注释。参考文献参考文献:1使用Subversion进行版本控制针对Subversion1.1(本书编译对应1876修订版本)BenCollins-Sussman Brian W.Fitzpatrick C. MichaelPilato 版权2002,2003,2004,2005BenCollins-Sussman,BrianW.Fitzpatrick,C.MichaelPilato2版本控制之道:使用Subversion(第2版)(美)梅森(Mason,M.)同作者作品陶文同译者作品电子工业出版社