SVN 第6章 svnadmin

2021-06-10 鲁鲁槟 收藏

①、svnadmin create

A、描述

svnadmin create REPOS_PATH

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

B、选项

  • --bdb-txn-nosync

  • --bdb-log-keep

  • --config-dir DIR

  • --fs-type TYPE

C、例子

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

$ 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

A、描述

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

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

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

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

B、选项

  • --revision (-r)

  • --quiet

③、svnadmin dump

A、描述

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

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

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

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

B、选项

  • --revision (-r)

  • --incremental

  • --quiet

  • --deltas

C、例子

转储整个版本库:

$ 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

A、描述

svnadmin help [SUBCOMMAND...]

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

B、别名

, h

⑤、svnadmin hotcopy

A、描述

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

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

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

B、选项

  • --clean-logs

⑥、svnadmin list-dblogs

A、描述

svnadmin list-dblogs REPOS_PATH

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

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

⑦、svnadmin list-unused-dblogs

A、描述

svnadmin list-unused-dblogs REPOS_PATH

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

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

B、例子

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

$ 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

A、描述

svnadmin load REPOS_PATH

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

B、选项

  • --quiet (-q)

  • --ignore-uuid

  • --force-uuid

  • --parent-dir

C、例子

这里显示了加载一个备份文件到版本库(当然,使用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

A、描述

svnadmin lstxns REPOS_PATH

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

B、例子

列出版本库所有突出的事物。
$ svnadmin lstxns /usr/local/svn/repos/ 
1w
1x

⑩、svnadmin recover

A、描述

svnadmin recover REPOS_PATH

将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用)。在你得到的错误说明你需要恢复版本库时运行这个命令。

B、选项


  • --wait


C、例子

恢复挂起的版本库:

$ 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

A、描述

svnadmin rmtxns REPOS_PATH TXN_NAME...

从版本库删除事物。

B、选项

  • --quiet (-q)

C、例子

删除命名的事物:

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

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

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

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

⑫、svnadmin setlog

A、描述

svnadmin setlog REPOS_PATH -r REVISION FILE

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

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

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

B、选项

  • --revision (-r) ARG

  • --bypass-hooks

C、例子

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

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

⑬、svnadmin verify

A、描述

svnadmin verify REPOS_PATH

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

B、例子

检验挂起的版本库:

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