SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 422|回复: 0

[推荐] svnadmin 命令

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

. |% S: b6 L/ ?' g5 L/ A 因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        
, p2 U/ D, z8 x1 B! g" q+ _
  {/ A8 S% C0 A( k) j# S, t- i (Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        
* d" c3 p% g9 q# x2 }6 `+ B3 n$ ]
5 \3 P0 B0 w! z" g' }' N1 x+ y" ^, Y (Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks        3 m- ?' g1 M6 @3 r& N
# P# L0 e) w7 a! {# h. R! J
绕过版本库钩子系统。   --clean-logs        1 K; F, K" b0 x9 J, J+ P  [- [

0 m0 e  W0 ?- ^" m7 a! _ 删除不使用的Berkeley DB日志。   --force-uuid        
9 z! ]: x& O9 ^: B  L- \
" t* y  j# ]* Q; t6 ^4 G 缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        
( p3 S  t, x3 f3 K: d' B: w/ z8 G) r' J" p3 p
缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        , T% ?( M+ L* f; p$ X# g

$ P: F$ [& j! _' h  v5 q" ?  d 导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        
# a0 n8 p0 t- c3 N% I/ H: O' K: i7 Q# r" r. v" N3 w8 R8 z: l$ q
当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        ' ?, D  U! ?+ M4 z1 M

. i  ^' J8 e" v# W# t. F3 V 指定一个操作的修订版本。   --quiet        
3 H2 V( c. Q. S& L0 L: ^4 q! K
6 k! l$ ~8 Z; x7 F3 t( ~ 不显示通常的过程—只显示错误。   --use-post-commit-hook        : ^; W' ?* n8 U( }/ s7 _* ?

# |5 n( B, U0 `6 c' y 当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        & n3 w& y3 n/ b* i% d

  N  M% x( z) @3 D$ z 当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称       ' Y* e2 y+ z/ Q+ E: Y% T

, Y4 a' f! F5 n% e7 A svnadmin create — 创建一个新的空的版本库。              概要      
6 P+ T5 i, g2 i6 z# P! k3 ^. u  y. L* C) f9 Z2 }
svnadmin create REPOS_PATH              描述       ' z4 \4 \; P+ q/ Z9 m$ J: \
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
$ D; H6 R( l* B8 {7 H3 X' m6 B. V( Z1 j% j8 Q
--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子       $ S5 i5 k, j6 b- M5 U3 L
创建一个版本库就是这样简单:      
0 w! W: t( I4 d' E  B! p9 e- H4 I2 x6 i
$ svnadmin create /usr/local/svn/repos
; B' Q; V6 H# ]. J4 n 在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:      
7 B' M$ h7 K, a% G  N+ _0 L+ P# O
* I. b# h. K& a/ W) a. c$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   + y8 C) S8 X: w3 t0 c
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称      
9 ]6 M% Z" z3 v+ V" {/ H- x svnadmin deltify — 修订版本范围的路径的增量变化。              概要      
8 L5 P; ?; H9 o; R' J  m' X% d3 S7 H- N
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。      
1 d* W- d4 o* P) x 它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项      
# ?4 f4 f* w1 W1 W9 C; k2 p- Q" H
: G( I6 d) g  i. N- c3 v1 v6 ^--revision (-r)--quiet                                     名称       + x& j9 e! Z; {: \* P2 t1 L, H) z8 Q
svnadmin dump — 将文件系统的内容转储到标准输出。              概要      
' D$ A& @( h# m3 v& M5 z- i" a6 t& b0 q9 X$ |8 S1 }) {
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述       6 s7 h* s( I- U6 t  i2 t
使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。       " \" b5 o# ~- U2 b: E
5 V4 ?2 {3 j% O/ S" p
缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。       ) l1 ]; E, a0 b9 k
/ F1 k; c7 E- F/ D5 e! B/ y
有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。       4 l- r4 B# o5 K7 [( R0 K. {

; M8 w8 T) i8 {' i& l9 m$ Q* F 第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项      
) b3 E1 ?0 L/ @" Q% z2 |# T1 _* V$ [  L% b9 e6 H; x
--revision (-r)--incremental--quiet--deltas              例子       " y6 e6 ]) I. X3 I; Q
转储整个版本库:      
! P" U8 g- v8 \  p' V8 Q) D9 F* U
% r) F% _0 Q) Q$ ]7 u5 E& W: r9 W4 ?$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…/ K5 z6 G' P& M
从版本库增量转储一个单独的事务:      
6 P; t" _' E/ B" @& s+ j: Q, R
3 ?5 ]0 v) o3 r$ 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…                                     名称       2 a9 c$ b! u6 P8 \* Q1 r, p
svnadmin help              概要       . N; N, ?; h8 H7 l' S" I5 g9 _; @$ F

$ ?" M& v$ s7 }* R, f$ A/ lsvnadmin help [SUBCOMMAND...]              描述       + ^  B! G7 w- f" b: o
当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名       ! g) E  [8 a' ?, b

! R% s  X6 t* e: J/ F: _ ?, h                                     名称      
3 q. ^/ I: V; a! m# r/ c0 J: k4 I
0 I7 m4 y7 {& ?4 v; M. y: i6 s, q svnadmin hotcopy — 制作一个版本库的热备份。              概要      
9 V  s* o4 H! ?6 J$ _; X+ z2 r4 ~- e! ?. i
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述       ( \" U0 P# Q. {* _
这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项      
1 j6 |0 j. U1 j  p9 n7 _
1 i) a) J: ~- @: |( d--clean-logs                                     名称       4 Y" x% p( Y9 C& g: v
svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要      
# J% s+ Z' P- ?/ A* D* a2 B/ m$ @/ O" y$ C
svnadmin list-dblogs REPOS_PATH              描述       4 o! m* A' ?+ A* r5 p3 W. i
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称      
& Z* S1 D: Q& k# I! k; c3 ?# g: F  w3 V
svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要      
( z& M6 c! Y) {8 t7 W6 P  M& k' F: |- q+ v# R" d
svnadmin list-unused-dblogs REPOS_PATH              描述       9 Y/ ~! I# m2 M0 V( S
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子       5 Q4 H" t3 ]; _
) N7 [- S$ W( c7 |" d
删除所有不用的日志文件:      
- ]8 J1 u, q4 m) X! A7 b
8 @% v" U; J, _7 Y. l/ ^' [$ 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!                                     名称      
2 ]! e; B# b  [5 [; P- Q" w svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要      
6 }) a4 T3 O- p# e+ o  H) w5 b
svnadmin load REPOS_PATH              描述       ) b( T# T3 a1 Q- |- l3 w( t( q
从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项       + F$ e* W- m- G& E! P2 Y" W0 k
1 g! R  v! S; n2 |
--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子       . n+ x' O  m7 s  j* f! T: n
这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):       5 p6 _$ R% X$ D. |7 ]5 z

  `6 K3 Y& A1 ]$ 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.…: b6 o/ @; I" _5 _
或者你希望加载到一个子目录:      
& ?9 ~3 t4 I: n3 c* ^4 ?# E6 H4 `# W9 L0 `5 b% K9 d
$ 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.…                                     名称      
* [1 T! d4 K- |' I svnadmin lslocks — 打印所有锁定的描述。              概要      
( Q# ^" T1 K% S) ?8 i6 w* }& B# e0 [- o8 v" c7 q
svnadmin lslocks REPOS_PATH              描述       8 a$ O, R! R9 `3 q
打印版本库所有锁定的描述。              选项      
+ D) r) l# [' L1 W% U" W; d6 v% A+ b+ n% d+ _' D; x
无              例子       * L0 C+ B; @. L5 N$ n4 v
) p; \3 ~% {7 D7 l% b# O' g( |
显示了版本库/svn/repos中一个锁定的文件:      
6 |+ t  u0 r9 g
( x: ^* g" q! u( |' o$ 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.                                     名称      
  |$ m$ j7 b! B6 U svnadmin lstxns — 打印所有未提交的事物名称。              概要      
1 m- u; v* a9 Y) b4 Y6 S( o5 X' l! u8 U2 ]1 \7 s
svnadmin lstxns REPOS_PATH              描述      
8 N+ K* C( l- ~+ Q  H 打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子       2 p2 }; E0 c% g7 {, K: t. H0 W
. M; J  _% b" ]: \& }( ]" m
列出版本库所有突出的事物。      
( O/ N" h$ `: S$ ^! w! v, d+ M- K' Z
$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称      
) @+ V& P9 _/ q0 @& b. @$ d0 \5 V svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
7 z6 v8 ]  k: [9 k% {1 c: G& Q+ b5 u, t  v- A* C. X6 G: q  ^- i
svnadmin recover REPOS_PATH              描述      
$ f/ \! X& }$ h6 j) C7 h) X 在你得到的错误说明你需要恢复版本库时运行这个命令。              选项      
5 d4 b* z4 Y4 u  Q3 i
. z6 e8 G4 ]$ K# ~( |) P' C--wait              例子       % R* t( x) {4 ?3 K' c
恢复挂起的版本库:       # }: g2 M6 o+ {: K" _" w

% J, {5 n6 y: t8 j" ?4 j$ 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.0 y* R8 N" |0 o
恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:      
) w# A6 T0 T4 R5 W; m) Z
4 T- x7 n: R- A1 D  R$ J+ d$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$6 T, _6 I9 B# g3 M# K
--wait选项可以导致 svnadmin recover一直等待其它进程断开连接:      
/ b  A. ~' b0 O) ]! T" _4 B' y5 V7 ]
$ 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.                                     名称       9 b4 p1 d) |! a; k
svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要       8 U% {& U9 H' {% Q1 m& t( N/ P

9 f4 U3 r" ^* J. H9 s3 Xsvnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述       * W- |0 l* R9 N; F/ ^% S
从LOCKED_PATH删除没个锁定。              选项       ! m. Q+ d- _: H. p7 {  t
6 ^* x& I3 O3 e2 G
无              例子       + }3 o* {( }$ ?# u
: s# n4 p) Z& j* Q* _! \
这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:       ; Y5 a+ `8 n# B4 x# _9 K. e
0 @+ O( f# t- O; v% S9 ?
$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称      
4 B5 O5 Y8 A! N+ G1 @& \" r/ h svnadmin rmtxns — 从版本库删除事物。              概要       + ^" t3 U8 X  V4 x
! Z+ n3 {$ C. {* a# g- l2 x; f: M
svnadmin rmtxns REPOS_PATH TXN_NAME...              描述      
/ w( g+ j' x' [4 R$ ]0 _8 l 删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项      
7 ?0 n) O  z! x7 U$ R4 ~4 O& _1 I' _( K1 _7 v
--quiet (-q)              例子       4 m. b, @2 i0 X5 Y/ J' A0 v
删除命名的事物:       8 {5 ?- t% g- x  h$ H/ u
! F6 R+ I; I! M. O+ ]1 V
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x
( p# l1 x1 @5 ]& m' l: S 很幸运, lstxns的输出作为 rmtxns输入工作良好:      
) M& U  S1 p/ k: o% a
; n  x' G3 J9 C) O/ |! x" w# U& t; o$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`! ~7 u) ]" i& J* Y" S
从版本库删除所有未提交的事务。                                     名称      
2 C7 R& d* Q2 @9 c0 N5 V' J3 ]' s  p# x6 L+ l7 L& Q9 y% H: P1 {6 {
svnadmin setlog — 设置某个修订版本的日志信息。              概要       6 Y5 ]& n' {, _
  T8 l9 S/ t. O/ [2 `! D
svnadmin setlog REPOS_PATH -r REVISION FILE              描述       ) x- C. C2 w8 ^! D: {3 x- {% z
设置修订版本REVISION的日志信息为FILE的内容。      
# @2 N9 O! S3 c
: T' e8 x& |$ b* T  L 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告       ' V- o  y  h# G1 n3 a+ p9 Z

/ r* @+ ?. V* N% q  f8 |# m4 S* y4 z 修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      
% l8 P: c1 k9 L( l) u  x/ k3 }
6 g, \  ?/ v6 ]--revision (-r) ARG--bypass-hooks            例子      # Y) F2 g- C( }- O* i2 K" w& U
设置修订版本19的日志信息为文件msg的内容:      
- l2 ~$ @$ h; F& V3 Y1 b7 k2 d! t8 F$ Y2 N# O- D+ ^
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     * K1 M. @, Q* y+ ]+ N( D
svnadmin verify — 验证版本库保存的数据。          概要     5 s1 d0 B) ~& I9 }$ O
$ Y' p4 X0 z$ \
svnadmin verify REPOS_PATH          描述     
' B+ R8 D$ o* N$ N4 j 如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子   
* ~7 _- r" v# T: S8 _
1 W1 o: m: b. c) O 检验挂起的版本库:   
0 e  f. P% V4 t0 L! h( e
8 w6 f/ O2 ^+ B4 L$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2019-1-16 17:12 , Processed in 0.098272 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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