SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2410|回复: 0

[推荐] svnadmin 命令

[复制链接]
发表于 2018-11-22 14:43:22 | 显示全部楼层 |阅读模式
svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见“svnadmin”一节。   
- o$ U/ F# b! H& Z
因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        ) X# x8 Q! l, F0 |5 ?

3 V% b$ X) C# r1 z2 D% |" R (Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        ( ]# S0 o" X' |0 K8 u0 {) M2 A2 J

# j7 x- a# E3 k! h% y$ l (Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks        
/ x4 `9 z  u  U) J% }# }- X  n3 v1 w" [& H* }" f
绕过版本库钩子系统。   --clean-logs        ( N% a. k2 R5 ~# ~, u: Z
* A# ?, g8 l7 n' X# H- p
删除不使用的Berkeley DB日志。   --force-uuid        
) f# @1 V& I* w0 l+ N' l) l& ?" W5 J
缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        - G$ D8 E( e' R+ h* M
& T. V: B$ g3 l- `* k2 U8 K  S
缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        6 N/ R  m7 `8 J  X
5 g# M6 ]- s4 K5 n6 s: w& G: O
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        ' i& e7 L, P" {" d" ?1 y4 P" a4 x
6 ]) K, ^, h- q0 s
当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        : r, w0 ~1 s( c- b
; e0 Y3 x% e& I
指定一个操作的修订版本。   --quiet        
7 X* _) E5 h2 d- Z; x
: m$ C" w4 o3 o# c0 h3 j 不显示通常的过程—只显示错误。   --use-post-commit-hook        
8 ]! t$ i' o  y! \. ~$ g
3 t3 t9 A9 ]3 B 当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        ( j/ U+ a3 U1 O7 l; d9 r

, r" B8 z9 f" q8 R8 i& } 当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称      
$ p7 x; v3 `/ {
, X9 e4 @- V7 |% T1 v- o. b' g6 v svnadmin create — 创建一个新的空的版本库。              概要      
0 e! C% C* L' F) r6 {' l* l/ l& i; j$ S' @  ~+ T
svnadmin create REPOS_PATH              描述      
, E7 q9 x; \+ _. O$ @ 在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
* M' Q7 o' K- L. _% `
/ a. L2 T' ^' J$ A/ r9 s0 l; V/ L--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子       ' V  F- e" ]+ s
创建一个版本库就是这样简单:      
2 D( Z: A# s  K) i2 |5 ~: I
3 p; w5 N3 T( I1 c3 a$ svnadmin create /usr/local/svn/repos
$ ]7 a: r! p( d0 }& K 在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:      
  E" y( W1 n! h' b: R4 f  a) a0 b+ R( J0 n' c  w0 T# [
$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   * x8 T, p, ?6 O% q( Q
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称      
1 w" C# Y: M/ e3 e svnadmin deltify — 修订版本范围的路径的增量变化。              概要       . b0 I' r  q3 R) M+ |
. ]) E- w" J! a
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。       & t  K' t9 o! B- k
它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项      
+ ^: q! {, H, r# |* m' i
; @1 j2 ]7 V; v) Q--revision (-r)--quiet                                     名称      
7 X& @9 X8 J  l7 p) }$ O' ? svnadmin dump — 将文件系统的内容转储到标准输出。              概要       8 p2 c$ C' S& q3 r( D
6 z/ a2 _/ B& ]. [+ ?& [
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述       1 N. A9 [8 x' N/ l! d' B
使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。       % `  n3 P. w# W0 P

7 R. ]% o6 U8 X9 X  p3 ^/ p" G9 h9 e/ f 缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。       , H4 P* z' Z5 g( w
+ w0 p# h; \# b  P+ k, G) I
有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。       - Z& \4 `8 E+ R* g1 r3 k8 j! a

$ _# o6 ?" g1 X8 [2 l) } 第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项       / I# ?0 V( y1 q/ L4 I6 |% y7 q

7 b; B: E, x' ?--revision (-r)--incremental--quiet--deltas              例子       8 K; R7 n7 y. Z1 {
转储整个版本库:      
/ x! m' {% K2 v4 v2 |  q! J( {3 D3 j* }. @9 m4 M/ G
$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…8 N2 f- k6 [0 J  G
从版本库增量转储一个单独的事务:       / u/ ~) o+ C- y0 v/ N$ U

! b) q( t+ G* C% C& J- h8 A% c" V$ 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…                                     名称      
9 e+ ^  S8 _# l% |# i" t( q! c6 C% Q, f" v svnadmin help              概要      
1 k7 O# {/ `1 k' a& |6 a# v* `% O. T. s" o
svnadmin help [SUBCOMMAND...]              描述       ) e9 R5 }5 ~3 W
当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名      
: S  j7 o& A3 U( b9 T
  q4 g1 V: r  @ ?, h                                     名称      
1 p9 k& D& G! K! R" k
1 `- r$ x; L: Z& M: m2 Z- } svnadmin hotcopy — 制作一个版本库的热备份。              概要       . `; b7 I* U2 d* L: F0 B+ p
* j5 y! j9 _( q0 ?
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述       . W- b3 i1 A. S3 }) v
这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项      
  G0 @2 o) x* B; x  k
