SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2566|回复: 0

[推荐] svnadmin 命令

[复制链接]
发表于 2018-11-22 14:43:22 | 显示全部楼层 |阅读模式
svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见“svnadmin”一节。   

! c  `8 w# {- X0 A2 ], L 因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        2 H. J- s. k$ T" ~* Q9 o! f

8 k' F4 J! v) B (Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        & k: f0 w2 g7 m* @1 M

2 t, b3 x- q# |8 [$ Y# [; y8 {2 c (Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks        
0 U/ d2 p7 A0 C8 H2 k( b" T# C" U  k3 H( d
绕过版本库钩子系统。   --clean-logs        - O6 |4 L) x! M: t7 S
: B9 e% Z1 A3 o! E9 }1 _
删除不使用的Berkeley DB日志。   --force-uuid        # U$ w: @4 l# }: W7 ?+ J6 w, Y
" Z9 |& y% `3 Q
缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        ; L8 @( m) k9 h- P& j* t; V# U. R

) g/ b/ K$ ^5 I3 K# |, j% U0 Y: ^ 缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        : Y/ \( j' G5 u, @
! x& f) D: k1 U( n$ W7 o
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        
) j* B6 F: t! A) R; Y! R3 s( k3 P! f6 r# V
当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        
0 W1 }  i2 u& _( W" o+ G6 z' w$ h" K$ l. G/ |) ~. b1 L, M
指定一个操作的修订版本。   --quiet        2 r3 |$ t( O* q; e) c! ^; A& n% G

