SVN使用手册简易版.docx
《SVN使用手册简易版.docx》由会员分享,可在线阅读,更多相关《SVN使用手册简易版.docx(14页珍藏版)》请在冰豆网上搜索。
SVN使用手册简易版
SVN使用手册——命令行模式
1SVN概述
SVN的全称Subversion,和VSS一样用来有效地管理代码和版本。
同样我们可以进行修改、对比版本、获得版本的历史信息等操作。
1.1SVN使用环境及安装
SVN的使用环境:
SVN可在Linux系统使用,安装系统时如果选择了自带Subversion,无需安装即可使用命令行。
Windows系统需安装Subversion以便在命令行中使用SVN命令;也可安装TortoiseSVN(“小乌龟”),不用敲SVN命令直接通过右键菜单执行。
目前北研所的SVN使用基于TCP/IP协议的Apache服务器,使我们可以通过http地址来访问版本库。
平台
Linux系统
Windows平台
操作方法
命令行
浏览器
命令行
界面/右键
浏览器
安装方式
安装Linux的时候选择“开发用”则自带,否则需另安装SVN包。
无需安装,
直接在地址栏输入版本库的http地址
安装
Subversion
安装
TortoiseSVN
(“小乌龟”)
无需安装,直接在地址栏输入版本库的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:
甲从版本库checkout签出同时锁定文件;
图1.1-2:
文件被锁定乙无法签出文件(checkout操作被拒绝);
图1.1-3:
甲在本地修改好文件后将其checkin,服务器上的文件被更新,并同时解锁;
图1.1-4:
文件解锁乙才能checkout签出修改,文件被checkout后再次锁定。
SVN系统通过拷贝-修改-合并的模式来防止不小心覆盖掉他人的修改。
如图,
图1.2-1:
甲、乙下载同一版本库的文件到本地工作拷贝各自进行修改。
图1.2-2:
提交修改时如果甲、乙的修改没有交迭冲突(修改的是同一版本库不同的文件,或者修改的是同一文件的不同部分),SVN会自动合并这些修改到版本库。
图1.2-3:
如果甲、乙对同一文件的修改产生交迭(修改冲突),甲先提交后乙提交时SVN提示文件A处于冲突状态,这时乙需要跟甲进行讨论,再把手工合并的文件提交至版本库。
2申请JZBYSVN用户名
2.1申请用户名的流程。
没有用户名时,可以用公共用户名jzby(密码jzby)练习SVN操作。
3SVN的基本使用操作
3.0进入工作环境
Ø进入命令行。
开始—运行—输入cmd。
运行svn--version命令来检查你的电脑是否安装了Subversion。
如果输出显示SVN版本信息即表明电脑已安装Subversion,否则需下载安装SVN包。
Ø确认权限。
方法一:
在浏览器地址栏输入http:
//192.168.4.46/svn,从版本库列表中选中你要访问的库,输入用户名密码,如果能打开,确认你有这个库读的权限。
方法二:
在命令行中运行svnlist命令查看版本库根目录下的目录和文件列表。
如下图,查看是否具有TestProject库的权限。
在命令行任意路径下,svnlist后面跟要查看的版本库URL地址。
如果查看失败表明你没有版本库的读权限。
✧提示:
在命令行中无论是输入URL还是路径都要注意区分大小写,大小写有误会造成操作失败。
3.1万能的help命令
使用help命令来查询svn的子命令以及子命令的各种用法会很方便。
求助格式:
1.svnhelp可以查到svn的用法和它所有可用的子命令。
2.svnhelp[子命令](例如:
svnhelpadd)
可以查看该子命令的用法以及可以使用哪些选项参数。
3.2基本的工作周期
典型的工作周期如图,
3.3拷贝版本库至工作拷贝(svncheckout)
在E盘新建一个文件夹比如workcopy,用来存放各个版本库的工作拷贝。
举例,拷贝测试库TestProject到本地工作拷贝的步骤。
Ø切换命令行路径至E:
\workcopy>,使用命令svncheckout来取出拷贝。
svncheckout命令后面跟版本库或其子目录的URL地址,再后面跟工作拷贝的名字。
以上命令将取出的测试库工作拷贝取名testcopy,放在E:
\workcopy下。
如果不指定工作拷贝的名字,默认和版本库同名并放在E:
\workcopy下。
Ø打开workcopy,看是否有了相应名字的文件夹。
即为测试库TestProject的工作拷贝。
✧svncheckout还可添加--reverion(-r)参数获得历史版本。
如下命令将测试库修订号为10的历史版本,输出到名为test10的工作拷贝。
详细使用说明请用svnhelpcheckout命令查看。
✧如果输入的版本库或其子目录的URL地址错误就无法成功checkout。
比如:
输入的URL地址丢掉了http:
//,错误提示如下,
所以一定要确认svncheckout命令后的URL地址是正确的。
✧如果checkout失败,出现如下错误提示,
首先需要确认你有没有相应的权限,然后可以在原命令后添加参数“--usernameXXX--passwordXXX”输入你的用户名密码试试看。
3.4修改、编辑文件
Ø文件内容的修改——直接在工作拷贝中修改,不涉及到命令行操作。
所做的修改如果不提交就只是在本地的修改,不会上传版本库。
Ø如果想更改版本库目录树结构——比如添加删除等操作,就要使用svn命令
(svnadd/delete/copy),在下文3.5章节中有详细介绍。
✧如果不使用svn命令,直接在工作拷贝中添加文件,那么SVN不会将其纳入版本控制(工作拷贝的.SVN文件中不会管理此文件),即没有添加到工作拷贝的版本管理中,更无法在commit时将这个变动提交到版本库。
3.5添加文件和目录(svnadd/svnmkdir)
举例,在测试库TestProject根目录中添加一个目录calc。
方法1:
Ø先直接在工作拷贝中新建calc文件夹,但是calc目录还没有纳入版本控制。
Ø切换命令行路径至E:
\workcopy\TestProject>,使用svnadd添加新建的文件夹。
svnadd命令后面跟要预定添加的目录名。
运行输出为Acalc,表示预定添加calc目录到版本库。
方法2:
Ø切换命令行路径至E:
\workcopy\TestProject>,使用svnmkdir命令。
svnmkdir命令后面跟要预定添加的目录名。
运行结果为Acalc。
此命令在工作拷贝中添加了calc目录,并预定添加到版本库中。
3.6删除文件和目录(svndelete)
举例,删除测试库TestProject中calc目录下的12.txt文本文件。
使用如下svndelete命令。
svndelete命令后面跟要预定删除的文件路径。
运行输出为D12.txt,此命令在工作拷贝中删除了calc\12.txt并预定从版本库中删除。
3.7更新工作拷贝(svnupdate)
更新工作拷贝,是比较本地.SVN里保存的原始工作拷贝和目前的版本库,将版本库中的改动吸收到本地工作拷贝中来。
应当及时更新你的工作拷贝,合并他人的修改。
使用如下svnupdate命令来更新工作拷贝,通过运行输出显示的文件状态(大写字母)来告诉你进行了何种更新。
简单举例如下,
U calc\911.txt 文件911.txt被更新
G casver.c文件casver.c接收了版本库的更改,你的工作拷贝也做了修改,但不冲突,SVN自动合并版本库和本地文件。
C ca_bdc.c对文件ca_bdc.c的本地修改和版本库冲突,需要手工解决。
如果版本库和原始工作拷贝是一致的,则运行结果只是提示版本库的最新修订版本号。
✧更多svnupdate命令可能输出的文件状态请参看“附表1-1”。
其中A、D、U表明本地文件接受了版本库的修改已经更新;G表明本地的修改和版本库的修改不冲突,已经合并。
但C表示冲突发生了,需要你进行手工解决。
3.8检查你的修改(svnstatus)
经常会用到svnstatus命令来检测你对文件和目录的修改。
和svnupdate命令不同,它比较的是你目前最新的工作拷贝和.SVN里面保存的原始工作拷贝。
不会去联系版本库,所以不能知道版本库的状态,只能看到本地的修改。
svnstatus也可通过运行输出显示的文件状态来告诉你对原始工作拷贝进行了怎样的修改。
简单举例,
?
boo.txt 表示boo.txt在工作拷贝中但并没有纳入版本控制
D 1/12.txt 表示12.txt预定要从版本库删除
A calc/11.txt 表示11.txt预定要添加到版本库
M ca_bdc.c 表示ca_bdc.c文件已经在本地修改过了
如果你并没有对工作拷贝做任何修改,那么svnstatus命令输出为空。
✧svnstatus和svnupdate命令中表示文件状态的大写字母含义不同,具体请参看“附表1-1”。
✧svnstatus还可添加-v参数显示所有文件(即使没有改变过)。
如下,第一列显示文件状态,第二列显示工作拷贝里的修订版本号,第三列和第四列显示最后一次修改的版本号和修改人,第五列是文件列表。
可以看到test文件最后修改的修订版本号是80,修订人是zhyu;而boo文件预定要从版本库中删除。
更多参数请使用svnhelpstatus命令查看。
3.9提交你的修改(svncommit)
在进行了一系列文件修改、增加或删除后,你准备好把在工作拷贝里做的这些修改提交到版本库中,这时要使用svncommit命令。
注意,命令中必须同时提供一些描述修改的日志信息,否则会提交失败。
Ø可以使用--message参数提供日志信息。
直接在--message后面写日志信息并用引号括起来(不用引号引起来则只会记录所写日志信息的第一个字符,后面的字符被遗失)。
Ø较长的日志信息还可以放在文件里面,通过--file参数指向文件。
--file后面跟日志文件的相对路径或绝对路径。
文件里面的内容就是此次修订版本的日志信息。
运行输出显示你做的操作,并提示提交后的修订版本号。
Ø除了--message和--file参数,还可以使用--editor-cmd参数指定编辑器,直接打开编辑器写日志信息。
比如指定编辑器为记事本编辑器(notepad)。
输入命令按回车后会自动弹出记事本编辑器,在里面输入日志信息并保存后就能看到运行输出提示修订版本号,即提交成功。
✧如果commit提交失败,出现如下错误提示。
首先需要确认你有没有相应的权限,然后可以在原命令后添加参数“--usernameXXX--passwordXXX”输入你的用户名密码试试看。
✧如果已经有其他人在你提交修改前修改过同一文件,你的提交会失败,并提示你一个或多个文件已经过时。
如下所示。
你需要运行svnupdate更新版本库,处理所有合并和冲突,然后再提交。
如果对一个文件的修改产生冲突则会提交失败,Subverion不允许提交处于冲突状态的文件,此时可以联系管理员解决。
即使SVN将本地的修改和版本库的修改成功合并,也必须进行人工检查。
因为代码是具有逻辑性的。
需要人工去防止自动合并产生逻辑上的错误。
✧详细使用说明请用svnhelpcommit命令查看。
3.10检查你的修改(svndiff)
svndiff命令用来精确地比较区别,它的输出用统一区别格式将文件区别精确显示。
它有三种用法。
Ø比较版本库和版本库。
举例:
TestSVN版本库31号修订版本和32号修订版本进行比较。
通过-r参数传递了两个版本号,通过冒号分开,这两个版本库会进行比较,输出显示所有的差异至当前屏幕。
Ø比较工作拷贝和版本库。
如果通过-r参数来只传递了一个版本号36,你的工作拷贝会和此指定版本进行比较,输出显示所有的差异至当前屏幕。
Ø比较本地修改。
如果运行不带参数的svndiff命令,比较的是你的工作文件和缓存在.SVN里面的原始工作拷贝。
举例如下图。
缓存在.SVN里面的原始工作拷贝是86号版本库。
这样就可以精确比较出你在原始工作拷贝上都修改了什么。
如果你没有对工作拷贝做任何修改,那么svndiff命令输出为空。
svndiff命令输出的格式是统一区别格式,删除的行前面有个“-”,添加的行前面有个“+”。
✧svndiff命令还可以指定某一文件,查看它在不同版本的区别。
如下,直接在svndiff后面输入此文件的路径或URL地址即可。
✧如果对比的差异太多,不妨将运行结果重定向输出到本地文件中,查看和保存起来都很方便。
只需在本来的命令后面加上重定向符“>”以及本地文件的绝对路径即可。
这里将两个版本的差异输出到e:
/diff/r95.txt文件中,直接在本机查看此文件即可。
✧该命令详细使用说明请用svnhelpdiff查看。
3.11撤销修改(svnrevert)
svnrevert命令能恢复任何预定要做的操作。
已经提交的修改则不能被撤销。
举例:
通过svndiff对比发现了错误,想撤销对文件1\12.txt的修改。
Ø先看下文件状态。
由svnstatus命令的运行输出可以看出12.txt文件的确已经被修改,并且还未提交版本库,可以撤销操作。
Ø使用svnrevert来撤销操作。
svnrevert后面跟想要恢复的文件路径。
运行输出提示已经恢复文件,这样工作拷贝中文件1\12.txt就回到修改前的状态。
✧如果你想取消本次所做的所有修改,直接使用带参数的svncheckout命令重新下载版本库更为快捷。
3.12查看历史信息(svnlog)
使用svnlog命令可以查看版本库的历史修订信息,包括:
修订版本号、修订人、修订时间、提交的日志信息和路径的变动信息。
举例:
查看测试库的78号至80号版本的历史信息。
svnlog命令通过-r参数传递两个版本号(冒号分隔)作为查看历史信息的版本号区间,输出信息是此区间内所有版本号的历史信息。
通过-r只传递一个版本号,那么只输出此版本的历史信息。
不带-r参数的svnlog命令会将所有版本号的历史信息逆序输出显示。
✧还可以给svnlog命令添加-v参数以获取附加信息(改变的路径)。
这样输出信息会包括路径变动的信息(A/calc),即78号版本修订时的路径变动是增加了calc目录。
详细使用说明请用svnhelplog命令查看。
✧为了便于查看和保存,可以将运行结果重定向输出到本地文件中。
只需在原命令后面加上重定向符“>”以及本地文件的绝对路径即可。
举例如下。
3.13查看历史版本中的文件内容(svncat)
举例:
查看TestProject库78号版本中casver.c文件的内容。
使用如下svncat命令。
svncat命令后面跟要查看的文件路径并通过-r参数指定了修订版本号。
这样,78号版本中casver.c文件的内容将输出显示到当前屏幕。
✧如果想将文件内容输出到本地文件中,同样要用到重定向符“>”,举例如下。
附表1-1。
含义
svnupdate命令
svnstatus命令
?
未纳入版本控制
在工作拷贝中但没纳入版本控制
A
添加
文件添加到工作拷贝
文件预定添加
D
删除
文件从工作拷贝中删除
文件预定删除
M
修改
文件在本地修改过
U
更新
本地没有修改,接受版本库中的更改,文件被更新
G
合并
本地和版本库的修改不冲突,已经自动合并
C
冲突
发生修改冲突,需手工解决
发生修改冲突,需手工解决