当前位置:文档之家› SVN使用手册(简易版)

SVN使用手册(简易版)

SVN使用手册(简易版)
SVN使用手册(简易版)

SVN使用手册——命令行模式

1SVN概述

SVN的全称Subversion,和VSS一样用来有效地管理代码和版本。同样我们可以进行修改、对比版本、获得版本的历史信息等操作。

1.1 SVN使用环境及安装

SVN的使用环境:

SVN可在Linux系统使用,安装系统时如果选择了自带Subversion,无需安装即可使用命令行。

Windows系统需安装Subversion以便在命令行中使用SVN命令;也可安装TortoiseSVN(“小乌龟”),不用敲SVN命令直接通过右键菜单执行。

目前北研所的SVN使用基于TCP/IP协议的Apache服务器,使我们可以通过http地址来访问版本库。

本文介绍在Windows平台下SVN命令行工具svn的使用。

安装文件:

Subversion ——svn-1.4.6-setup.exe TortoiseSVN——TortoiseSVN-1.4.6.11647-win32-svn-1.4.6.rar

文件的具体地址,请参考下文“2.1”章节的介绍。

1.2SVN工作原理说明

1.2.1版本库(repository)

SVN所有的数据都存储在版本库中并被任意客户端用户分享。客户端用户通过网络连接到版本库,读写这些文件并使其他人可以看到这些修改。

1.2.2工作拷贝(workcopy)

工作拷贝是版本库中文件和目录在本地的映射。用户并行工作,各自修改本机的私有目录和文件,最终把修改“提交”至版本库成为最终的版本。

一个工作拷贝中都会有一个“.SVN”管理目录,用来记录工作拷贝的信息、识别文件的状态。由Subversion维护,一般你不用去管它。

1.2.3修订版本(revision)

版本库接受一次“提交”,就会做一次修订,并给最新版本赋予一个修订版本号,由0开始,逐次加1。修订版本号类似于VSS中的lable标号,更像是一次“提交”后的版本库的“快照”。

1.2.4防止修改冲突的机制

版本控制系统需要防止可能出现的修改冲突。而SVN和VSS的机制是不同的。VSS采用锁定—修改—解锁的模式保证某一时刻只有一个用户修改文件。如图,

图1.1-1:甲从版本库check out签出同时锁定文件;

图1.1-2:文件被锁定乙无法签出文件(check out操作被拒绝);

图1.1-3:甲在本地修改好文件后将其check in,服务器上的文件被更新,并同时解锁;

图1.1-4:文件解锁乙才能check out签出修改,文件被check out后再次锁定。SVN系统通过拷贝-修改-合并的模式来防止不小心覆盖掉他人的修改。如图,

图1.2-1:甲、乙下载同一版本库的文件到本地工作拷贝各自进行修改。

图1.2-2:提交修改时如果甲、乙的修改没有交迭冲突(修改的是同一版本库不同的文件,或者修改的是同一文件的不同部分),SVN会自动合并这些修改到版本库。

图1.2-3:如果甲、乙对同一文件的修改产生交迭(修改冲突),甲先提交后乙提交时SVN提示文件A处于冲突状态,这时乙需要跟甲进行讨论,再把手工合并的文件提交至版本库。

2申请JZBY SVN用户名

2.1申请用户名的流程。

没有用户名时,可以用公共用户名jzby(密码jzby)练习SVN操作。

3SVN的基本使用操作

3.0进入工作环境

进入命令行。开始—运行—输入cmd。

运行svn --version命令来检查你的电脑是否安装了Subversion。如果输出显示SVN版本信息即表明电脑已安装Subversion,否则需下载安装SVN包。

确认权限。

方法一:在浏览器地址栏输入http://192.168.4.46/svn,从版本库列表中选中你要访问的库,输入用户名密码,如果能打开,确认你有这个库读的权限。方法二:在命令行中运行svn list命令查看版本库根目录下的目录和文件列表。

