SVN 常用命令汇总(2024)

目录

前言

A、如何检索本文档

B、svn常用命令查询:help —— 帮助

第一部分:常用命令

1、从仓库拉取时 —— 检出及更新

1.1、checkout —— 检出

 1.2、update —— 更新

2、查看仓库及工作副本信息

2.1、svn status —— 查看状态

2.1.1、常规命令

2.1.2、查看所有文件状态(含已忽略)

3.2、log —— 日志信息

3、变更(增删改),及提交

 3.1、add/delete —— 添加/删除

3.2、忽略文件/文件夹

3.2.1、svn 命令行 加入忽略列表

3.2.2、查看被忽略的文件/文件夹

3.3、commit——提交

4、其它操作

4.1、revert —— 版本回退

4.2、切换svn服务器

4.3、切换用户

第二部分:全部命令

1、svn命令

svn add

svn blame

svn cat

svn checkout

svn cleanup

svn commit

svn copy

svn delete

svn diff

svn export

svn help

svn import

svn info

svn list

svn log

svn merge

svn mkdir

svn move

svn propdel

svn propedit

svn propget

svn proplist

svn propset

svn resolved

svn revert

svn status

svn switch

svn update

2、svnadmin命令

svnadmin

svnadmin create

svnadmin deltify

svnadmin dump

svnadmin help

svnadmin hotcopy

svnadmin list-dblogs

svnadmin list-unused-dblogs

svnadmin load

svnadmin lstxns

svnadmin recover

svnadmin rmtxns

svnadmin setlog

svnadmin verify

3、svnlook

svnlook

svnlook author

svnlook cat

svnlook changed

svnlook date

svnlook diff

svnlook dirs-changed

svnlook help

svnlook history

svnlook info

svnlook log

svnlook propget

svnlook proplist

svnlook tree

svnlook uuid

svnlook youngest

4、svnserve

svnserve

svnversion

5、其它

mod_dav_svn Configuration Directives


前言

A、如何检索本文档

a、使用CSDN自带的“目录”功能进行检索,会更容易查找到自己需要的命令。

b、文档分为两部分:

        b1、常用命令。基本用法,供常规操作时使用;

        b2、全部命令。按名称排序,在常用命令不满足时检索;

B、svn常用命令查询:help —— 帮助

在使用过程中,可随时使用help命令查看各常用svn命令:

svn help


第一部分:常用命令

1、从仓库拉取时 —— 检出及更新

1.1、checkout —— 检出

svn checkout https://计算机名:8443/svn/仓库名/

说明:

1、可缩写为:

svn co https://计算机名:8443/svn/仓库名/

2、8443:如果是443可以不加,其它的都要添加

 1.2、update —— 更新

当检出后,需要拉取仓库代码时,执行update操作

拉取仓库中的更新文件到本地
svn update

2、查看仓库及工作副本信息

2.1、svn status —— 查看状态

2.1.1、常规命令
"svn status" 简写 "svn st"

常见状态如下:
A 预定加入到版本库
C 发生冲突
D 被删除了
I 已忽略的文件/文件夹
M 内容被修改
K 被锁定
? 条目未纳入版本控制
! 该项目已遗失(被非svn命令删除)或不完整
~ 版本控制下的项目与其它类型的项目重名
2.1.2、查看所有文件状态(含已忽略)
"svn status --no-ignore" 简写 "svn st --no-ignore"

3.2、log —— 日志信息

"svn log" 用来展示svn 的版本作者、日期、路径等等。
svn log -r 6:8(查看某两个版本之间的信息)
svn log user/HelloWorld(只想查看某一个文件的版本修改信息)

"svn info file" 查看文件详细信息 

"svn diff" 用来显示特定修改的行级详细信息。(不带任何参数,将会比较本地工作文件与缓存在.svn 的"原始"拷贝)
svn diff -r 3 rule.txt(比较本地工作拷贝和版本库中版本号为3的文件)
svn diff -r 2:3 rule.txt(比较svn工作版本中版本2和3的这个文件的变化)

"svn cat" 取得在特定版本的某文件显示在当前屏幕。
svn cat -r 版本号 rule.txt

"svn list" 显示一个目录或某一版本存在的文件。
svn list http://192.168.0.1/runoob01(可以在不下载文件到本地目录的情况下来察看目录中的文件)

3、变更(增删改),及提交

 3.1、add/delete —— 添加/删除

在库本版中需要增加一个file文件
svn status
svn add file(添加)
svn delete file(删除)。简写:svn (del, remove, rm)

注:
1、file可以是文件,也可以是文件夹。
2、当file中有空格等特殊字符时,需要用双引号括起来。建议不管有没有特殊字符,都要加双引号,养成好习惯。
3、添加/删除只是被添加进待变更列表中,直到执行了commit操作后才会真正添加/删除。

3.2、忽略文件/文件夹

3.2.1、svn 命令行 加入忽略列表

要在SVN的命令行中添加到忽略列表,可以使用svn propset命令。

下面是示例代码:

# 将文件或目录添加到忽略列表
svn propset svn:ignore <file_or_directory> .
# 查看当前工作副本的属性设置
svn proplist -v .
3.2.2、查看被忽略的文件/文件夹

首先,查询所有和服务端版本不一致的文件/文件夹状态

"svn status --no-ignore" 简写 "svn st --no-ignore"

然后,查看结果中前面是“I”的行,即是已忽略的内容。

3.3、commit——提交

在库本版中需要增加一个file文件
svn status
svn add file(添加)
svn delete file(删除)
svn commit -m "add file"(双引号内为注释信息)(svn ci)
注:
1、file可以是文件,也可以是文件夹。
2、当file中有空格等特殊字符时,需要用双引号括起来。建议不管有没有特殊字符,都要加双引号,养成好习惯。
3、添加/删除只是被添加进待变更列表中,直到执行了commit操作后才会真正添加/删除。

4、其它操作

4.1、revert —— 版本回退

撤销对单个文件的修改(未被提交commit)
svn st
svn revert file

撤销对整个目录的修改(即恢复原状),用"-R"命令(未被提交commit)
svn revert -R(递归) file

恢复一个已经提交的版本(已提交)
svn diff -r 22:21 file
svn merge -r 22:21 file (svn merge -r new:old file)
svn commit -m ""

4.2、切换svn服务器

4.3、切换用户

不常用,没找切换命令,用的是界面方式,步骤如下:
1、在安装TortoiseSVN的电脑目录中,右键

2、选择TortoiseSVN

3、选择“设置”

4、选择“已保存数据”

5、在“认证数据”后面,点击“清除”,或“清除全部”



第二部分:全部命令


1、svn命令


svn add

名称

svn add ― 添加文件、目录或符号链。

概要

svn add PATH...

描述

添加文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。

别名

变化

工作拷贝

是否访问版本库

选项

--targets FILENAME
--non-recursive (-N)
--quiet (-q)
--config-dir DIR
--auto-props
--no-auto-props
--force

例子

添加一个文件到工作拷贝:


$ svn add foo.c 
A         foo.c

当添加一个目录,svn add缺省的行为方式是递归的:


$ svn add testdir
A         testdir
A         testdir/a
A         testdir/b
A         testdir/c
A         testdir/d

你可以只添加一个目录而不包括其内容:


$ svn add --non-recursive otherdir
A         otherdir

通常情况下,命令*svn add 会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add--force递归到版本化的目录下:

$ svn add * --force
A         foo.c
A         somedir/bar.c
A         otherdir/docs/baz.doc
[...]

svn blame

名称

svn blame ― 显示特定文件和URL内嵌的作者和修订版本信息。

概要

svn blame TARGET...

描述

显示特定文件和URL内嵌的作者和修订版本信息。每一行文本在开头都放了最后修改的作者(用户名)和修订版本号。

别名

praise、annotate、ann

变化

是否访问版本库

选项

--revision (-r) REV
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
--verbose

例子

如果你希望在测试版本库看到blame标记的readme.txt源代码:


$ svn blame http://svn.red-bean.com/repos/test/readme.txt
     3      sally This is a README file.
     5      harry You should read this.


svn cat

名称

svn cat ― 输出特定文件或URL的内容。

概要

svn cat TARGET[@REV]...

描述

输出特定文件或URL的内容。列出目录的内容可以使用svn list

别名

变化

是否访问版本库

选项


--revision (-r) REV
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

如果你希望不检出而察看版本库的readme.txt的内容:


$ svn cat http://svn.red-bean.com/repos/test/readme.txt
This is a README file.
You should read this.

提示

如果你的工作拷贝已经过期(或者你有本地修改),并且希望察看工作拷贝的HEAD修订版本的一个文件,如果你给定一个路径,svn cat会自动取得HEAD的修订版本:


