subversion手册

2019-03-16 22:14

Subversion简明手册

1. subversion基本概念

subversion是由包括原cvs开发者在内的一个开发组开发维护的,目的很明确,就是为了修复cvs的某些缺陷,添加一些有用的新特性。

从本地客户端连接到svn服务器有三种方式,本地访问方式、基于TCP/IP网络的HTTP方式、使用svn自带协议的svnserve方式。

2. svn工具组件

安装好svn后,有如下一些组件可用: svn 命令行客户端程序 svnversion 用来显示工作拷贝的状态(当前项目的修订版本) svnlook 直接查看subversion版本库的工具 svnadmin 建立、调整和修复subversion版本库的工具 svndumpfilter 过滤subversion版本库转储数据流的工具 mod_dav_svn Apache HTTP服务器的一个插件,使版本库可以通过网络访问 svnserve 一个单独运行的服务器程序,可以作为守护进程或由SSH调用。 svnsync 一个通过网络增量镜像版本库方式

3. 常用用法

使用svn的帮助: svn help 单个svn命令的帮助: svn help checkout

cs7902项目使用svnserve访问svn服务器,列出项目下所有文档的命令如下: # svn list svn://192.168.2.57/cs7902 doc/

mydroid/

svn-commit.tmp #

字符串svn://192.168.2.57/cs7902就是我们的版本库根路径。

使用subversion的典型工作周期如下:

? 更新你的工作拷贝

? svn update

? 做出修改

? svn add ? svn delete ? svn copy ? svn move

? 检验修改

? svn status ? svn diff

? 可能会取消一些修改

? svn revert

? 解决冲突(合并别人的修改)

? svn update ? svn resolved

? 提交你的修改

? svn commit

更新你的工作拷贝

更新你的工作拷与最新的版本同步。

$ svn update U foo.c U bar.c

Updated to revision 2.

服务器通过svn update将修改传递到你的工作拷贝时,每一个项目之前会有一个字母,来让你知道Subversion为保持最新对你的工作拷贝作了哪些工作。关于这些字母的详细含义如下: A 添加D 删除U 更新C 冲突G 合并

修改你的工作拷贝

可以使用的Subversion命令包括svn add、 svn delete、svn copy和svn move。如果只是修改版本库中已经存在的文件,在你提交之前,不必使用上面的任何一个命令。

可以对工作拷贝做出两种修改:文件修改和目录树修改。你不需要告诉Subversion你希望修改一个文件,只需要用你的编辑器、字处理器、图形程序或任 何工具做出修改,Subversion自动监测到文件的更改,此外,二进制文件的处理方式和文本文件一样—也有同样的效率。对于目录树更改,你可以告诉 Subversion将文件和目录预定的删除、添加、拷贝或移动标记,这些动作会在工作拷贝上立刻发生效果,但只有提交后才会在版本库里生效。

下面是Subversion用来修改目录树结构的五个子命令。 版本控制符号连接

在非Windows平台,Subversion可以将特殊类型符号链接(或是“symlink”)版本化,一个符号链接是对文件系统中其他对象的透明引用,可以通过对符合链接操作实现对引用对象的读写操作。 当符号链提交到Subversion版本库,Subversion会记住这个文件实际上是一个符号链,也会知道这个符号链指向的“对象”。 当这个符号链检出到另一个支持符号链的操作系统上时,Subversion会重新构建文件系统级的符号链接。当然这样不会影响在Windows这类不支持符号链的系统上,在此类系统上,Subversion只会创建一个包含指向对象路径的文本文件,因为这个文件不能在Windows系统上作为符号链使用,所以它也会防止Windows用户作其他Subversion相关的操作。 svn add foo

预定将文件、目录或者符号链foo添加到版本库,当你下次提交后,foo会成为其父目录的一个子对象。注意,如果foo是目录,所有foo中的内容也会预定添加进去,如果你只想添加foo本身,请使用--non-recursive (-N)参数。 svn delete foo

预定将文件、目录或者符号链foo从版本库中删除,如果foo是文件,它马上从工作拷贝中删除,如果是目录,不会被删除,但是Subversion准备好删除了,当你提交你的修改,foo就会在你的工作拷贝和版本库中被删除。[4]

svn copy foo bar

建立一个新的项目bar作为foo的复制品,会自动预定将bar添加,当在下次提交时会将bar添加到版本库,这种拷贝历史会记录下来(按照来自foo的方式记录),svn copy并不建立中介目录。 svn move foo bar

这个命令与与运行svn copy foo bar;svn delete foo完全相同,bar作为foo的拷贝准备添加,foo已经预定被删除,svn move不建立中介的目录。 svn mkdir blort

这个命令同运行 mkdir blort; svn add blort相同,也就是创建一个叫做blort的文件,并且预定添加到版本库。 不通过工作拷贝修改版本库

有一些情况下会立刻提交目录树的修改到版本库,这只发生在子命令直接操作URL,而不是工作拷贝路径时。以特定的方式使用svn mkdir、svn copy、svn move和svn delete可以针对URL操作(并且不要忘记svn import只针对URL操作)。

指定URL的操作方式有一些区别,因为在使用工作拷贝的运作方式时,工作拷贝成为一个“集结地”,可以在提交之前整理组织所要做的修改,直接对URL操作就没有这种奢侈,所以当你直接操作URL的时候,所有以上的动作代表一个立即的提交。 检查你的修改