如下图,查看是否具有TestProject库的权限。

在命令行任意路径下,svn list后面跟要查看的版本库URL地址。如果查看失败表明你没有版本库的读权限。

3.1 万能的help命令

使用help命令来查询svn的子命令以及子命令的各种用法会很方便。

求助格式:1.svn help可以查到svn的用法和它所有可用的子命令。

2.svn help [子命令] (例如:svn help add)

可以查看该子命令的用法以及可以使用哪些选项参数。

3.2 基本的工作周期

典型的工作周期如图,

3.3 拷贝版本库至工作拷贝(svn checkout)

在E盘新建一个文件夹比如workcopy,用来存放各个版本库的工作拷贝。

举例,拷贝测试库TestProject到本地工作拷贝的步骤。

切换命令行路径至E:\workcopy> ,使用命令svn checkout来取出拷贝。

svn checkout命令后面跟版本库或其子目录的URL地址,再后面跟工作拷贝的名字。以上命令将取出的测试库工作拷贝取名testcopy,放在E:\workcopy下。如果不指定工作拷贝的名字,默认和版本库同名并放在E:\workcopy下。

打开workcopy,看是否有了相应名字的文件夹。即为测试库TestProject

的工作拷贝。

3.4 修改、编辑文件

文件内容的修改——直接在工作拷贝中修改,不涉及到命令行操作。所做的修改如果不提交就只是在本地的修改,不会上传版本库。

如果想更改版本库目录树结构——比如添加删除等操作,就要使用svn命令(svn add/delete/copy),在下文3.5章节中有详细介绍。

3.5 添加文件和目录(svn add/svn mkdir)

举例,在测试库TestProject根目录中添加一个目录calc。

方法1:

先直接在工作拷贝中新建calc文件夹,但是calc目录还没有纳入版本控制。 切换命令行路径至E:\workcopy\TestProject>,使用svn add添加新建的文件夹。

svn add命令后面跟要预定添加的目录名。运行输出为A calc,表示预定添加calc目录到版本库。

方法2:

切换命令行路径至E:\workcopy\TestProject>,使用svn mkdir命令。

svn mkdir命令后面跟要预定添加的目录名。运行结果为A calc。此命令在工作拷贝中添加了calc目录,并预定添加到版本库中。

3.6 删除文件和目录(svn delete)

举例,删除测试库TestProject中calc目录下的12.txt文本文件。

使用如下svn delete命令。

svn delete命令后面跟要预定删除的文件路径。运行输出为D 12.txt,此命令在工作拷贝中删除了calc\12.txt并预定从版本库中删除。

3.7 更新工作拷贝(svn update)

更新工作拷贝,是比较本地.SVN里保存的原始工作拷贝和目前的版本库,将版本库中的改动吸收到本地工作拷贝中来。应当及时更新你的工作拷贝,合并他人的修改。

使用如下svn update命令来更新工作拷贝,通过运行输出显示的文件状态(大写字母)来告诉你进行了何种更新。简单举例如下,

U calc\911.txt文件911.txt被更新

G casver.c文件casver.c接收了版本库的更改,你的工作拷贝也做了修改,但不冲突,SVN自动合并版本库和本地文件。

C ca_bdc.c对文件ca_bdc.c的本地修改和版本库冲突,需要手工解决。

如果版本库和原始工作拷贝是一致的,则运行结果只是提示版本库的最新修订版本号。

3.8 检查你的修改(svn status)

经常会用到svn status命令来检测你对文件和目录的修改。和svn update命令不同,它比较的是你目前最新的工作拷贝和.SVN里面保存的原始工作拷贝。不会去联系版本库,所以不能知道版本库的状态,只能看到本地的修改。

svn status也可通过运行输出显示的文件状态来告诉你对原始工作拷贝进行了怎样的修改。简单举例,

?boo.txt表示boo.txt在工作拷贝中但并没有纳入版本控制

D1/12.txt表示12.txt预定要从版本库删除

A calc/11.txt表示11.txt预定要添加到版本库

M ca_bdc.c表示ca_bdc.c文件已经在本地修改过了

如果你并没有对工作拷贝做任何修改,那么svn status命令输出为空。

3.9 提交你的修改(svn commit)

在进行了一系列文件修改、增加或删除后,你准备好把在工作拷贝里做的这些修改提交到版本库中,这时要使用svn commit命令。

注意,命令中必须同时提供一些描述修改的日志信息,否则会提交失败。

可以使用--message参数提供日志信息。

直接在--message后面写日志信息并用引号括起来(不用引号引起来则只会记录所写日志信息的第一个字符,后面的字符被遗失)。

较长的日志信息还可以放在文件里面,通过--file参数指向文件。

--file后面跟日志文件的相对路径或绝对路径。文件里面的内容就是此次修订版本的日志信息。运行输出显示你做的操作,并提示提交后的修订版本号。

除了--message和--file参数,还可以使用--editor-cmd参数指定编辑器,直接打开编辑器写日志信息。比如指定编辑器为记事本编辑器(notepad)。

输入命令按回车后会自动弹出记事本编辑器,在里面输入日志信息并保存后就能看到运行输出提示修订版本号,即提交成功。

3.10 检查你的修改(svn diff)

svn diff命令用来精确地比较区别,它的输出用统一区别格式将文件区别精确显示。它有三种用法。

比较版本库和版本库。

举例:TestSVN版本库31号修订版本和32号修订版本进行比较。

通过-r参数传递了两个版本号,通过冒号分开,这两个版本库会进行比较,输出显示所有的差异至当前屏幕。

比较工作拷贝和版本库。

如果通过-r参数来只传递了一个版本号36,你的工作拷贝会和此指定版本进行比较,输出显示所有的差异至当前屏幕。

比较本地修改。

如果运行不带参数的svn diff命令,比较的是你的工作文件和缓存在.SVN里面的原始工作拷贝。举例如下图。

缓存在.SVN里面的原始工作拷贝是86号版本库。这样就可以精确比较出你在原始工作拷贝上都修改了什么。如果你没有对工作拷贝做任何修改,那么svn diff 命令输出为空。

svn diff命令输出的格式是统一区别格式,删除的行前面有个“-”,添加的行前面有个“+”。

3.11 撤销修改(svn revert)

svn revert命令能恢复任何预定要做的操作。已经提交的修改则不能被撤销。举例:通过svn diff对比发现了错误,想撤销对文件1\12.txt的修改。

先看下文件状态。

由svn status命令的运行输出可以看出12.txt文件的确已经被修改,并且还未提交版本库,可以撤销操作。

使用svn revert来撤销操作。

svn revert后面跟想要恢复的文件路径。运行输出提示已经恢复文件,这样工作拷贝中文件1\12.txt就回到修改前的状态。

3.12 查看历史信息(svn log)

使用svn log命令可以查看版本库的历史修订信息,包括:修订版本号、修订人、修订时间、提交的日志信息和路径的变动信息。

举例:查看测试库的78号至80号版本的历史信息。

svn log命令通过-r参数传递两个版本号(冒号分隔)作为查看历史信息的版本号区间,输出信息是此区间内所有版本号的历史信息。

通过-r只传递一个版本号,那么只输出此版本的历史信息。

不带-r参数的svn log命令会将所有版本号的历史信息逆序输出显示。

3.13 查看历史版本中的文件内容(svn cat)

举例:查看TestProject库78号版本中casver.c文件的内容。

使用如下svn cat命令。

svn cat命令后面跟要查看的文件路径并通过-r参数指定了修订版本号。这样,78号版本中casver.c文件的内容将输出显示到当前屏幕。

附表1-1。

相关主题
文本预览
相关文档 最新文档