3 X: h4 \. a5 ? 不显示通常的过程—只显示错误。   --use-post-commit-hook        & Q5 x5 W* U) J* U- h$ f) S6 F
! i* a% P6 g' z1 H, [
当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        
7 M4 f' q% d; z* N. Q5 \9 p$ ?# E1 O) m
当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称      
, h; @( _5 h8 ]4 b3 O- v7 l! N' {  M2 [; r0 g& p
svnadmin create — 创建一个新的空的版本库。              概要       5 D2 N7 d$ y: F+ [
9 e" ~# @7 @3 f  f
svnadmin create REPOS_PATH              描述       9 T8 D* F. O6 [2 f5 h: c9 S
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
# a* }+ Z8 D+ F* q* v
- ?+ S! P6 B: [5 K1 P1 C* o  U--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子      
+ w" `- J; K& U5 @+ U# U4 m* R 创建一个版本库就是这样简单:       / {  z! Z1 N; M3 h/ x% B

  R$ B2 A, v/ l4 W) ?" a$ X  C) M- m$ svnadmin create /usr/local/svn/repos6 @/ T7 X# d& O: q
在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:       : }0 E# F8 J& d% W

  Q+ T* Q( h: U- j- D. v$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   ! X, D: P" q( k
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称       ( O: M0 M5 R4 h9 {" E- r$ i# ]
svnadmin deltify — 修订版本范围的路径的增量变化。              概要      
0 X4 U5 P9 a+ O, w7 Z$ X1 N! e# \8 u- j
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。       : ]/ [. @9 y, ?. ~% {4 D+ |" H
它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项      
4 Q8 V$ W# G" `+ o. D( w4 y
2 F7 B$ @) S8 o9 `--revision (-r)--quiet                                     名称       9 X( L. \+ k( V' Q7 r
svnadmin dump — 将文件系统的内容转储到标准输出。              概要      
# V  ]% i; O) Q. \. p9 C7 R" ~' D% F; Y5 W( K8 F4 A
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述       ) Q, q8 q, y/ j7 m" D+ ]! Q( e7 X
使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。       ; f1 y- k$ p9 w; p- c6 L4 x
! ~$ |8 ?+ ~) G  Z
缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。      
, B5 X  a4 N6 _4 t) z) ~2 c1 c
- w: M5 b: V* V  F 有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。      
/ |+ i! t% |9 c, C& c3 A. x) G+ y2 j' t4 e. C" n' ~
第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项       9 a7 b: F' a0 N2 {

; y" p4 T7 a3 n$ p$ ~7 V--revision (-r)--incremental--quiet--deltas              例子      
! g9 k% L) x: Q* o6 w 转储整个版本库:       4 N# z3 C2 E$ C& E
: b- |, u5 P2 N+ ^! h
$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…
% }$ X- K- H' z 从版本库增量转储一个单独的事务:       & j' W) ~% [+ D% t9 T# I( e9 q
2 K. m' |) ?% X2 J6 L, _/ T
$ svnadmin dump /usr/local/svn/repos -r 21 --incremental * Dumped revision 21.SVN-fs-dump-format-version: 1Revision-number: 21Prop-content-length: 101Content-length: 101…                                     名称      
/ l( b/ U0 N" e# S: z: F8 R svnadmin help              概要      
2 C  O# J* A* Q. w  P/ e+ U- T- ]. F0 h6 n( W
svnadmin help [SUBCOMMAND...]              描述      
* S% `+ r, _: H7 _ 当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名       " P  K( t! A9 C6 ~! A! z1 K
' r' o- }  j) o6 U; P3 Q
?, h                                     名称      
7 j+ |- v" T4 j0 B
" c! J, w8 ~7 F, v svnadmin hotcopy — 制作一个版本库的热备份。              概要       , s/ m2 D- Q' J$ k2 O
/ k5 C4 f) O# ?" s2 x( u$ f. ?* _
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述       ; d+ f3 {, v4 g2 T$ x
这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项       + }* i1 h5 r$ [; f. l- f
. G1 I- y$ k+ p1 X2 s9 Z1 b6 h$ ]5 H
--clean-logs                                     名称       - z7 r# ]6 g9 T  c! \
svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要      
0 e2 R& @* e; {  a+ L
2 R) _$ Q4 Z3 m. C7 bsvnadmin list-dblogs REPOS_PATH              描述       % g* k- e8 R0 ]( {) c, S, u
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称      
0 X, ^9 |' B* X5 Q3 e5 Y* \( z, Z4 Z  z8 V  A7 b. o
svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要       1 \" W7 C. h7 S. P

! d& R, e, Z# j6 h# x0 Nsvnadmin list-unused-dblogs REPOS_PATH              描述       # }4 V5 S1 m  \/ x3 Z
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子       / k1 _. v. Q+ [  M
6 b8 @" ]1 `6 ~4 [/ o3 A% I
删除所有不用的日志文件:       - e6 O$ E- y# ~! O; e
7 q: j2 D. i6 D5 J
$ 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!                                     名称      
8 f( _+ [/ ^5 y  B3 ? svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要      
  A" o3 |% d0 y0 b' h$ S' p' ]! H
svnadmin load REPOS_PATH              描述      
. ~+ f' R1 f+ R: o 从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项      
$ [, s( z# L8 c0 z5 c" K
* Y4 n7 [, I( |--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子       . v  {; b4 q& D5 @
这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):       : H: L7 a! D- P6 ?/ [

* B: @5 B! k- I/ t- g$ 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.…5 r; Q" n# _, e7 f3 j3 N* |
或者你希望加载到一个子目录:       ' l& `- S0 k0 A; |, c. l
  R4 T* @' a, {
$ 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.…                                     名称       ( X+ }% Y  F, B
svnadmin lslocks — 打印所有锁定的描述。              概要      
! E+ r7 R, Z$ U! m( B3 ]" d5 M, ?) [1 {$ J. [/ ]! F* n
svnadmin lslocks REPOS_PATH              描述         f# x& F5 W/ @: c
打印版本库所有锁定的描述。              选项      
- a) d: l9 H5 C  J1 ?4 i$ R4 O+ K4 o$ z/ j1 f  L
无              例子      
" b# h. C8 P( x( x! K- p
9 P2 m$ _+ C8 o1 A3 @ 显示了版本库/svn/repos中一个锁定的文件:       + q: d5 ?2 ~- {8 K
+ [5 ~5 x! @6 }, o$ Y) O6 u, }. H+ `
$ svnadmin lslocks /svn/reposPath: /tree.jpgUUID Token: opaquelocktoken:ab00ddf0-6afb-0310-9cd0-dda813329753Owner: harryCreated: 2005-07-08 17:27:36 -0500 (Fri, 08 Jul 2005)Expires: Comment (1 line):Rework the uppermost branches on the bald cypress in the foreground.                                     名称      
/ }/ s: X9 ^  M! q. I1 o svnadmin lstxns — 打印所有未提交的事物名称。              概要      
$ o$ k# t  V1 i- c
' Z  i* `3 A$ p- Gsvnadmin lstxns REPOS_PATH              描述      
0 M" j7 S% v% n8 U, B2 x 打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子      
' L6 w5 k+ ~% n# @+ j
1 E+ D4 E2 M" s) n. K* b 列出版本库所有突出的事物。       : c* M& h" B- [' k

% t' g9 J9 P2 T0 G$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称      
5 f+ Y% {/ c, L5 a svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
6 X+ f7 R% s  K/ V& h
) x. f' ]/ M( |+ `$ M9 ]1 s4 x, G1 c* @svnadmin recover REPOS_PATH              描述         ^& h5 Y4 E9 {: X2 I& e( K/ H
在你得到的错误说明你需要恢复版本库时运行这个命令。              选项      
% y- y3 i; c# `" G
1 z7 o7 n9 e  l0 @5 B- f0 \2 P" [--wait              例子       0 f) P& J$ P8 T( K! [8 N
恢复挂起的版本库:      
2 b/ ]5 ]! U5 z( O/ x( |
/ Q- J1 b( L/ p0 P1 I9 ~9 b) U) W, B$ 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.
( r5 Y8 m- L! c% H 恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:      
+ ~# q( N5 V/ s" O7 o, [& V" m& ]
  h6 D+ o$ f5 d9 @) x; P* I# N$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$
, T1 W# d0 a4 d" p" Z --wait选项可以导致 svnadmin recover一直等待其它进程断开连接:       9 A9 ], x1 K3 D7 c! q6 w* w9 L

7 B! c3 I6 M; f  ~* I$ svnadmin recover /usr/local/svn/repos --waitWaiting 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.                                     名称       $ P% B5 _' n' c3 V; O
svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要       # X! k( J6 R6 m, R1 {/ R# q4 h$ x

' S0 M# J+ l' u" ~; C, I# d5 X2 i2 D! Vsvnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述       ' j. U3 V$ _# K# V: M) I
从LOCKED_PATH删除没个锁定。              选项      
" P6 W7 ]2 i6 x) j! i- o% P' M: ?2 g5 p# o( \* ^; |( z' w3 U8 G; W8 e
无              例子       & c6 b/ e+ C/ ~0 d: F9 b, Y- d3 n

4 c8 r3 q/ t2 O) h( Q 这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:       : _- I; C6 K* F/ Z" m1 b. \

* y/ Q# i4 I& w" V8 u0 j$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称      
! D, r3 n; ]# I* t2 b' d5 e, C svnadmin rmtxns — 从版本库删除事物。              概要      
0 R' z( z) S2 C* Q$ t: A/ v
3 f& n3 `, a0 C& M- c. O* P. T7 [svnadmin rmtxns REPOS_PATH TXN_NAME...              描述      
# M" F. g. W9 q& G: [7 @ 删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项      
$ H# _9 k, \& E6 c
# x/ H2 U) c, g# ^- [# i3 N- V* E--quiet (-q)              例子      
4 Y: @. x( d$ Y8 F# { 删除命名的事物:      
- c: F/ f; ^& L4 m* X; _# z$ X2 p4 k! |4 B7 T" @1 m+ N% B
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x0 n4 z7 d1 c" l9 J0 s3 O0 i
很幸运, lstxns的输出作为 rmtxns输入工作良好:      
; U4 r( \! S+ w6 b
( j% A' h, f) ]" t$ S( E$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`
7 r$ H% v& I7 Z  ?. a 从版本库删除所有未提交的事务。                                     名称      
& [+ x* ~6 a0 q5 j# X. r+ o, ?# X+ C! C* P6 B
svnadmin setlog — 设置某个修订版本的日志信息。              概要      
8 w" i% b6 B0 D( h4 D
: i4 S' w. T5 Zsvnadmin setlog REPOS_PATH -r REVISION FILE              描述       5 p$ {  B, c' o' D) D; S
设置修订版本REVISION的日志信息为FILE的内容。      
3 r6 M1 N2 h( P' ^8 a/ Z& Q0 F* T* O! f
" Q6 Q) W" p  W' L1 p6 S 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告      
% S- d( X% [' j/ s: \) R  \* R4 [3 S& m2 |3 \
修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      ! o7 F5 B% T" L, a" x- z

* I  v+ q. W5 E2 Y--revision (-r) ARG--bypass-hooks            例子      
- s' z; f5 F2 M  w 设置修订版本19的日志信息为文件msg的内容:      
+ Z  V1 M- o7 a" i$ D( N" f) j
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     
( b) d6 E& x" Y" ]* b7 [ svnadmin verify — 验证版本库保存的数据。          概要     
9 z8 y& ?+ ]3 G: N1 B5 S% y( M% C  M  H$ C( P4 _( B& f1 O
svnadmin verify REPOS_PATH          描述     : U3 t, {- Z! D* i  k9 r
如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子    / B' q1 X% F* `9 z) L: t" ^# V

& @6 k/ C3 Z9 r9 o 检验挂起的版本库:   
+ v/ D8 @$ b1 U) G) U
2 K% d8 k, D8 M" Q$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /1 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2021-1-26 19:22 , Processed in 0.062752 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表