当你完成修改,你需要提交他们到版本库,但是在此之前,检查一下做过什么修改是个好主意,通过提交前的检查,你可以整理一份精确的日志信息,你也可以发现你不小心修改的文件,给了你一次恢复修改的机会。此外,这是一个审查和仔细察看修改的好机会,你可通过命令svn status浏览所做的修改,通过svn diff检查修改的详细信息。

这三个命令(svn status、svn diff和svn revert)都可以在没有网络的情况下工作(假定你的版本库是通过网络而不是本地访问的),这让你在没有网络连接时的管理修改过程更加容易,像在飞机上旅行,乘坐火车往返或是在海滩上奋力工作时。[5]

Subversion通过在.svn管理区域使用原始的版本缓存来做到这一点,这使得报告和恢复本地修改而不必访问网络,这个缓存(叫做“text-base”)也允许Subversion可以根据原始版本生成一个压缩的增量(“区别”) 提交—即使你有个非常快的网络,有这样一个缓存有极大的好处,只向服务器提交修改的部分而不是整个文件。

Subversion已经被优化来帮助你完成这个任务,可以在不与版本库通讯的情况下做许多事情,详细来说,对于每一个文件,你的的工作拷贝在.svn包含了一个“原始的”拷贝,所以Subversion可以快速的告诉你那些文件修改了,甚至允许你在不与版本库通讯的情况下恢复修改。 查看你的修改概况

为了浏览修改的内容,你会使用这个svn status命令,在所有Subversion命令里,svn status可能会是你用的最多的命令。 CVS 用户:控制另类的更新!

你也许使用cvs update来看你做了哪些修改,svn status会给你所有你做的改变—而不需要访问版本库,并且不会在不知情的情况下与其他用户作的更改比较。

在Subversion,update只是做这件事—将工作拷贝更新到版本库的最新版本,你可以消除使用

update察看本地修改的习惯。

如果你在工作拷贝的顶级目录运行不带参数的svn status命令,它会检测你做的所有的文件或目录的修改,以下的例子是来展示svn status可能返回的状态码(注意,#之后的不是svn status打印的)。

A stuff/loot/bloo.h # file is scheduled for addition

C stuff/loot/lump.c # file has textual conflicts from an update D stuff/fish.c # file is scheduled for deletion

M bar.c # the content in bar.c has local modifications

在这种格式下,svn status打印6列字符,紧跟一些空格,接着是文件或者目录名。第一列告诉一个文件或目录的状态或它的内容,返回代码如下:

A item

预定加入到版本库的文件、目录或符号链的item。 C item

文件item发生冲突,在从服务器更新时与本地版本发生交迭,在你提交到版本库前,必须手工的解决冲突。 D item

文件、目录或是符号链item预定从版本库中删除。 M item

文件item的内容被修改了。

如果你传递一个路径给svn status,它只给你这个项目的信息:

$ svn status stuff/fish.c D stuff/fish.c

svn status也有一个--verbose (-v)选项,它可以显示工作拷贝中的所有项目,即使没有改变过的:

$ svn status -v

M 44 23 sally README 44 30 sally INSTALL M 44 20 harry bar.c 44 18 ira stuff

44 35 harry stuff/trout.c D 44 19 ira stuff/fish.c 44 21 sally stuff/things

A 0 ? ? stuff/things/bloo.h 44 36 harry stuff/things/gloo.c

这是svn status的“加长形式”,第一列保持相同,第二列显示一个工作版本号,第三和第四列显示最后一次修改的版本号和修改人(这些列不会与我们刚才提到的字符混淆)。

上面所有的svn status调用并没有联系版本库,只是与.svn中的原始数据进行比较的结果,最后,是--show-updates (-u)选项,它将会联系版本库为已经过时的数据添加新信息:

$ svn status -u -v

M * 44 23 sally README M 44 20 harry bar.c

* 44 35 harry stuff/trout.c D 44 19 ira stuff/fish.c

A 0 ? ? stuff/things/bloo.h Status against revision: 46

注意这两个星号:如果你现在执行svn update,你的README和trout.c会被更新,这告诉你许多有用的信息—你可以在提交之前,需要使用更新操作得到文件README的更新,或者说文件已经过时,版本库会拒绝了你的提交。(后面还有更多关于此主题)。

关于文件和目录,svn status可以比我们的展示显示更多的内容,完整的描述可以看svn status。 检查你的本地修改的详情

另一种检查修改的方式是svn diff命令,你可以通过不带参数的svn diff精确的找出你所做的修改,这会输出统一区别格式的区别信息:

$ svn diff Index: bar.c

=================================================================== --- bar.c (revision 3) +++ bar.c (working copy) @@ -1,7 +1,12 @@

+#include +#include +#include +

+#include

int main(void) {

- printf(\+ printf(\ return 0; }

Index: README

=================================================================== --- README (revision 3) +++ README (working copy) @@ -193,3 +193,4 @@

+Note to self: pick up laundry.

Index: stuff/fish.c

=================================================================== --- stuff/fish.c (revision 1) +++ stuff/fish.c (working copy) -Welcome to the file known as 'fish'. -Information on fish will be here soon.

Index: stuff/things/bloo.h

=================================================================== --- stuff/things/bloo.h (revision 8) +++ stuff/things/bloo.h (working copy)


subversion手册.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:XX办公室文员工作总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: