SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2565|回复: 0

[推荐] svnadmin 命令

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

& s3 G1 Y: y; \  ^ 因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        9 }1 u0 O- @4 {, j( \! q  t
* e* q' T- r- F% r" r3 n
(Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        
( J( j; `6 p  K, N7 b
& G$ C; i( a% s" o# K (Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks        - n* `0 L% c# e

( P. T$ s# r. b; C! Y9 [6 m7 S 绕过版本库钩子系统。   --clean-logs        
5 D2 S! ?' K$ d! m  O+ n7 E
7 G7 n8 R# X4 r4 I; Y' \ 删除不使用的Berkeley DB日志。   --force-uuid        
& T! {; L! k9 Q/ E( C
1 W# |. y& D! a( t  \+ h 缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        0 m) v0 o& T  W% @( C( Z
; I9 e$ O( {# L4 q3 K) o$ F
缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        # `+ r2 j0 O  c" Z4 p

; m) u% P% ^0 L 导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        
$ w  v4 V& F( i* N6 h8 w  N
4 e; R7 L2 w2 ^% I5 R, ?& _ 当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        
0 l1 J7 H2 O# ]5 R' Z( I. f+ j, j, ~; t/ s
指定一个操作的修订版本。   --quiet        
! \+ O" b, f5 R1 r$ b, G0 d/ {) b% Q+ J5 m8 {$ O+ Z5 M
不显示通常的过程—只显示错误。   --use-post-commit-hook        1 h2 S$ p) z7 Z- Y

5 H: u0 z# \- W, j  b 当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        
. Z$ x8 H, y7 Y4 y. J+ d9 M; D+ H3 h- f' K2 D" I* m  l
当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称       . C' k( p4 H# l. p7 C7 I5 L
7 [9 f2 p  p- i/ V) s; t6 R
svnadmin create — 创建一个新的空的版本库。              概要       & A% F% v6 A/ H# c# Q+ t
% X# m8 H: [7 K  F
svnadmin create REPOS_PATH              描述       , [6 X) t" r/ x: j
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
5 T0 a* `8 G, u% w
) Y( Z8 i% D9 m% ?. J8 g% i0 c& @--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子       - ]5 z# E. h) f1 P; U& {
创建一个版本库就是这样简单:       : i; R1 {) ~( r" h' t
# L% g& K, H  y. l8 [6 c+ Y
$ svnadmin create /usr/local/svn/repos8 C' s* L& _+ F2 e4 E+ l6 p1 ^) Q; Q
在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:       9 P$ t2 C% y5 M, |# L3 B! o* n& W

" b  R3 @) u: X8 N; i' K# w! V: H$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   ) }0 X+ [, O7 y, q  u3 r
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称      
. g. X! h" z; U" Q' M8 P svnadmin deltify — 修订版本范围的路径的增量变化。              概要      
, e$ c0 ]0 |- J9 D! p& N- W# F6 H3 ?. k- @. w( |) H
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。      
) L7 w+ F0 C% r) f* w9 @9 k 它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项       0 o! W6 `: t0 a" {/ e: E  Q
/ G& ?8 y' W4 l/ L- }) b
--revision (-r)--quiet                                     名称      
1 R( ~( j- D& C. d' |4 m5 j svnadmin dump — 将文件系统的内容转储到标准输出。              概要      
' T( u* y4 d  Z- x+ e# h  l% j0 z% z8 Q, M( H, O- S+ e
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述       * Q+ g% N6 w& Z. H
使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。       * c3 ^& E3 |& S! [! ^+ X
1 u6 \. k4 [- s6 P9 d0 Y
缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。      
+ e& k$ l2 Z0 O0 E2 C  R+ {6 l4 X0 g0 d- ?: b; u9 R
有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。       / `, X' e, {+ Z! Q+ i

9 x: D: [7 O3 s8 V/ H& v; Y1 _ 第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项       ' S9 u- l8 R9 I5 ^. \  H# f

( `2 k$ |  p$ A( B2 a3 ^--revision (-r)--incremental--quiet--deltas              例子      
1 x& H! ?1 Q4 e0 \7 ~ 转储整个版本库:      
+ D, D: C4 g& b( p( L4 ]
9 }: H; K8 O2 ]1 J: i! h- T: b1 f$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…* n: U" ]/ k7 I+ }
从版本库增量转储一个单独的事务:      
8 f' s2 z. G# F9 n5 z( t) R$ B6 d5 H. a; |9 v5 S
$ 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…                                     名称      
8 _" [8 p, f( `: Q0 U svnadmin help              概要       1 p$ z. p: ?) x# H) R5 G

: a+ u: t/ ~9 e' U2 A6 Jsvnadmin help [SUBCOMMAND...]              描述       ! [( j# e9 A6 @4 {
当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名      
8 }" p+ A* T3 m0 `' L5 n
$ L7 J4 N( k2 f. \ ?, h                                     名称       7 \& [' R9 f9 u: z, ~
1 `/ h9 p% I8 E0 h
svnadmin hotcopy — 制作一个版本库的热备份。              概要       / @% ^9 q* I( p5 _
  H; o1 x  w0 j
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述      
& B; u+ E0 r1 A- u4 r) g 这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项      
* \) `7 G, {- T2 [+ F5 t' G2 T9 s: a
--clean-logs                                     名称      
  N9 }7 }1 H3 i& D8 Q svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要       5 t& r0 T8 d9 m
( T' o9 @6 r! R
svnadmin list-dblogs REPOS_PATH              描述       * q: H' x2 o- s9 u7 g, L/ H! q
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称      
' z4 D5 j' Z) t1 k6 R, R, }) s
0 @. Q: Y9 P& U# } svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要      
, r- x( C7 u" d4 Z1 f, {5 Q! j
" E/ \( H, x- d+ _svnadmin list-unused-dblogs REPOS_PATH              描述      
9 j" D5 U/ `3 N" V Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子      
+ ?, H/ k7 u+ `
: P, Y$ ?" N. {6 y( ~8 g7 I 删除所有不用的日志文件:      
8 A1 {: P, w2 u% M* ~' j/ n2 t4 Y8 F- n6 K' ~  A/ v9 j5 V
$ 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!                                     名称      
3 Z! I3 t- G* [1 [, D svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要      
9 C6 W$ @( v; b* ]
' c5 N, K# W0 }6 o3 b: ~$ k& ]svnadmin load REPOS_PATH              描述       4 |2 V- J! p( a7 n1 ~3 i
从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项      
- f8 E6 E7 Y3 v% [; h$ [- Q  C1 n* q+ `+ Z/ T3 x; s, ^. H
--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子      
' n& \; d( A6 v) H 这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):       4 o% o4 J  d2 d  Y; ~8 K: c

& V, e' X# q  J$ 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.…+ G/ v# X" x% V- l9 N% n& E% e
或者你希望加载到一个子目录:      
: q- i2 u. E9 L8 n3 \8 u3 |2 E4 I9 ]( ~2 r1 H0 V
$ 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.…                                     名称       9 x2 x; x: g, p7 {# z2 Y1 O9 h. G
svnadmin lslocks — 打印所有锁定的描述。              概要       + h* n. T: L3 B0 A* |$ M  V

( m* d* c% y0 Csvnadmin lslocks REPOS_PATH              描述       . e# i; H3 `% z; k
打印版本库所有锁定的描述。              选项      
0 M8 x8 p2 _' V/ r+ M! }$ B3 I3 X% V: H! F- E) {( d  h
无              例子      
5 F6 X3 ]& [/ C. w' x- w
1 R3 }$ q# D0 W! t$ e7 H" v0 u 显示了版本库/svn/repos中一个锁定的文件:      
$ ]8 u6 ^, ]) M* e
# n7 O% r$ b; b/ u4 }0 B- H  O$ 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.                                     名称      
. Z/ ]& q5 z2 m) A% t! A* J3 c' ] svnadmin lstxns — 打印所有未提交的事物名称。              概要       . J9 l0 E" t  P

, T/ \' |& N3 Q. Osvnadmin lstxns REPOS_PATH              描述      
: r0 k+ A, s: M; V 打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子      
6 u$ {* }  @( @, M, K0 M! z2 ]2 H$ I& f" K) Y) s7 n: d) {
列出版本库所有突出的事物。      
& R0 B7 d' m. z) T
( H! i$ L7 i: `8 Y$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称       4 A% S9 a4 G2 }$ J  H3 P
svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
  ~4 P% A( G, U
& s8 _$ ^/ p" s- l2 [& [4 {svnadmin recover REPOS_PATH              描述       ! w8 T3 T9 T( o, K5 r
在你得到的错误说明你需要恢复版本库时运行这个命令。              选项       : C0 [1 t! k0 k. p! P- G

, C$ C# w3 g6 M: _% X* F--wait              例子      
, R# y5 Y# F: i2 ]4 R8 B: E 恢复挂起的版本库:       * Y! D: C' Q1 |3 ~9 ^  `) |1 ~5 ~4 X
  l0 l9 r, b2 h
$ 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.* n% C/ e% ~' z8 Z
恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:      
" b7 i/ C3 |6 _& v- t7 n! O
0 B& y; R& `% J# j$ Y$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$
* v# ?" r9 F( V6 } --wait选项可以导致 svnadmin recover一直等待其它进程断开连接:      
0 `& B8 |# d. U4 t3 F3 v# g/ y+ f, L
/ C6 ?" Y( }7 ]% D, B# u; r2 b$ 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.                                     名称      
0 _. r$ G. B* n, ^: V/ k svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要      
. `, G+ k- m6 ]. w: _4 W& S& h- w
svnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述         o: h2 N( d, e% F. F& ]; \) k/ h
从LOCKED_PATH删除没个锁定。              选项      
/ _" A' S2 i0 W- A( C2 V/ |& E; Q; M: L2 D- u
无              例子       & U0 ]& ?6 t6 P- N# e) X) V
9 q2 c) D; t& a8 i  m
这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:       / Z; @9 S8 r; K: w9 |
$ x' F8 T+ B: Q7 `+ v
$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称       & b) K+ a* f: G& w6 q9 M
svnadmin rmtxns — 从版本库删除事物。              概要      
& F$ L4 f* K$ |
+ i/ ]2 @6 t$ a( |svnadmin rmtxns REPOS_PATH TXN_NAME...              描述      
+ l& K- N8 m2 }" e; J 删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项       # }4 B& ]1 W$ s% x

0 K) H8 m# d$ u; e, }3 c# a--quiet (-q)              例子      
; u  u- w) ~( {3 p2 ~- e' C 删除命名的事物:       2 [4 S" O" G% u* d# _' l+ ?
# @* X, r7 b6 r/ a+ N* m+ v
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x
8 X. Q  _3 l( f. A2 z 很幸运, lstxns的输出作为 rmtxns输入工作良好:      
9 N% f+ `' Y1 ^# k* g9 p7 j: u! s' e  y0 b
$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`7 \& \$ y& B: _
从版本库删除所有未提交的事务。                                     名称      
& c8 C- |  K) Q0 e+ M$ r: I" R: E) l2 C: A* i- w/ \. C
svnadmin setlog — 设置某个修订版本的日志信息。              概要       & B, _' T* c: v6 X' S
( t, S1 R3 f  b* k5 z
svnadmin setlog REPOS_PATH -r REVISION FILE              描述       6 m6 e8 ?, T2 R& g
设置修订版本REVISION的日志信息为FILE的内容。      
) k0 ?8 D3 w- H
! F2 a6 m8 a' b* f* L 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告      
5 _( q, U3 k7 a0 H) ]* K% L
; x+ E# }/ ]% ]* g4 [$ Y 修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      ) t9 \0 F" o, ?/ C+ Y7 y6 d

! x$ p# B; _7 n3 ~0 R--revision (-r) ARG--bypass-hooks            例子      
: `7 }5 [3 a8 ~* [ 设置修订版本19的日志信息为文件msg的内容:        b% S6 R2 j8 _/ |! q
: s9 k' Q7 b+ r* i8 N1 ^3 D
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     ( x* a- O! K# C" k0 a# Y5 Z
svnadmin verify — 验证版本库保存的数据。          概要     
9 u4 T, N5 H- Y1 m) ~: B4 o$ R* [# C) S/ _# y+ p, P" e) a
svnadmin verify REPOS_PATH          描述     6 A7 `3 Y2 o8 U/ q5 Z
如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子    2 D: s9 Y; ^- L0 q( G: |8 f9 D
: E$ L* Z3 i% D: v& o' x& p4 _
检验挂起的版本库:   
" V0 s2 ]4 v+ H
( E  L" q5 h, T  Z. A" b" [1 p3 r$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /1 下一条

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

GMT+8, 2021-1-26 17:32 , Processed in 0.062369 second(s), 9 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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