$ cat foo.c
This file is in my local working copy 
and has changes that I've made.

$ svn cat foo.c
Latest revision fresh from the repository!


svn checkout

名称

svn checkout ― 从版本库取出一个工作拷贝。

概要

svn checkout URL[@REV]... [PATH]

描述

从版本库取出一个工作拷贝,如果省略*PATH*,URL的基名称会作为目标,如果给定多个URL,每一个都会检出到PATH的子目录,使用URL基名称的子目录名称。

别名

co

变化

创建一个工作拷贝。

是否访问版本库

选项


--revision (-r) REV
--quiet (-q)
--non-recursive (-N)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

取出一个工作拷贝到mine


$ svn checkout file:///tmp/repos/test mine
A  mine/a
A  mine/b
Checked out revision 2.
$ ls
mine

检出两个目录到两个单独的工作拷贝:


$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz
A  test/a
A  test/b
Checked out revision 2.
A  quiz/l
A  quiz/m
Checked out revision 2.
$ ls
quiz  test

检出两个目录到两个单独的工作拷贝,但是将两个目录都放到working-copies


$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz working-copies
A  working-copies/test/a
A  working-copies/test/b
Checked out revision 2.
A  working-copies/quiz/l
A  working-copies/quiz/m
Checked out revision 2.
$ ls
working-copies

如果你打断一个检出(或其它打断检出的事情,如连接失败。),你可以使用同样的命令重新开始或者是更新不完整的工作拷贝:


$ svn checkout file:///tmp/repos/test test
A  test/a
A  test/b
^C
svn: The operation was interrupted
svn: caught SIGINT

$ svn checkout file:///tmp/repos/test test
A  test/c
A  test/d
^C
svn: The operation was interrupted
svn: caught SIGINT

$ cd test
$ svn update
A  test/e
A  test/f
Updated to revision 3.


svn cleanup

名称

svn cleanup ― 递归清理工作拷贝。

概要

svn cleanup [PATH...]

描述

递归清理工作拷贝,删除未完成的操作锁定。如果你得到一个“工作拷贝已锁定”的错误,运行这个命令可以删除无效的锁定,让你的工作拷贝再次回到可用的状态。见[附录B, 故障解决]。

如果,因为一些原因,运行外置的区别程序(例如,用户输入或是网络错误)有时候会导致一个svn update失败,使用--diff3-cmd选项可以完全清除你的外置区别程序所作的合并,你也可以使用--config-dir指定任何配置目录,但是你应该不会经常使用这些选项。

别名

变化

工作拷贝

是否访问版本库

选项


--diff3-cmd CMD
--config-dir DIR

例子

svn cleanup没有输出,没有太多的例子,如果你没有传递路径,会使用“.”。


$ svn cleanup

$ svn cleanup /path/to/working-copy


svn commit

名称

svn commit ― 将修改从工作拷贝发送到版本库。

概要

svn commit [PATH...]

描述

将修改从工作拷贝发送到版本库。如果你没有使用--file--message提供一个提交日志信息,svn会启动你的编辑器来编写一个提交信息,见[“config”一节]的editor-cmd小节。

提示

如果你开始一个提交并且Subversion启动了你的编辑器来编辑提交信息,你仍可以退出而不会提交你的修改,如果你希望取消你的提交,只需要退出编辑器而不保存你的提交信息,Subversion会提示你是选择取消提交、空信息继续还是重新编辑信息。

别名

ci(“check in”的缩写;不是“checkout”的缩写“co”。)

变化

工作拷贝,版本库

是否访问版本库

选项

--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--targets FILENAME
--force-log
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--config-dir DIR

例子

使用命令行提交一个包含日志信息的文件修改,当前目录(“.”)是没有说明的目标路径:


$ svn commit -m "added howto section."
Sending        a
Transmitting file data .
Committed revision 3.

提交一个修改到foo.c(在命令行明确指明),并且msg文件中保存了提交信息:


$ svn commit -F msg foo.c
Sending        foo.c
Transmitting file data .
Committed revision 5.

如果你希望使用在--file选项中使用在版本控制之下的文件作为参数,你需要使用--force-log选项:


$ svn commit --file file_under_vc.txt foo.c
svn: The log message file is under version control
svn: Log message file is a versioned file; use '--force-log' to override

$ svn commit --force-log --file file_under_vc.txt foo.c
Sending        foo.c
Transmitting file data .
Committed revision 6.

提交一个已经预定要删除的文件:


$ svn commit -m "removed file 'c'."
Deleting       c

Committed revision 7.


svn copy

名称

svn copy ― 拷贝工作拷贝的一个文件或目录到版本库。

概要

svn copy SRC DST

描述

拷贝工作拷贝的一个文件或目录到版本库。*SRCDST*既可以是工作拷贝(WC)路径也可以是URL:

WC -> WC
拷贝并且预定一个添加的项目(包含历史)。

WC -> URL
将WC或URL的拷贝立即提交。

URL -> WC
检出URL到WC,并且加入到添加计划。

URL -> URL
完全的服务器端拷贝,通常用在分支和标签。

注意

你只可以在单个版本库中拷贝文件,Subversion还不支持跨版本库的拷贝。

别名

cp

变化

如果目标是URL则包括版本库。

如果目标是WC路径,则是工作拷贝。

是否访问版本库

如果目标是版本库,或者需要查看修订版本号,则会访问版本库。

选项

--message (-m) TEXT
--file (-F) FILE
--revision (-r) REV
--quiet (-q)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--force-log
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR

例子

拷贝工作拷贝的一个项目(只是预定要拷贝―在提交之前不会影响版本库):


$ svn copy foo.txt bar.txt
A         bar.txt
$ svn status
A  +   bar.txt

拷贝你的工作拷贝的一个项目到版本库的URL(直接的提交,所以需要提供一个提交信息):


$ svn copy near.txt file:///tmp/repos/test/far-away.txt -m "Remote copy."

Committed revision 8.

拷贝版本库的一个项目到你的工作拷贝(只是预定要拷贝―在提交之前不会影响版本库):

提示

这是恢复死掉文件的推荐方式!


$ svn copy file:///tmp/repos/test/far-away near-here
A         near-here

最后,是在URL之间拷贝:


$ svn copy file:///tmp/repos/test/far-away file:///tmp/repos/test/over-there -m "remote copy."

Committed revision 9.

提示

这是在版本库里作“标签”最简单的方法―svn copy那个修订版本(通常是HEAD)到你的tags目录。


$ svn copy file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "tag tree"

Committed revision 12.

不要担心忘记作标签―你可以在以后任何时候给一个旧版本作标签:


$ svn copy -r 11 file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "Forgot to tag at rev 11"

Committed revision 13.


svn delete

名称

svn delete ― 从工作拷贝或版本库删除一个项目。

概要

svn delete PATH...
svn delete URL...

描述

*PATH*指定的项目会在下次提交删除,文件(和没有提交的目录)会立即从版本库删除,这个命令不会删除任何未版本化或已经修改的项目;使用--force选项可以覆盖这种行为方式。

URL指定的项目会在直接提交中从版本库删除,多个URL的提交是原子操作。

别名

del, remove, rm

变化

如果操作对象是文件则是工作拷贝变化,对象是URL则会影响版本库。

是否访问版本库

对URL操作时访问

选项

--force
--force-log
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--targets FILENAME
--username USER
--password PASS
--no-auth-cache
--non-interactive
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR

例子

使用svn从工作拷贝删除文件只是预定要删除,当你提交,文件才会从版本库删除。


$ svn delete myfile
D         myfile

$ svn commit -m "Deleted file 'myfile'."
Deleting       myfile
Transmitting file data .
Committed revision 14.

然而直接删除一个URL,你需要提供一个日志信息:


$ svn delete -m "Deleting file 'yourfile'" file:///tmp/repos/test/yourfile

Committed revision 15.

如下是强制删除本地已修改文件的例子:


$ svn delete over-there 
svn: Attempting restricted operation for modified resource
svn: Use --force to override this restriction
svn: 'over-there' has local modifications

$ svn delete --force over-there 
D         over-there


svn diff

名称

svn diff ― 比较两条路径的区别。

概要

diff [-r N[:M]] [TARGET[@REV]...]
diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...]
diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

描述

显示两条路径的区别,svn diff有三种使用方式:

**svn diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...]*会显示OLD-TGTNEW-TGT的区别。如果给定路径PATH,它会被看作OLD-TGTNEW-TGT的相对路径,输出也会限制在这些路径的区别上。OLD-TGTNEW-TGT可以是工作拷贝路径或者是URL[@REV]OLD-TGT缺省是当前工作目录,而NEW-TGT缺省是OLD-TGTN缺省是BASEM缺省时当前目录的版本,但如果NEW-TGT是一个URL,则默认是HEADsvn diff -r N设置OLD-TGT的修订版本为Nsvn diff -r N:M设置NEW-TGT的修订版本是M*。

svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2的缩写。

*TARGET*是一个URL,然后可以使用前面提到的--revision或“@”符号来指定N和M。

如果*TARGET*是工作拷贝路径,则--revision选项的含义是:

--revision N:M
服务器比较 TARGET@NTARGET@M

--revision N
客户端比较*TARGET@N*和工作拷贝。

(无--revision
客户端比较base和 TARGETTARGET

如果使用其他语法,服务器会比较*URL1URL2各自的NM。如果省掉NM*,会假定为HEAD

缺省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用--notice-ancestry,比较修订版本(也就是,当你运行svn diff比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。

别名

di

变化

是否访问版本库

获得工作拷贝非BASE修订版本的区别时会

选项


--revision (-r) REV
--old OLD-TARGET
--new NEW-TARGET
--extensions (-x) "ARGS"
--non-recursive (-N)
--diff-cmd CMD
--notice-ancestry
--username USER
--password PASS
--no-auth-cache
--non-interactive
--no-diff-deleted
--config-dir DIR

例子

比较BASE和你的工作拷贝(svn diff最经常的用法):


$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 4404)
+++ COMMITTERS	(working copy)

察看你的工作拷贝对旧的修订版本的修改:


$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3900)
+++ COMMITTERS	(working copy)

使用“@”语法与修订版本3000和35000比较:


$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 \
http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)
…

使用范围符号来比较修订版本3000和3500(在这种情况下只能传递一个URL):


$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

使用范围符号比较修订版本3000和3500trunk中的所有文件:


$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
          

使用范围符号比较修订版本3000和3500trunk中的三个文件:


$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING
          

如果你有工作拷贝,你不必输入这么长的URL:


$ svn diff -r 3000:3500 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

使用--diff-cmdCMD-x来指定外部区别程序


$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS 
Index: COMMITTERS
===================================================================
0a1,2
> This is a test
> 


svn export

名称

svn export ― 导出一个干净的目录树。

概要

svn export [-r REV] URL[@PEGREV] [PATH]
svn export PATH1[@PEGREV] PATH2

描述

第一种从版本库导出干净工作目录树的形式是指定URL,如果指定了修订版本*REV,会导出相应的版本,如果没有指定修订版本,则会导出HEAD,导出到PATH。如果省略PATHURL*的最后一部分会作为本地目录的名字。

从工作拷贝导出干净目录树的第二种形式是指定*PATH1PATH2*,所有的本地修改将会保留,但是不再版本控制下的文件不会拷贝。

别名

变化

本地磁盘

是否访问版本库

只有当从URL导出时会访问

选项

--revision (-r) REV
--quiet (-q)
--force
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
--native-eol EOL

例子

从你的工作拷贝导出(不会打印每一个文件和目录):


$ svn export a-wc my-export
Export complete.

从版本库导出目录(打印所有的文件和目录):


$ svn export file:///tmp/repos my-export
A  my-export/test
A  my-export/quiz
…
Exported revision 15.

当使用操作系统特定的分发版本,使用特定的EOL字符作为行结束符号导出一棵树会非常有用。--native-eol选项会这样做,但是如果影响的文件拥有svn:eol-style = native属性,举个例子,导出一棵使用CRLF作为行结束的树(可能是为了做一个Windows的.zip文件分发版本):


$ svn export file://tmp/repos my-export --native-eol CRLF
A  my-export/test
A  my-export/quiz
…
Exported revision 15.


svn help

名称

svn help ― 帮助!

概要

svn help [SUBCOMMAND...]

描述

当手边没有这本书时,这是你使用Subversion最好的朋友!

别名

, h

变化

是否访问版本库

不访问

选项

--version
--quiet (-q)


svn import

名称

svn import ― 递归提交一个路径的拷贝到URL。

概要

svn import [PATH] URL

描述

递归提交一个路径的拷贝到URL。如果省略*PATH*,默认是“.”。版本库中对应的父目录必须已经创建。

别名

变化

版本库

是否访问版本库

选项

--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--force-log
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR
--auto-props
--no-auto-props

例子

这会导入本地目录myproj到版本库的 根目录:


$ svn import -m "New import" myproj http://svn.red-bean.com/repos/test
Adding         myproj/sample.txt
…
Transmitting file data .........
Committed revision 16.

这将本地目录myproj导入到版本库的trunk/misctrunk/misc在导入之前不需要存在―svn import会递归的为你创建目录:


$ svn import -m "New import" myproj \
    http://svn.red-bean.com/repos/test/trunk/misc/myproj
Adding         myproj/sample.txt
…
Transmitting file data .........
Committed revision 19.

在导入数据之后,你会发现原先的目录树并没有纳入版本控制,为了开始工作,你还是要运行svn checkout得到一个干净的目录树工作拷贝。


svn info

名称

svn info ― 打印PATH的信息。

概要

svn info [PATH...]

描述

打印你的工作拷贝的路径信息,包括:

路经

名称

URL

修订版本

节点类型

最后修改的作者

最后修改的修订版本

最后修改的日期

最后更新的文本

最后更新的属性

核对

别名

变化

是否访问版本库

选项

--targets FILENAME
--recursive (-R)
--config-dir DIR

例子

svn info会展示所有项目的所有有用信息,它会显示文件的信息:


$ svn info foo.c
Path: foo.c
Name: foo.c
URL: http://svn.red-bean.com/repos/test/foo.c
Revision: 4417
Node Kind: file
Schedule: normal
Last Changed Author: sally
Last Changed Rev: 20
Last Changed Date: 2003-01-13 16:43:13 -0600 (Mon, 13 Jan 2003)
Text Last Updated: 2003-01-16 21:18:16 -0600 (Thu, 16 Jan 2003)
Properties Last Updated: 2003-01-13 21:50:19 -0600 (Mon, 13 Jan 2003)
Checksum: /3L38YwzhT93BWvgpdF6Zw==

它也会展示目录的信息:


$ svn info vendors
Path: trunk
URL: http://svn.red-bean.com/repos/test/vendors
Revision: 19
Node Kind: directory
Schedule: normal
Last Changed Author: harry
Last Changed Rev: 19
Last Changed Date: 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003)


svn list

名称

svn list ― 列出版本库目录的条目。

概要

svn list [TARGET[@REV]...]

描述

列出每一个*TARGET文件和TARGET目录的内容,如果TARGET*是工作拷贝路径,会使用对应的版本库URL。

缺省的*TARGET*是“.”,意味着当前工作拷贝的版本库URL。

伴随--verbose,如下的字段展示了项目的状态:

最后一次提交的修订版本号

最后一次提交的作者

大小(单位字节)

最后提交的日期时间

使用选项--xml,输出是XML格式(如果没有指定--incremental,会包括一个头和一个围绕的元素)。会展示所有的信息;不接受--verbose选项。

别名

ls

变化

是否访问版本库

选项


--revision (-r) REV
--verbose (-v)
--recursive (-R)
--incremental
--xml
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

如果你希望在没有下载工作拷贝时察看版本库有哪些文件,svn list会非常有用:


$ svn list http://svn.red-bean.com/repos/test/support
README.txt
INSTALL
examples/
…

你也可以传递--verbose选项来得到额外信息,非常类似UNIX的ls -l命令:


$ svn list --verbose file:///tmp/repos
     16 sally         28361 Jan 16 23:18 README.txt
     27 sally             0 Jan 18 15:27 INSTALL
     24 harry               Jan 18 11:27 examples/


svn log

名称

svn log ― 显示提交日志信息。

概要

svn log [PATH]
svn log URL [PATH...]

描述

缺省目标是你的当前目录的路径,如果没有提供参数,svn log会显示当前目录下的所有文件和目录的日志信息,你可以通过指定路径来精炼结果,一个或多个修订版本,或者是任何两个的组合。对于本地路径的缺省修订版本范围BASE:1

如果你只是指定一个URL,就会打印这个URL上所有的日志信息,如果添加部分路径,只有这条路径下的URL信息会被打印,URL缺省的修订版本范围是HEAD:1

svn log使用--verbose选项也会打印所有影响路径的日志信息,使用--quiet选项不会打印日志信息正文本身(这与--verbose协调一致)。

每个日志信息只会打印一次,即使是那些明确请求不止一次的路径,日志会跟随在拷贝过程中,使用--stop-on-copy可以关闭这个特性,可以用来监测分支点。