& V2 y: s# m' V7 D--clean-logs                                     名称       ) d: e" ]3 {, I6 k
svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要      
- p0 e, Q( C+ @  m. `
* o4 x: F1 y7 r' ^/ U' ^- F+ {svnadmin list-dblogs REPOS_PATH              描述       9 D' ?1 b: \, l! ]3 a5 C( H: R
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称      
  V. z6 k( A* p. ]" g4 I0 V
; W& w. n' f1 D5 J7 V: A: y$ m0 l, E svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要       # C, u: ]) d, g. s3 j" ~4 Y( W- l$ S5 w) }

* g, I4 _  h% l, csvnadmin list-unused-dblogs REPOS_PATH              描述         O# H2 V! O, K/ b
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子       - v' R3 |! [3 D3 |0 ^
4 ]* K& [) J% S# ~( I
删除所有不用的日志文件:       % N; |2 p, S6 H* {; Y; {

& o+ R: h7 F. b3 F% z$ 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!                                     名称       % M0 z) T& `# a
svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要       / |; }4 r3 u7 o3 i
( F% M  M8 ?! S4 ]$ w2 _% ^6 R
svnadmin load REPOS_PATH              描述       + O* x" q$ Z6 V: g9 z. v$ D
从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项       & [- U* s6 K2 f

" ]( @3 H3 a, ?' d3 ^+ L--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子       8 {9 h% e* ~& R
这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):      
' j' z. n7 C9 ]; o* d: [( ?
7 p) c4 r4 D* X) M9 W0 v9 \$ 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.…
' E/ q- _" X' w" Q% Q1 V 或者你希望加载到一个子目录:      
1 ^5 u6 t% I  n5 R4 [+ y% k! {% n( i- f4 W" G
$ 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.…                                     名称       7 A0 m# Y/ {9 `, n: J
svnadmin lslocks — 打印所有锁定的描述。              概要       : A: i. e, x1 K# E' H# C
1 a& l/ u8 _1 P% m# w; ^/ K8 N
svnadmin lslocks REPOS_PATH              描述      
  z$ m! k, n) l9 f! S! Z( F/ T 打印版本库所有锁定的描述。              选项       + B' [2 o* y9 a1 {8 b

5 V( I" i) X. J. U1 l 无              例子      
# [+ Z+ Q' N' b1 E- b: M& X% M3 m2 {- V7 ?8 E2 [1 m- ~
显示了版本库/svn/repos中一个锁定的文件:      
7 i8 H' X7 ^8 ^) [6 F( o% i. m0 U8 J1 L2 c; u  L* x0 g1 ?
$ 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.                                     名称      
& S3 r3 x; Y: k svnadmin lstxns — 打印所有未提交的事物名称。              概要      
5 \, `  Y/ S1 d' y# O" L8 ~" O
4 l; }7 E) X' e+ c( ]$ E/ Esvnadmin lstxns REPOS_PATH              描述      
  g+ T+ c. F1 h* n 打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子      
) [! |% I) n( b8 J
, f2 c* e* `9 K% Y( z4 s" I4 B 列出版本库所有突出的事物。       - v; E' G! [/ w1 Y* u9 @

! b2 n1 ]; I8 |# t. D$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称       7 d3 c( Y, b, [8 q
svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
, T2 w: F' g+ K5 i1 w4 w
4 i7 e7 ?" B$ G% Gsvnadmin recover REPOS_PATH              描述       4 p7 y  H7 S& j% p8 a
在你得到的错误说明你需要恢复版本库时运行这个命令。              选项      
4 k; [6 O( `$ m9 {6 i" r" X/ W/ |3 f- \  n5 J  g
--wait              例子      
) W* S' X8 B* t: S/ l8 X+ p 恢复挂起的版本库:      
# }% m0 ^% b! I0 x! K! o, I
- o8 F+ p- K* a1 [  M9 t$ 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.! n3 T4 Q$ O' V! d* S' l
恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:       ( c: U! C9 q* h2 f" C8 |
* \- B2 L# ]0 Y' H7 u9 p* C! I, ?
$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$7 n$ b' j- {' b& a: V$ q7 v
--wait选项可以导致 svnadmin recover一直等待其它进程断开连接:      
' z& y4 u, N( Q
* }# G8 Q: i0 z' j$ 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.                                     名称       . S# k* C) @; N- s* H/ M
svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要       / Q& e  Z* p1 t* p
/ m, j$ G2 s1 R  E: {4 K/ Y" R" p; X
svnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述       6 ^  Q' f2 c% t5 _& B4 }/ m  S9 m" z
从LOCKED_PATH删除没个锁定。              选项       $ k' P- q# G8 d: C' c, L2 g/ g
6 |6 x' E9 a$ o- o  M( B
无              例子       8 w& e  d! H7 J9 m$ v
4 R! c, }0 R6 C( [
这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:      
. c8 }/ I$ m; |2 }* s) C& Y& w9 R3 Q
3 F: ]6 o; m' _4 h$ ]$ H: b$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称       9 b( X3 V% q. Z# H
svnadmin rmtxns — 从版本库删除事物。              概要      
( y0 w6 H( h% L- b1 i; H* a; W2 T
6 y( h7 M2 y6 [1 x& d8 Jsvnadmin rmtxns REPOS_PATH TXN_NAME...              描述         A! e6 |8 Q. A2 L! J
删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项       2 G* W4 W4 [, p! W( F
% u  Q( V5 F* s- H4 }
--quiet (-q)              例子       0 \! r+ n3 p$ ]& ~
删除命名的事物:      
' {" W% B9 m+ y: j9 }7 u2 X" ~2 X  ~$ |' `/ {6 a
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x
  F5 n8 T) q; V3 w) ^& |$ L 很幸运, lstxns的输出作为 rmtxns输入工作良好:      
) J) U% q6 F" f. ^# W( ^  B
0 y, P5 E, \6 w$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`- e" J$ l' [4 ~5 ^/ A# {2 d
从版本库删除所有未提交的事务。                                     名称      
- i2 _" L, d7 B# c  n
- }9 b& K- Z. P; _0 [& |" T svnadmin setlog — 设置某个修订版本的日志信息。              概要       # }; f" A$ R- O% R6 S

3 U" @  x' E+ D6 ]7 z0 t; isvnadmin setlog REPOS_PATH -r REVISION FILE              描述      
: B5 T. d1 H0 C/ h 设置修订版本REVISION的日志信息为FILE的内容。       ' A# i8 y7 G8 I

1 v5 v" Q, f9 V$ b# F$ n+ c: p 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告       - P- [4 D1 w# e; G0 I
7 J% X6 j# z+ z* Y) L* q% y; O
修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      6 Y- L7 G* N: |4 Y4 x7 [& `* Y, p
/ T1 l7 c& y# b; }" S6 K
--revision (-r) ARG--bypass-hooks            例子      ( b4 a7 d  V  o. s$ x& J. z
设置修订版本19的日志信息为文件msg的内容:      
/ F& o3 T' \: w* o4 ?; N* A* T+ `  O0 e! Z% u7 O. ?. i  k( j
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     # ^9 V9 R6 I1 H% W4 F
svnadmin verify — 验证版本库保存的数据。          概要     
% |7 S$ q/ z' J5 O; r7 d4 c, o: W, ~- l9 C6 E$ ^8 O4 v1 f+ a
svnadmin verify REPOS_PATH          描述     
/ p2 l, }, n$ r+ j% v1 L 如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子    " ~- {* i) t4 {& R
& {; b0 C2 M( \/ I
检验挂起的版本库:   
: N3 E# c) d) ]& j# h# N& C$ d" ^1 W. R* i
$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /1 下一条

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

GMT+8, 2020-12-2 01:26 , Processed in 0.096192 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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