您的位置:首页 > 其它

svn及其使用简介

2014-01-14 20:45 169 查看

版本库




Subversion是文件服务系统,一个特别的文件系统。它可以记录每一次的更改,包括文件和目录的修改,增删等。

版本模型

锁定-修改-解锁




图一锁定-修改-解锁方案

拷贝-修改-合并




图二拷贝-修改-合并方案

工作拷贝

一个subversion工作拷贝是本地机器一个普通的目录,保存着一些文件,可以任意编辑文件。工作拷贝时在私有工作区,在明确的做了特定操作之前,subversion不会把修改与其他人的合并,也不会把你的修改展示给别人。

修订版本




图三 subversion版本库Subversion的修订号是针对整个目录树的,而不是单个文件。每一个修订号代表了一次提交后版本库整个目录树的特定状态,另一种理解是修订号N代表版本库已经经过了N次提交。同一时刻仓库中所有文件都处于同一个修订版本。

Cvs是针对每个文件进行。在同一个时刻,仓库中的文件可能处于不同的修订版本。如图四所示,文件名后面的数字代表此文件的修订版本。



图四 cvs版本库示意

分支和标签

分支




图五开发分支用途:针对不同的小需求,维护不同的版本;协作开发时,个别人员可在分支上进行开发,在适当时间合并到主干上来。
Subversion的分支存在于真实的正常文件系统中,并不是存在于另外的维度,这些目录只是保留了额外的历史信息。如下面的目录结构,三个分支都有目录与之对应,只是他们的历史信息不一样,如图五所示,分支1可能从修订版本n拷贝过来,分支2则可能是从修订版本m拷贝过来,分支3则可能从修订版本k拷贝过来(m<n<k)。
C:\USERS\SIY\PROJ├─branch│├─branch1│├─branch2│└─branch3├─tags└─trunk

标签

用途:保存发布的版本。
Subversion的标签和分支一样,也存在于真实的文件系统中。开发人员时间软件功能后,向用户发布时,应该将发布的源代码,文档,二进制文件拷贝一份作为备份,这个备份通常可以叫做标签。这些标签不再做任何更改,一直保存在仓库中。
C:\USERS\SIY\PROJ
├─branch
│├─branch1
│├─branch2
│└─branch3
├─tags
│├─proj_1.0.0.1
│├─proj_1.0.0.2
│└─proj_2.0.0.0
└─trunk

本质上讲,分支和标签没有本质的区别,只是开发者人为的划分,它们都是主干上的一个拷贝而已。

要生成分支或者标签只需要使用svncopy命令拷贝相应目录即可,具体可svnhelp copy查看帮助。

使用心得

图形界面vs命令行

1、查看工作拷贝中哪些目录、哪些文件做了修改?





D:\work\workspace>svnst? trunk\Release? trunk\Debug? trunk\controlled.opt? trunk\controlled.ncb? trunk\test\Release? trunk\test\test.plg? trunk\Controller\Controller_i.c? trunk\Controller\Release? trunk\Controller\Controller_i.h? trunk\Controller\Debug? trunk\Controller\res\Thumbs.dbM trunk\Controller\ForwardMgrSplit.cpp! trunk\test_lib\test_lib.ncb......很显然,图形界面直观方便。2、对比工作拷贝最新状态和原始状态的区别。图形界面无法对整个目录进行对比操作,操作很繁琐;如果查看每个文件的不同,并且每个文件都提交的话,在文件很多的情况下,会形成过多的修订版本。
命令行可对整个目录进行比较操作,可方便查看每个不同之处、了解整体的修改情况、对整个文件夹进行提交。3、提交修改文件。图形界面提交:可对整个文件夹进行提交,但无法同时查看所有修改,不便写修改日志;每个文件提交一次产生过多的修订版本。命令行提交:可对整个文件夹进行提交,可同时查看所有修改,方便写修改日志。4、备份和恢复操作。在tortoise svn的图形界面中未发现此功能……命令行备份svnadmin dump 仓库路径 > proj1.dump (可以对指定的修订版本进行备份,具体看命令的帮助)命令行恢复:svnadmin create 仓库路径svnadmin load 仓库路径 < proj1.dump

图形界面和命令行可结合使用,以命令行为主,图形界面主要用于查看哪些目录哪些文件被修改。

工作流程

1、单人工作过程l创建仓库svnadmin create 仓库路径如:svnadmin create e:\mycode\proj1若仓库已经存在则跳过l导入svn import 本地路径仓库路径svn import e: \proj1svn:///e:/mycode/proj1 (内网搭建的是https的访问方式)若已经导入则跳过。导入之后可将proj1删除,真正要编辑的文件要从仓库中导出。l导出svn checkout 仓库路径本地路径如:svn checkout svn:///e:/mycode/proj1 e:\work\proj1checkout可简写成co,若已经有本地副本则跳过l更新svn update如:进入e:\work\proj1,svn updatel修改进行正常的编程,对于文件的删除添加等操作应该使用svn del,svn add等操作,不能直接使用资源管理器进行操作,否则svn服务器无法知晓。l提交svn commit –m “日志”或者svn commit (需要配置编辑器),见注册表文件按editor.reg,此处配置的gvim。

2、多人协作过程l创建仓库l导入l导出l更新l修改l提交l处理冲突l再提交基本和单人的工作过程一致,多了冲突处理。3、备份还原这个在代码迁移中很常用(比如两个物理隔离网络之间的代码迁移)。
svnadmin dump 仓库路径 > proj1.dump (可以对指定的修订版本进行备份,具体看命令的帮助)
命令行恢复:
svnadmin create 仓库路径
svnadmin load 仓库路径 < proj1.dump
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  svn 开发 版本控制