别名

变化

是否访问版本库

选项


--revision (-r) REV
--quiet (-q)
--verbose (-v)
--targets FILENAME
--stop-on-copy
--incremental
--xml
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

你可以在顶级目录运行svn log看到工作拷贝中所有修改的路径的日志信息:


$ svn log
------------------------------------------------------------------------
r20 | harry | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line

Tweak.
------------------------------------------------------------------------
r17 | sally | 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003) | 2 lines
…

检验一个特定文件所有的日志信息:


$ svn log foo.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

如果你手边没有工作拷贝,你可以查看一个URL的日志:


$ svn log http://svn.red-bean.com/repos/test/foo.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

如果你希望查看某个URL下面不同的多个路径,你可以使用URL [PATH...]语法。


$ svn log http://svn.red-bean.com/repos/test/ foo.c bar.c
------------------------------------------------------------------------
r32 | sally | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line

Added defines.
------------------------------------------------------------------------
r31 | harry | 2003-01-10 12:25:08 -0600 (Fri, 10 Jan 2003) | 1 line

Added new file bar.c
------------------------------------------------------------------------
r28 | sally | 2003-01-07 21:48:33 -0600 (Tue, 07 Jan 2003) | 3 lines
…

当你想连接多个队日志命令的调用结果,你会希望使用--incremental选项。svn log通常会在日志信息的开头和每一小段间打印一行虚线,如果你对一段修订版本运行svn log,你会得到下面的结果:


$ svn log -r 14:15
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
r15 | ... 

------------------------------------------------------------------------

然而,如果你希望收集两个不连续的日志信息到一个文件,你会这样做:


$ svn log -r 14 > mylog
$ svn log -r 19 >> mylog
$ svn log -r 27 >> mylog
$ cat mylog
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
------------------------------------------------------------------------
r19 | ... 

------------------------------------------------------------------------
------------------------------------------------------------------------
r27 | ... 

------------------------------------------------------------------------

你可以使用incremental选项来避免两行虚线带来的混乱:


$ svn log --incremental -r 14 > mylog
$ svn log --incremental -r 19 >> mylog
$ svn log --incremental -r 27 >> mylog
$ cat mylog
------------------------------------------------------------------------
r14 | ... 

------------------------------------------------------------------------
r19 | ... 

------------------------------------------------------------------------
r27 | ... 

--incremental选项为--xml提供了一个相似的输出控制。

提示

如果你在特定路径和修订版本运行svn log,输出结果为空


$ svn log -r 20 http://svn.red-bean.com/untouched.txt
------------------------------------------------------------------------

这只意味着这条路径在那个修订版本没有修改,如果从版本库的顶级目录运行这个命令,或者是你知道那个修订版本修改了那个文件,你可以明确的指定它:


$ svn log -r 20 touched.txt 
------------------------------------------------------------------------
r20 | sally | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line

Made a change.
------------------------------------------------------------------------


svn merge

名称

svn merge ― 应用两组源文件的差别到工作拷贝路径。

概要

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
svn merge -r N:M SOURCE[@REV] [WCPATH]

描述

第一种形式,源URL用修订版本号*NM*指定,这是要比较的两组源文件,如果省略修订版本号,缺省是HEAD

第二种形式,*SOURCE可以是URL或者工作拷贝项目,与之对应的URL会被使用。在修订版本号NM*的URL定义了要比较的两组源。

WCPATH是接收变化的工作拷贝路径,如果省略WCPATH,会假定缺省值“.”,除非源有相同基本名称与“.”中的某一文件名字匹配:在这种情况下,区别会应用到那个文件。

不像svn diff,合并操作在执行时会考虑文件的祖先,当你从一个分支合并到另一个分支,而这两个分支有各自重命名的文件时,这一点会非常重要。

别名

变化

工作拷贝

是否访问版本库

只有在对URL操作时会

选项


--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--force
--dry-run
--diff3-cmd CMD
--ignore-ancestry
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

将一个分支合并回主干(假定你有一份主干的工作拷贝,分支在修订版本250创建):


$ svn merge -r 250:HEAD http://svn.red-bean.com/repos/branches/my-branch
U  myproj/tiny.txt
U  myproj/thhgttg.txt
U  myproj/win.txt
U  myproj/flo.txt

如果你的分支在修订版本23,你希望将主干的修改合并到分支,你可以在你的工作拷贝的分支上这样做:


$ svn merge -r 23:30 file:///tmp/repos/trunk/vendors
U  myproj/thhgttg.txt
…

合并一个单独文件的修改:


$ cd myproj
$ svn merge -r 30:31 thhgttg.txt 
U  thhgttg.txt


svn mkdir

名称

svn mkdir ― 创建一个纳入版本控制的新目录。

概要

svn mkdir PATH...
svn mkdir URL...

描述

创建一个目录,名字是提供的*PATH或者URL的最后一部分,工作拷贝PATH*指定的目录会预定要添加,而通过URL指定的目录会作为一次立即提交在版本库建立。多个目录URL的提交是原子操作,在两种情况下,中介目录必须已经存在。

别名

变化

如果是对URL操作则会影响版本库,否则是工作拷贝

是否访问版本库

只有在对URl操作时会

选项


--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--editor-cmd EDITOR
--encoding ENC
--force-log
--config-dir DIR

例子

在工作拷贝创建一个目录:


$ svn mkdir newdir
A         newdir

在版本库创建一个目录(立即提交,所以需要日志信息):


$ svn mkdir -m "Making a new dir." http://svn.red-bean.com/repos/newdir

Committed revision 26.


svn move

名称

svn move ― 移动一个文件或目录。

概要

svn move SRC DST

描述

这个命令移动文件或目录到你的工作拷贝或者是版本库。

提示

这个命令同svn copy加一个svn delete等同。

注意

Subversion不支持在工作拷贝和URL之间拷贝,此外,你只可以一个版本库内移动文件―Subversion不支持跨版本库的移动。

WC -> WC
移动和预订一个文件或目录将要添加(包含历史)。

URL -> URL
完全服务器端的重命名。

别名

mv, rename, ren

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项


--message (-m) TEXT
--file (-F) FILE
--revision (-r) REV
--quiet (-q)
--force
--username USER
--password PASS
--no-auth-cache
--non-interactive
--editor-cmd EDITOR
--encoding ENC
--force-log
--config-dir DIR

例子

移动工作拷bede一个文件:


$ svn move foo.c bar.c
A         bar.c
D         foo.c

移动版本库中的一个文件(一个立即提交,所以需要提交信息):


$ svn move -m "Move a file" http://svn.red-bean.com/repos/foo.c \
                            http://svn.red-bean.com/repos/bar.c

Committed revision 27.


svn propdel

名称

svn propdel ― 删除一个项目的一个属性。

概要

svn propdel PROPNAME [PATH...]
svn propdel PROPNAME --revprop -r REV [URL]

描述

这会删除文件、目录或修订版本的属性。第一种形式是在工作拷贝删除版本化属性,第二种是在一个版本库修订版本中删除未版本化的属性。

别名

pdel, pd

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项

--quiet (-q)
--recursive (-R)
--revision (-r) REV
--revprop
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

删除你的工作拷贝中一个文件的一个属性


$ svn propdel svn:mime-type  some-script
property 'svn:mime-type' deleted from 'some-script'.

删除一个修订版本的属性:


$ svn propdel --revprop -r 26 release-date 
property 'release-date' deleted from repository revision '26'


svn propedit

名称

svn propedit ― 修改一个或多个版本控制之下文件的属性。

概要

svn propedit PROPNAME PATH...
svn propedit PROPNAME --revprop -r REV [URL]

描述

使用喜欢的编辑器编辑一个或多个属性,第一种形式是在工作拷贝编辑版本化的属性,第二种形式是远程编辑未版本化的版本库修订版本属性。

别名

pedit, pe

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项


--revision (-r) REV
--revprop
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--editor-cmd EDITOR
--config-dir DIR

例子

svn propedit对修改多个值的属性非常简单:


$ svn propedit svn:keywords  foo.c 
    <svn will launch your favorite editor here, with a buffer open
    containing the current contents of the svn:keywords property.  You
    can add multiple values to a property easily here by entering one
    value per line.>
Set new value for property 'svn:keywords' on 'foo.c'


svn propget

名称

svn propget ― 打印一个属性的值。

概要

svn propget PROPNAME [TARGET[@REV]...]
svn propget PROPNAME --revprop -r REV [URL]

描述

