SVN使用手册(简易版).doc
18页SVN 使用手册——命令行模式1 SVN 概述 SVN 的全称 Subversion,和 VSS 一样用来有效地管理代码和版本同样我们可以进行修改、对比版本、获得版本的历史信息等操作1.1 SVN 使用环境及安装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.exeTortoiseSVN —— TortoiseSVN-1.4.6.11647-win32-svn-1.4.6.rar文件的具体地址,请参考下文“2.1”章节的介绍1.2 SVN 工作原理说明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 操作3 SVN 的基本使用操作3.0 进入工作环境 进入命令行开始—运行—输入 cmd运行 svn --version 命令来检查你的电脑是否安装了 Subversion如果输出显示 SVN 版本信息即表明电脑已安装 Subversion,否则需下载安装 SVN 包 确认权限方法一:在浏览器地址栏输入 http://192.168.4.46/svn,从版本库列表中选中你要访问的库,输入用户名密码,如果能打开,确认你有这个库读的权限方法二:在命令行中运行 svn list 命令查看版本库根目录下的目录和文件列表如下图,查看是否具有 TestProject 库的权限在命令行任意路径下,svn list 后面跟要查看的版本库 URL 地址如果查看失败表明你没有版本库的读权限 提示 :在命令行中无论是输入 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的工作拷贝 svn checkout 还可添加 --reverion(-r)参数获得历史版本如下命令将测试库修订号为 10 的历史版本,输出到名为 test10 的工作拷贝。
详细使用说明请用 svn help checkout 命令查看 如果输入的版本库或其子目录的 URL 地址错误就无法成功 checkout比如:输入的 URL 地址丢掉了 http://,错误提示如下,所以一定要确认 svn checkout 命令后的 URL 地址是正确的 如果 checkout 失败,出现如下错误提示,首先需要确认你有没有相应的权限,然后可以在原命令后添加参数 “--username XXX --password XXX”输入你的用户名密码试试看3.4 修改、编辑文件 文件内容的修改——直接在工作拷贝中修改,不涉及到命令行操作所做的修改如果不提交就只是在本地的修改,不会上传版本库 如果想更改版本库目录树结构——比如添加删除等操作,就要使用 svn 命令(svn add/delete/copy) ,在下文 3.5 章节中有详细介绍 如果不使用 svn 命令,直接在工作拷贝中添加文件,那么 SVN 不会将其纳入版本控制(工作拷贝的 .SVN 文件中不会管理此文件) ,即没有添加到工作拷贝的版本管理中,更无法在 commit 时将这个变动提交到版本库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 的本地修改和版本库冲突,需要手工解决如果版本库和原始工作拷贝是一致的,则运行结果只是提示版本库的最新修订版本号 更多 svn update 命令可能输出的文件状态请参看 “附表 1-1”其中 A、 D、 U 表明本地文件接受了版本库的修改已经更新; G 表明本地的修改和版本库的修改不冲突,已经合并但 C 表示冲突发生了,需要你进行手工解决3.8 检查你的修改(svn status)经常会用到 svn status 命令来检测你对文件和目录的修改和 svn update 命令不同,它比较的是你目前最新的工作拷贝和.SVN 里面保存的原始工作拷贝不会去联系版本库,所以不能知道版本库的状态,只能看到本地的修改。
svn status 也可通过运行输出显示的文件状态来告诉你对原始工作拷贝进行了怎样的修改简单举例,? boo.txt 表示 boo.txt 在工作拷贝中但并没有纳入版本控制D 1/12.txt 表示 12.txt 预定要从版本库删除A calc/11.txt 表示 11.txt 预定要添加到版本库M ca_bdc.c 表示 ca_bdc.c 文件已经在本地修改过了如果你并没有对工作拷贝做任何修改,那么 svn status 命令输出为空 svn status 和 svn update 命令中表示文件状态的大写字母含义不同,具体请参看 “附表 1-1” svn status 还可添加 -v 参数显示所有文件(即使没有改变过) 如下,第一列显示文件状态,第二列显示工作拷贝里的修订版本号,第三列和第四列显示最后一次修改的版本号和修改人,第五列是文件列表可以看到 test 文件最后修改的修订版本号是 80,修订人是 zhyu;而 boo 文件预定要从版本库中删除更多参数请使用 svn help status 命令查看3.9 提交你的修改(svn commit)在进行了一系列文件修改、增加或删除后,你准备好把在工作拷贝里做的这些修改提交到版本库中,这时要使用 svn commit 命令。
注意,命令中必须同时提供一些描述修改的日志信息,否则会提交失败 可以使。





