svn及其使用简介

版本库

svn及其使用简介

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

版本模型

锁定修改解锁

svn及其使用简介

锁定修改解锁方案

拷贝修改合并

svn及其使用简介

拷贝修改合并方案

工作拷贝

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

修订版本

svn及其使用简介

subversion版本库

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

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

svn及其使用简介

cvs版本库示意

分支和标签

分支

svn及其使用简介

开发分支

用途:针对不同的小需求,维护不同的版本;协作开发时,个别人员可在分支上进行开发,在适当时间合并到主干上来。

Subversion的分支存在于真实的正常文件系统中,并不是存在于另外的维度,这些目录只是保留了额外的历史信息。如下面的目录结构,三个分支都有目录与之对应,只是他们的历史信息不一样,如图五所示,分支1可能从修订版本n拷贝过来,分支2则可能是从修订版本m拷贝过来,分支3则可能从修订版本k拷贝过来(mnk)。

C:/USERS/SIY/PROJ

├─branch

├─branch2

├─branch3

└─branch4

├─tags

└─trunk

标签

用途:保存发布的版本。

Subversion的标签和分支一样,也存在于真实的文件系统中。开发人员时间软件功能后,向用户发布时,应该将发布的源代码,文档,二进制文件拷贝一份作为备份,这个备份通常可以叫做标签。这些标签不再做任何更改,一直保存在仓库中。

C:/USERS/SIY/PROJ

├─branch

├─branch2

├─branch3

└─branch4

├─tags

├─proj_1.0.0.1

├─proj_1.0.0.2

└─proj_2.0.0.0

└─trunk

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

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

使用心得

图形界面vs命令行

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

svn及其使用简介

svn及其使用简介

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.db

M       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/proj1

checkout可简写成co,若已经有本地副本则跳过

l更新

svn update

如:进入e:/work/proj1svn update

l修改

进行正常的编程,对于文件的删除添加等操作应该使用svn delsvn 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

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/194532.html

(0)
上一篇 2021年11月16日
下一篇 2021年11月16日

相关推荐

发表回复

登录后才能评论