打印一个文件、目录或修订版本的一个属性的值,第一种形式是打印工作拷贝中一个或多个项目的版本化的属性,第二种形式是远程打印版本库修订版本的未版本化的属性。属性的详情见“属性”一节

别名

pget, pg

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项

--recursive (-R)
--revision (-r) REV
--revprop
--strict
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

检查工作拷贝的一个文件的一个属性:


$ svn propget svn:keywords foo.c
Author
Date
Rev

对于修订版本属性相同:


$ svn propget svn:log --revprop -r 20 
Began journal.


svn proplist

名称

svn proplist ― 列出所有的属性。

概要

svn proplist [TARGET[@REV]...]
svn proplist --revprop -r REV [URL]

描述

列出文件、目录或修订版本的属性,第一种形式是列出工作拷贝的所有版本化的属性,第二种形式是列出版本库修订版本的未版本化的属性。

别名

plist, pl

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项


--verbose (-v)
--recursive (-R)
--revision (-r) REV
--quiet (-q)
--revprop
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

你可以使用proplist察看你的工作拷贝的一个项目的属性:


$ svn proplist foo.c
Properties on 'foo.c':
  svn:mime-type
  svn:keywords
  owner

通过--verbose选项,svn proplist也可以非常便利的显示属性的值:


$ svn proplist --verbose foo.c
Properties on 'foo.c':
  svn:mime-type : text/plain
  svn:keywords : Author Date Rev
  owner : sally


svn propset

名称

svn propset ― 设置文件、目录或者修订版本的属性PROPNAME为PROPVAL。

概要

svn propset PROPNAME [PROPVAL | -F VALFILE] PATH...
svn propset PROPNAME --revprop -r REV [PROPVAL | -F VALFILE] [URL]

描述

设置文件、目录或者修订版本的属性*PROPNAMEPROPVAL*。第一个例子在工作拷贝创建了一个版本化的本地属性修改,第二个例子创建了一个未版本化的远程的对版本库修订版本的属性修改。

提示

Subversion有一系列“特殊的”影响行为方式的属性,关于这些属性的详情请见[“特别属性”一节]。

别名

pset, ps

变化

如果对URL操作会影响版本库,否则只影响工作拷贝

是否访问版本库

只有在对URL操作时会

选项


--file (-F) FILE
--quiet (-q)
--revision (-r) REV
--targets FILENAME
--recursive (-R)
--revprop
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--force
--config-dir DIR

例子

设置文件的mimetype:


$ svn propset svn:mime-type image/jpeg foo.jpg 
property 'svn:mime-type' set on 'foo.jpg'

在UNIX系统,如果你希望一个文件设置执行权限:


$ svn propset svn:executable ON somescript
property 'svn:executable' set on 'somescript'

或许为了合作者的利益你有一个内部的属性设置:


$ svn propset owner sally foo.c
property 'owner' set on 'foo.c'

如果你在特定修订版本的日志信息里有一些错误,并且希望修改,可以使用--revprop设置svn:log为新的日志信息:


$ svn propset --revprop -r 25 svn:log "Journaled about trip to New York."
property 'svn:log' set on repository revision '25'

或者,你没有工作拷贝,你可以提供一个URL。


$ svn propset --revprop -r 26 svn:log "Document nap." http://svn.red-bean.com/repos
property 'svn:log' set on repository revision '25'

最后,你可以告诉propset从一个文件得到输入,你甚至可以使用这个方式来设置一个属性为二进制内容:


$ svn propset owner-pic -F sally.jpg moo.c 
property 'owner-pic' set on 'moo.c'

注意

缺省,你不可以在Subversion版本库修改修订版本属性,你的版本库管理员必须显示的通过创建一个名字为pre-revprop-change的钩子来允许修订版本属性修改。


svn resolved

名称

svn resolved ― 删除工作拷贝文件或目录的“冲突”状态。

概要

svn resolved PATH...

描述

删除工作拷贝文件或目录的“conflicted”状态。这个程序不是语义上的改变冲突标志,它只是删除冲突相关的人造文件,从而重新允许路径提交;也就是说,它告诉Subversion冲突已经“解决了”。关于解决冲突更深入的考虑可以查看“解决冲突(合并别人的修改)”一节

别名

变化

工作拷贝

是否访问版本库

选项

--targets FILENAME
--recursive (-R)
--quiet (-q)
--config-dir DIR

例子

如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件:


$ svn update
C  foo.c
Updated to revision 31.
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31

当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。

警告

可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。


svn revert

名称

svn revert ― 取消所有的本地编辑。

概要

svn revert PATH...

描述

恢复所有对文件和目录的修改,并且解决所有的冲突状态。svn revert不会只是恢复工作拷贝中一个项目的内容,也包括了对属性修改的恢复。最终,你可以使用它来取消所有已经做过的预定操作(例如,文件预定要添加或删除可以“恢复”)。

别名

变化

工作拷贝

是否访问版本库

选项


--targets FILENAME
--recursive (-R)
--quiet (-q)
--config-dir DIR

例子

丢弃对一个文件的修改:


$ svn revert foo.c
Reverted foo.c

如果你希望恢复一整个目录的文件,可以使用--recursive选项:


$ svn revert --recursive .
Reverted newdir/afile
Reverted foo.c
Reverted bar.txt

最后,你可以取消预定的操作:


$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

$ svn status
      mistake.txt
      whoops

注意

如果你没有给svn revert提供了目标,它不会做任何事情―为了保护你不小心失去对工作拷贝的修改,svn revert需要你提供至少一个目标。


svn status

名称

svn status ― 打印工作拷贝文件和目录的状态。

概要

svn status [PATH...]

描述

打印工作拷贝文件和目录的状态。如果没有参数,只会打印本地修改的项目(不会访问版本库),使用--show-updates选项,会添加工作修订版本和服务器过期信息。使用--verbose会打印每个项目的完全修订版本信息。

输出的前五列都是一个字符宽,每一列给出了工作拷贝项目的每一方面的信息。

第一列指出一个项目的是添加、删除还是其它的修改。

' '
没有修改。

'A'
预定要添加的项目。

'D'
预定要删除的项目。

'M'
项目已经修改了。

'R'
项目在工作拷贝中已经被替换了。

'C'
项目与从版本库的更新冲突。

'X'
项目与外部定义相关。

'I'
项目被忽略(例如使用svn:ignore属性)。

''
项目不在版本控制之下。

'!'
项目已经丢失(例如,你使用svn移动或者删除了它)。这也说明了一个目录不是完整的(一个检出或更新中断)。

'~'
项目作为一种对象(文件、目录或链接)纳入版本控制,但是已经被另一种对象替代。

第二列告诉一个文件或目录的属性的状态。

' '
没有修改。

'M'
这个项目的属性已经修改。

'C'
这个项目的属性与从版本库得到的更新有冲突。

第三列只在工作拷贝锁定时才会出现。

' '
项目没有锁定。

'L'
项目已经锁定。

第四列只在预定包含历史添加的项目出现。

' '
没有历史预定要提交。

'+'
历史预定要伴随提交。

第五列只在项目跳转到相对于它的父目录时出现(见[“转换工作拷贝”一节])。

' '
项目是它的父目录的孩子。

'S'
项目已经转换。

过期信息出现在第八列(只在使用--show-updates选项时出现)。

' '
这个项目在工作拷贝是最新的。

'*'
在服务器这个项目有了新的修订版本。

余下的字段是可变得宽度且使用空格分隔,如果使用--show-updates--verbose选项,工作修订版本是下一个字段。

如果传递--verbose选项,最后提交的修订版本和最后的提交作者会在后面显示。

工作拷贝路径永远是最后一个字段,所以它可以包括空格。

别名

stat, st

变化

是否访问版本库

只有使用--show-updates时会访问

选项


--show-updates (-u)
--verbose (-v)
--non-recursive (-N)
--quiet (-q)
--no-ignore
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir

例子

这是查看你在工作拷贝所做的修改的最简单的方法。


$ svn status wc
 M     wc/bar.c
A  +   wc/qax.c

如果你希望找出工作拷贝哪些文件是最新的,使用--show-updates选项(这不会对工作拷贝有任何修改)。这里你会看到wc/foo.c在上次更新后有了修改:


$ svn status --show-updates wc
 M           965    wc/bar.c
       *     965    wc/foo.c
A  +         965    wc/qax.c
Status against revision:    981

注意

--show-updates只会在过期的项目(如果你运行svn update,就会更新的项目)旁边安置一个星号。--show-updates不会导致状态列表反映项目的版本库版本。

最后,是你能从status子命令得到的所有信息:


$ svn status --show-updates --verbose wc
 M           965       938 sally        wc/bar.c
       *     965       922 harry        wc/foo.c
A  +         965       687 harry        wc/qax.c
             965       687 harry        wc/zig.c
Head revision:   981

关于svn status的更多例子可以查看svn官网。


svn switch

名称

svn switch ― 把工作拷贝更新到别的URL。

概要

svn switch URL [PATH]
switch --relocate FROM TO [PATH...]

描述

这个子命令更新你的工作拷贝来反映新的URL―通常是一个与你的工作拷贝分享共同祖先的URL,尽管这不是必需的。这是Subversion移动工作拷贝到分支的方式。更深入的了解请见[“转换工作拷贝”一节]。

别名

sw

变化

工作拷贝

是否访问版本库

选项

--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--diff3-cmd CMD
--relocate
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

如果你目前所在目录vendors分支到vendors-with-fix,你希望转移到那个分支:


$ svn switch http://svn.red-bean.com/repos/branches/vendors-with-fix .
U  myproj/foo.txt
U  myproj/bar.txt
U  myproj/baz.c
U  myproj/qux.c
Updated to revision 31.

为了跳转回来,只需要提供最初取出工作拷贝的版本库URL:


$ svn switch http://svn.red-bean.com/repos/trunk/vendors .
U  myproj/foo.txt
U  myproj/bar.txt
U  myproj/baz.c
U  myproj/qux.c
Updated to revision 31.

提示

如果你不希望跳转所有的工作拷贝,你可以只跳转一部分。

有时候管理员会修改版本库的“基本位置”―换句话说,版本库的内容并不改变,但是访问根的主URL变了。举个例子,主机名变了、URL模式变了或者是URL中的任何一部分改变了。我们不选择重新检出一个工作拷贝,你可以使用svn switch来重写版本库所有URL的开头。使用--relocate来做这种替换,没有文件内容会改变,访问的版本库也不会改变。只是像在工作拷贝.svn/运行了一段Perl脚本s/OldRoot/NewRoot/


$ svn checkout file:///tmp/repos test
A  test/a
A  test/b
…

$ mv repos newlocation
$ cd test/

$ svn update
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///tmp/repos'

$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
$ svn update
At revision 3.

警告

小心使用--relocate选项,如果你输入了错误的选项,你会在工作拷贝创建无意义的URL,会导致整个工作区不可用并且难于修复。理解何时应该使用--relocate也是非常重要的,下面是一些规则:

如果工作拷贝需要反映一个版本库的新目录,只需要使用svn switch

如果你的工作拷贝还是反映相同的版本库目录,但是版本库本身的位置改变了,使用svn switch --relocate


svn update

名称

svn update ― 更新你的工作拷贝。

概要

svn update [PATH...]

描述

svn update会把版本库的修改带到工作拷贝,如果没有给定修订版本,它会把你的工作拷贝更新到HEAD修订版本,否则,它会把工作拷贝更新到你用--revision指定的修订版本。

对于每一个更新的项目开头都有一个表示所做动作的字符,这些字符有下面的意思:

A
添加

D
删除

U
更新

C
冲突

G
合并

第一列的字符反映文件本身的更新,而第二列会反映文件属性的更新。

别名

up

变化

工作拷贝

是否访问版本库

选项


--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--diff3-cmd CMD
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

获取你上次更新之后版本库的修改:


$ svn update
A  newdir/toggle.c
A  newdir/disclose.c
A  newdir/launch.c
D  newdir/README
Updated to revision 32.

你也可以将工作拷贝更新到旧的修订版本(Subversion没有CVS的“sticky”文件的概念;见[附录A, Subversion对于CVS用户]):


$ svn update -r30
A  newdir/README
D  newdir/toggle.c
D  newdir/disclose.c
D  newdir/launch.c
U  foo.c
Updated to revision 30.

提示

如果你希望检查单个文件的旧的修订版本,你会希望使用svn cat


2、svnadmin命令

svnadmin

svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见“svnadmin”一节

因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。

svnadmin Switches

--bdb-log-keep
(Berkeley DB特定)关闭数据库日志自动日志删除功能。

--bdb-txn-nosync
(Berkeley DB特定)当提交数据库事务时关闭fsync。

--bypass-hooks
绕过版本库钩子系统。

--clean-logs
删除不使用的Berkeley DB日志。

--force-uuid
缺省情况下,当版本库加载已经包含修订版本的数据时svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID

--ignore-uuid
缺省情况下,当加载空版本库时,svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。

--incremental
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。

--parent-dir *DIR*
当加载一个转储文件时,根路径为*DIR*而不是/

--revision (-r) ARG
指定一个操作的修订版本。

--quiet
不显示通常的过程―只显示错误。

svnadmin Subcommands


svnadmin create

名称

svnadmin create ― 创建一个新的空的版本库。

概要

svnadmin create REPOS_PATH

描述

在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。

选项

--bdb-txn-nosync
--bdb-log-keep
--config-dir DIR
--fs-type TYPE

例子

创建一个版本库就是这样简单:


$ svnadmin create /usr/local/svn/repos

在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:


$ svnadmin create /usr/local/svn/repos --fs-type fsfs

记住svnadmin只工作在本地路径,而不是URL


svnadmin deltify

名称

svnadmin deltify ― 修订版本范围的路径的增量变化。

概要

svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH

描述

svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。

它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了非常小的收益,所以这个“特性”被废弃了。

选项


--revision (-r)
--quiet


svnadmin dump

名称

svnadmin dump ― 将文件系统的内容转储到标准输出。

概要

svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

描述

使用“dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从*LOWERUPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER*,导出一个修订版本树,通常的用法见[“版本库的移植”一节]。

如果Subversion的转储文件很大,你可以使用--deltas来减小svnadmin创建的导出文件的大小。通过这个选项,就不会写出每次修订版本的内容,svnadmin dump只会写出版本之间的区别。然而,创建增量导出文件的坏处―对CPU的要求更高,svndumpfilter不可以对这个文件操作,而且非增量的转储文件可以更好的压缩。

选项


--revision (-r)
--incremental
--quiet
--deltas

例子

转储整个版本库:


$ svnadmin dump /usr/local/svn/repos
SVN-fs-dump-format-version: 1
Revision-number: 0
* Dumped revision 0.
Prop-content-length: 56
Content-length: 56
…

从版本库增量转储一个单独的事务:


$ svnadmin dump /usr/local/svn/repos -r 21 --incremental 
* Dumped revision 21.
SVN-fs-dump-format-version: 1
Revision-number: 21
Prop-content-length: 101
Content-length: 101
…


svnadmin help

名称

svnadmin help

概要

svnadmin help [SUBCOMMAND...]

描述

当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。

别名

, h


svnadmin hotcopy

名称

svnadmin hotcopy ― 制作一个版本库的热备份。

概要

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

描述

这个子命令会制作一个版本库的完全“热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。

选项


--clean-logs


svnadmin list-dblogs

名称

svnadmin list-dblogs ― 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。

概要

svnadmin list-dblogs REPOS_PATH

描述

Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOGS_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见[“管理磁盘空间”一节]。


svnadmin list-unused-dblogs

名称

svnadmin list-unused-dblogs ― 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。

概要

svnadmin list-unused-dblogs REPOS_PATH

描述

Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOGS_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见[“管理磁盘空间”一节]。

例子

删除所有不用的日志文件:


$ svnadmin list-unused-dblogs /path/to/repos
/path/to/repos/log.0000000031
/path/to/repos/log.0000000032
/path/to/repos/log.0000000033

$ svnadmin list-unused-dblogs /path/to/repos | xargs rm
## disk space reclaimed!


svnadmin load

名称

svnadmin load ― 从标准输出读取“转储文件”格式流。

概要

svnadmin load REPOS_PATH

描述

从标准输出读取“转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。

选项


--quiet (-q)
--ignore-uuid
--force-uuid
--parent-dir

例子

这里显示了加载一个备份文件到版本库(当然,使用svnadmin dump):


$ svnadmin load /usr/local/svn/restored < repos-backup
<<< Started new txn, based on original revision 1
     * adding path : test ... done.
     * adding path : test/a ... done.
…

或者你希望加载到一个子目录:


$ svnadmin load --parent-dir new/subdir/for/project /usr/local/svn/restored < repos-backup
<<< Started new txn, based on original revision 1
     * adding path : test ... done.
     * adding path : test/a ... done.
…


svnadmin lstxns

名称

svnadmin lstxns ― 打印所有未提交的事物名称。

概要

svnadmin lstxns REPOS_PATH

描述

打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见[“版本库清理”一节]。

例子

列出版本库所有突出的事物。


$ svnadmin lstxns /usr/local/svn/repos/ 
1w
1x


svnadmin recover

名称

svnadmin recover ― 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用)。

概要

svnadmin recover REPOS_PATH

描述

在你得到的错误说明你需要恢复版本库时运行这个命令。

选项


--wait

例子

恢复挂起的版本库:


$ svnadmin recover /usr/local/svn/repos/ 
Repository lock acquired.
Please wait; recovering the repository may take some time...

Recovery completed.
The latest repos revision is 34.

恢复数据库需要一个版本库的独占锁,如果另一个进程访问版本库,svnadmin recover会出错:


$ svnadmin recover /usr/local/svn/repos
svn: Failed to get exclusive repository access; perhaps another process
such as httpd, svnserve or svn has it open

$

--wait选项可以导致svnadmin recover一直等待其它进程断开连接:


$ svnadmin recover /usr/local/svn/repos --wait
Waiting on repository lock; perhaps another process has it open

### time goes by...

Repository lock acquired.
Please wait; recovering the repository may take some time...

Recovery completed.
The latest repos revision is 34.


svnadmin rmtxns

名称

svnadmin rmtxns ― 从版本库删除事物。

概要

svnadmin rmtxns REPOS_PATH TXN_NAME...

描述

删除版本库突出的事物,更多细节在svn官网。

选项


--quiet (-q)

例子

删除命名的事物:


$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x

很幸运,lstxns的输出作为rmtxns输入工作良好:


$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`

从版本库删除所有未提交的事务。


svnadmin setlog

名称

svnadmin setlog ― 设置某个修订版本的日志信息。

概要

svnadmin setlog REPOS_PATH -r REVISION FILE

描述

设置修订版本REVISION的日志信息为FILE的内容。

这与使用svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。

警告

修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。

选项


--revision (-r) ARG
--bypass-hooks

例子

设置修订版本19的日志信息为文件msg的内容:


$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg


svnadmin verify

名称

svnadmin verify ― 验证版本库保存的数据。

概要

svnadmin verify REPOS_PATH

描述

如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。

例子

检验挂起的版本库:


$ svnadmin verify /usr/local/svn/repos/ 
* Verified revision 1729.


3、svnlook

svnlook

svnlook是检验Subversion版本库不同方面的命令行工具,它不会对版本库有任何修改―它只是用来“看”。svnlook通常被版本库钩子使用,但是版本库管理也会发现它在诊断目的上也非常有用。

因为svnlook通过直接版本库访问(因此只可以在保存版本库的机器上工作)工作,所以他通过版本库的路径访问,而不是URL。

如果没有指定修订版本或事物,svnlook缺省的是版本库最年轻的(最新的)修订版本。

svnlook选项

svnlook的选项是全局的,就像svnsvnadmin;然而,大多数选项只会应用到一个子命令,因为svnlook的功能是(有意的)限制在一定范围的。

--no-diff-deleted
防止svnlook打印删除文件的区别,缺省的行为方式是当一个文件在一次事物/修订版本中删除后,得到的结果与保留这个文件的内容变成空相同。

--revision (-r)
指定要进行检查的特定修订版本。

--transaction (-t)
指定一个希望检查的特定事物ID。

--show-ids
显示文件系统树中每条路径的文件系统节点修订版本ID。


svnlook author

名称

svnlook author ― 打印作者。

概要

svnlook author REPOS_PATH

描述

打印版本库一个修订版本或者事物的作者。

选项

--revision (-r)
--transaction (-t)

例子

svnlook author垂手可得,但是并不令人激动:


$ svnlook author -r 40 /usr/local/svn/repos 
sally


svnlook cat

名称

svnlook cat ― 打印一个文件的内容。

概要

svnlook cat REPOS_PATH PATH_IN_REPOS

描述

打印一个文件的内容。

选项

--revision (-r)
--transaction (-t)

例子

这会显示事物ax8中一个文件的内容,位于/trunk/README


$ svnlook cat -t ax8 /usr/local/svn/repos /trunk/README

               Subversion, a version control system.
               =====================================

$LastChangedDate: 2003-07-17 10:45:25 -0500 (Thu, 17 Jul 2003) $

Contents:

     I. A FEW POINTERS
    II. DOCUMENTATION
   III. PARTICIPATING IN THE SUBVERSION COMMUNITY
…


svnlook changed

名称

svnlook changed ― 打印修改的路径。

概要

svnlook changed REPOS_PATH

描述

打印在特定修订版本或事物修改的路径,也是在第一列使用“svn update样式的”状态字符:A表示添加,D表示删除,U表示更新(修改)。

选项


--revision (-r)
--transaction (-t)

例子

显示在测试版本库修订版本39修改的文件列表:


$ svnlook changed -r 39 /usr/local/svn/repos
A   trunk/vendors/deli/
A   trunk/vendors/deli/chips.txt
A   trunk/vendors/deli/sandwich.txt
A   trunk/vendors/deli/pickle.txt


svnlook date

名称

svnlook date ― 打印时间戳。

概要

svnlook date REPOS_PATH

描述

打印版本库一个修订版本或事物的时间戳。

选项

--revision (-r)
--transaction (-t)

例子

显示测试版本库修订版本40的日期:

            
$ svnlook date -r 40 /tmp/repos/
2003-02-22 17:44:49 -0600 (Sat, 22 Feb 2003)


svnlook diff

名称

svnlook diff ― 打印修改的文件和属性的区别。

概要

svnlook diff REPOS_PATH

描述

打印版本库中GNU样式的文件和属性修改区别。

选项


--revision (-r)
--transaction (-t)
--no-diff-deleted

例子

这显示了一个新添加的(空的)文件,一个删除的文件和一个拷贝的文件:


$ svnlook diff -r 40 /usr/local/svn/repos/
Copied: egg.txt (from rev 39, trunk/vendors/deli/pickle.txt)

Added: trunk/vendors/deli/soda.txt
==============================================================================

Modified: trunk/vendors/deli/sandwich.txt
==============================================================================
--- trunk/vendors/deli/sandwich.txt	(original)
+++ trunk/vendors/deli/sandwich.txt	2003-02-22 17:45:04.000000000 -0600
@@ -0,0 +1 @@
+Don't forget the mayo!

Modified: trunk/vendors/deli/logo.jpg
==============================================================================
(Binary files differ)

Deleted: trunk/vendors/deli/chips.txt
==============================================================================

Deleted: trunk/vendors/deli/pickle.txt
==============================================================================

如果一个文件有非文本的svn:mime-type属性,区别不会明确显示。


svnlook dirs-changed

名称

svnlook dirs-changed ― 打印本身修改的目录。

概要

svnlook dirs-changed REPOS_PATH

描述

打印本身修改(属性编辑)或子文件修改的目录。

选项


--revision (-r)
--transaction (-t)

例子

这显示了在我们的实例版本库中在修订版本40修改的目录:


$ svnlook dirs-changed -r 40 /usr/local/svn/repos
trunk/vendors/deli/


svnlook help

名称

svnlook help

概要

Also svnlook -h and svnlook -.

描述

显示svnlook的帮助信息,这个命令如同svn help的兄弟,也是你的朋友,即使你从不调用它,并且忘掉了邀请它加入你的上一次聚会。

别名

, h


svnlook history

名称

svnlook history ― 打印版本库(如果没有路径,则是根目录)某一个路径的历史。

概要

svnlook history REPOS_PATH             [PATH_IN_REPOS]

描述

打印版本库(如果没有路径,则是根目录)某一个路径的历史。

选项


--revision (-r)
--show-ids

例子

这显示了实例版本库中作为修订版本20的路径/tags/1.0的历史输出。


$ svnlook history -r 20 /usr/local/svn/repos /tags/1.0 --show-ids
REVISION   PATH <ID>
--------   ---------
      19   /tags/1.0 <1.2.12>
      17   /branches/1.0-rc2 <1.1.10>
      16   /branches/1.0-rc2 <1.1.x>
      14   /trunk <1.0.q>
      13   /trunk <1.0.o>
      11   /trunk <1.0.k>
       9   /trunk <1.0.g>
       8   /trunk <1.0.e>
       7   /trunk <1.0.b>
       6   /trunk <1.0.9>
       5   /trunk <1.0.7>
       4   /trunk <1.0.6>
       2   /trunk <1.0.3>
       1   /trunk <1.0.2>


svnlook info

名称

svnlook info ― 打印作者、时间戳、日志信息大小和日志信息。

概要

svnlook info REPOS_PATH

描述

打印作者、时间戳、日志信息大小和日志信息。

选项


--revision (-r)
--transaction (-t)

例子

显示了你的实例版本库在修订版本40的信息输出。


$ svnlook info -r 40 /usr/local/svn/repos
sally
2003-02-22 17:44:49 -0600 (Sat, 22 Feb 2003)
15
Rearrange lunch.


svnlook log

名称

svnlook log ― 打印日志信息。

概要

svnlook log REPOS_PATH

描述

打印日志信息。

选项

--revision (-r)
--transaction (-t)

例子

这显示了实例版本库在修订版本40的日志输出:


$ svnlook log /tmp/repos/
Rearrange lunch.


svnlook propget

名称

svnlook propget ― 打印版本库中一个路径一个属性的原始值。

概要

svnlook propget REPOS_PATH PROPNAME [PATH_IN_REPOS]

描述

列出版本库中一个路径一个属性的值。

别名

pg, pget

选项

--revision (-r)
--transaction (-t)

例子

这显示了HEAD修订版本中文件/trunk/sandwich的“seasonings”属性的值:


$ svnlook pg /usr/local/svn/repos seasonings /trunk/sandwich
mustard


svnlook proplist

名称

svnlook proplist ― 打印版本化的文件和目录的属性名称和值。

概要

svnlook proplist REPOS_PATH [PATH_IN_REPOS]

描述

列出版本库中一个路径的属性,使用--verbose选项也会显示所有的属性值。

别名

pl, plist

选项


--revision (-r)
--transaction (-t)
--verbose (-v)

例子

这显示了HEAD修订版本中/trunk/README的属性名称:


$ svnlook proplist /usr/local/svn/repos /trunk/README
  original-author
  svn:mime-type

这与前一个例子是同一个命令,但是同时显示了属性值:


$ svnlook --verbose proplist /usr/local/svn/repos /trunk/README
  original-author : fitz
  svn:mime-type : text/plain


svnlook tree

名称

svnlook tree ― 打印树。

概要

svnlook tree REPOS_PATH [PATH_IN_REPOS]

描述

打印树,从*PATH_IN_REPOS*(如果提供,会作为树的根)开始,可以选择显示节点修订版本ID。

选项


--revision (-r)
--transaction (-t)
--show-ids

例子

这会显示实例版本库中修订版本40的树输出(包括节点ID):


$ svnlook tree -r 40 /usr/local/svn/repos --show-ids
/ <0.0.2j>
 trunk/ <p.0.2j>
  vendors/ <q.0.2j>
   deli/ <1g.0.2j>
    egg.txt <1i.e.2j>
    soda.txt <1k.0.2j>
    sandwich.txt <1j.0.2j>


svnlook uuid

名称

svnlook uuid ― 打印版本库的UUID

概要

svnlook uuid REPOS_PATH

描述

打印版本库的UUID,UUID是版本库的Universal Unique IDentifier(全局唯一标示),Subversion客户端可以使用这个标示区分不同的版本库。

例子

          
$ svnlook uuid /usr/local/svn/repos
e7fe1b91-8cd5-0310-98dd-2f12e793c5e8


svnlook youngest

名称

svnlook youngest ― 打印最年轻的修订版本号。

概要

svnlook youngest REPOS_PATH

描述

打印一个版本库最年轻的修订版本号。

例子

这显示了在实例版本库显示最年轻的修订版本:

          $ svnlook youngest /tmp/repos/ 
42


4、svnserve

svnserve

svnserve允许Subversion版本库使用svn网络协议,你可以作为独立服务器进程运行svnserve,或者是使用其它进程,如inetdxinetdsshd为你启动进程。

一旦客户端已经选择了一个版本库来传递它的URL,svnserve会读取版本库目录的conf/svnserve.conf文件,来检测版本库特定的设置,如使用哪个认证数据库和应用怎样的授权策略。关于svnserve.conf文件的详情见“svnserve,一个自定义的服务器”一节

svnserve选项

不象前面描述的例子,svnserve没有子命令―svnserve完全通过选项控制。

--daemon (-d)
导致svnserve以守护进程方式运行,svnserve维护本身并且接受和服务svn端口(缺省3690)的TCP/IP连接。

--listen-port=PORT
在守护进程模式时导致svnserve监听*PORT*端口。

--listen-host=HOST
svnserve监听的*HOST*,可能是一个主机名或是一个IP地址。

--foreground
当与-d一起使用,会导致svnserve停留在前台,主要用来调试。

--inetd (-i)
导致svnserve使用标准输出/标准输入文件描述符,更准确的是使用inetd作为守护进程。

--help (-h)
显示有用的摘要和选项。

--version
显示版本信息,版本库后端存在和可用的模块列表。

--root=ROOT (-r=ROOT)
设置svnserve服务的版本库的虚拟根,客户端提供的URL中显示的路径会解释为这个根的相对路径,不会允许离开这个根。

--tunnel (-t)
导致svnserve以管道模式运行,很像inetd操作的模式(服务于一个标准输入/标准输出的连接),除了连接是用当前uid的用户名预先认证过的这一点。这个选项在客户端使用如ssh之类的管道时使用。

--tunnel-user NAME
--tunnel选项结合使用;告诉svnserve假定NAME就是认证用户,而不是svnserve进程的UID用户,当希望多个用户通过SSH共享同一个系统帐户,但是维护各自的提交标示符时非常有用。

--threads (-T)
当以守护进程模式运行,导致svnserve为每个连接产生一个线程而不是一个进程,svnserve进程本身在启动后会一直在后台。

--listen-once (-X)
导致svnserve在svn端口接受一个连接,维护完成它退出。这个选项主要用来调试。


svnversion

名称

svnversion ― 总结工作拷贝的本地修订版本。

概要

svnversion [OPTIONS] WC_PATH [TRAIL_URL]

描述

svnversion是用来总结工作拷贝修订版本混合的程序,结果修订版本号或范围会写到标准输出。

如果提供TRAIL_URL,URL的尾端部分用来监测是否WC_PATH本身已经跳转(监测WC_PATH的跳转不需要依赖TRAIL_URL)。

选项

svnservesvnversion没有子命令,只有选项。

--no-newline (-n)
忽略输出的尾端新行。.

--committed (-c)
使用最后修改修订版本而不是当前的(例如,本地存在的最高修订版本)修订版本。

--help (-h)
打印帮助摘要。

--version
打印svnversion,如果没有错误退出。

例子

如果工作拷贝都是一样的修订版本(例如,在更新后那一刻),会打印修订版本:

$ svnversion .
4168

添加TRAIL_URL来展示工作拷贝不是从你希望的地方跳转过来的:

$ svnversion . /repos/svn/trunk
4168

对于混合修订版本的工作拷贝,修订版本的范围会被打印:

$ svnversion .
4123:4168

如果工作拷贝包含修改,后面会紧跟一个"M":

$ svnversion .
4168M

如果工作拷贝已经跳转,后面会有一个"S":

$ svnversion .
4168S

因此,这里是一个混合修订版本,跳转的工作拷贝包含了一些本地修改:

$ svnversion .
4212:4168MS

如果从一个目录而不是工作拷贝调用,svnversion假定它是一个导出的工作拷贝并且打印"exported":

$ svnversion .
exported

5、其它

mod_dav_svn Configuration Directives

名称

mod_dav_svn Configuration Directives ― Apache通过Apache HTTP服务器用来维护Subversion版本库配置指示。

描述

这个小节主要描述了Subversion Apache配置的每个指示,关于Apache配置Subversion的更多信息见svn官网。

Directives

DAV svn
这个指示必须包含在所有Subversion版本库的DirectoryLocation块中,它告诉httpd使用Subversion的后端,用mod_dav来处理所有的请求。

SVNPath
这个指示指定Subversion版本库文件文件系统的位置,在一个Subversion版本库的配置块里,必须提供这个指示或SVNParentPath,但不能同时存在。

SVNSpecialURI
指定特定Subversion资源的URI部分(命名空间),缺省是“!svn”,大多数管理员不会用到这个指示。只有那些必须要在版本库中放一个名字为!svn的文件时需要设置。如果你在一个已经使用中的服务器上这样修改,它会破坏所有的工作拷贝,你的用户会拿着叉子和火炬追杀你。

SVNReposName
指定Subversion版本库在HTTP GET请求中使用的名字,这个值会作为所有目录列表(当你用web浏览器察看Subversion版本库时会看到)的标题,这个指示是可选的。

SVNIndexXSLT
目录列表所使用的XSL转化的URI,这个指示可选。

SVNParentPath
指定子目录会是版本库的父目录在文件系统的位置,在一个Subversion版本库的配置块里,必须提供这个指示或SVNPath,但不能同时存在。

SVNPathAuthz
控制开启和关闭路径为基础的授权,更多细节见svn官网。


  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值