SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 810|回复: 0

[推荐] svnadmin 命令

[复制链接]
发表于 2018-11-22 14:43:22 | 显示全部楼层 |阅读模式
svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见“svnadmin”一节。   
7 }/ Q- F. v' c0 `/ {4 Z5 A
因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        6 l! M# Q5 l9 s' a
$ q) L! U* M: o: g  S" r# j* O
(Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        
  @6 C2 F: N9 d" I
6 L# `' f& L8 V2 e (Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks        
% Z0 \8 N: y$ E! N
; F. w0 H- C/ S 绕过版本库钩子系统。   --clean-logs        $ q4 |2 B/ N; ~8 R
0 R/ d5 Y% [0 D4 ]% x  @/ P
删除不使用的Berkeley DB日志。   --force-uuid        * @: x' o! @) L7 @! u" C( L. m

3 {: c) \, J# ^* f 缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        2 d+ ]5 b8 z2 v& C/ o1 r0 t

$ s" ^, X$ q: T% B. f% J; n 缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        
7 ?* m( y& a! U& U6 r* }. t2 V! m$ i8 H: c
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        
" O0 L! d% J8 ?( _3 x$ J- s% s# V
当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        
% M+ A; t  I  e: r& a5 t: J+ U' ]6 I& J/ b( n$ N2 Q
指定一个操作的修订版本。   --quiet        , ~$ T( l2 N4 a6 [; h: f

9 c, ~- I! U( A. Q' h/ ]- } 不显示通常的过程—只显示错误。   --use-post-commit-hook        
4 l' m0 s  T$ P2 _5 q2 B6 D5 P. |
当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        
9 j) V0 Z" k6 o
8 k& B5 `$ W- ~$ P- F5 M 当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称       1 }3 S0 x- w. s/ o
4 x7 Z( u) H% J) X$ B+ h# K4 S  F
svnadmin create — 创建一个新的空的版本库。              概要      
; S2 Q- G- J3 q, `$ r  N) l( _
& V( h2 @# o2 |: J4 M* z! p& ksvnadmin create REPOS_PATH              描述       6 E! F8 ^, U' G* H9 _3 `: O3 a
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
. W1 x* n2 X: w/ y6 F
5 h, f, t) P2 r2 A4 I/ C) s/ \( q--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子      
- P5 Q: x+ f6 x5 e3 h 创建一个版本库就是这样简单:       . ~& H! M( @. j" `" `" ~
* o& g; L* ~$ l" u2 o! ]$ o; Q+ f3 C$ G
$ svnadmin create /usr/local/svn/repos6 d" {. C' l0 p* B, ?
在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:       ) w9 Q) v/ l! ^8 X3 k0 l: z6 T5 N
, j  ?* |4 f- f1 C8 {9 k% N
$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   : N4 C5 I( R7 S3 I
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称       ' W1 `3 u: p2 V) M5 E3 y) D; q
svnadmin deltify — 修订版本范围的路径的增量变化。              概要      
3 _$ M; t% ~: v# e1 `4 f. _( r/ H: @8 I  w, t/ n0 L
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。       , u. m% r( Z! H' ~# \3 c' K$ J
它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项         e8 E6 N& k1 Z+ M) \% {1 N: U* F7 |
8 L/ n3 L$ |$ V3 c. U
--revision (-r)--quiet                                     名称      
2 h2 m- b* p3 _7 Y1 s+ s svnadmin dump — 将文件系统的内容转储到标准输出。              概要       ; e7 {6 t. o/ X/ i' u/ N* w$ Z0 S- @

  F, {& W) T5 j! B4 @" Psvnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述      
0 _! k7 Q/ q$ v1 s' e 使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。       1 ?8 W9 b  \& m7 q, j* N; |
( r$ k' f9 w, v7 r( }1 o
缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。       # q, ]+ {# d& Y; }; g
/ x$ P) |& g) b9 S
有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。       3 B# o9 I. y  }. [0 b. O! ^7 t

6 B+ x8 L% P# @ 第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项      
0 i5 n1 k5 j2 f3 ]# x. V! l  M) N6 ~% _- J" n4 o# e
--revision (-r)--incremental--quiet--deltas              例子      
* n2 g4 m5 |3 P' y) p) x 转储整个版本库:       " p# o- q% c  M2 t' `  [
- e4 R7 v% f7 n! E7 A: `5 s0 H! y" `, E
$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…
, o/ F. U) y* R& C4 p$ ^+ x, C 从版本库增量转储一个单独的事务:       8 s1 @+ r( a1 ~* L: K4 B7 [

. k# i5 t4 G0 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…                                     名称      
# t! {9 H" F1 G7 Y, C svnadmin help              概要       6 P3 U0 \$ ?; v# K& [/ p
- u  ]( i* `3 b% [% M/ G5 K3 d6 a
svnadmin help [SUBCOMMAND...]              描述      
4 I9 H2 ~$ U  v 当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名       6 ~6 B6 x9 T) X, v! N
# s4 n6 ^; P7 k& f! C/ Y2 n
?, h                                     名称      
! m: V; t/ s' B+ @$ g* r5 R0 i3 Q4 U/ l1 \! `; c7 Z
svnadmin hotcopy — 制作一个版本库的热备份。              概要       ) [; X/ w% V" _
" g& h1 `6 t2 n! e6 \# m0 F5 I
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述       ; E" r5 v$ ^( L1 b( W
这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项      
. z5 F9 _7 R- L& z
% ?* e$ d, B# K--clean-logs                                     名称      
  M* O4 s4 Y: F* `3 E/ N7 p2 v svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要       ( ?% b% M* T  {! J# x/ ^4 D* K
) z6 F$ _$ Y8 C3 f8 J* x
svnadmin list-dblogs REPOS_PATH              描述      
- W% `7 E  j3 c Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称      
" h# \* i2 t' s5 [: d2 O
9 _3 N% w( n5 w; l4 V svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要       4 h) Z( P) |+ }5 V  T* @
" u6 L! V# K$ |$ Z; g$ o3 q
svnadmin list-unused-dblogs REPOS_PATH              描述      
7 h) o. m% \5 d7 Z  f* o Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子      
' c8 z2 R7 u; l8 I: m) ~0 H' p$ O6 B
删除所有不用的日志文件:      
' p3 s$ W. H; B, Q7 f* w
; [6 d" R5 f0 M$ 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!                                     名称       1 t5 F) U7 w$ @# o+ W
svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要       ' k5 h: M9 k2 L! K" j7 |# v

2 Q& g) t8 C5 z  z/ @6 c) n; c2 ksvnadmin load REPOS_PATH              描述      
$ o! U! L# l" K1 C  J' m. K0 G 从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项       % D+ `' ~0 L6 d

0 u& x4 m7 e0 k--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子      
. i0 E7 P0 G3 S/ i7 D 这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):      
7 w- f8 ]/ t' F: _( _4 E1 I* u! `$ q
$ 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 y3 Z; p: t: Z' `
或者你希望加载到一个子目录:       - @: e1 u* M1 B; ]" I
, |1 h- W  W9 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.…                                     名称       ; j( L4 O& k! |; `- e0 s+ B$ P
svnadmin lslocks — 打印所有锁定的描述。              概要       + h# }  r0 i' u8 Q( d1 \1 r

# l% [) Q2 n# o; ]& D' _! Fsvnadmin lslocks REPOS_PATH              描述       $ ^, m) I- x8 L. Y7 v$ u# C
打印版本库所有锁定的描述。              选项       : h( R. Q0 e- [' X
: ]6 k  @" o: J# O: D2 ~0 k3 D" g
无              例子       5 l/ A, M; K" H* J5 W" r

( |% V3 A4 R3 Q; j+ V 显示了版本库/svn/repos中一个锁定的文件:       / `& S' ?2 w4 W
5 H7 S' f, G8 o6 I9 X6 f' W. m
$ 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.                                     名称      
# s7 K* U5 w5 ?& T& j svnadmin lstxns — 打印所有未提交的事物名称。              概要      
" s. Z2 R1 ~  y3 @" @$ s* W$ [! m$ Y0 r! [
7 r7 k* @5 j3 h# h% jsvnadmin lstxns REPOS_PATH              描述      
/ w9 c( A0 L0 o2 z 打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子      
) D7 c% c! V. D
" e/ ^/ M5 G6 W7 m3 \ 列出版本库所有突出的事物。      
. P2 l$ a( U6 y5 C! d" d& d7 q/ ^. F! F) f4 a7 Y# h& T
$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称       5 A- O: {5 d" q3 k# F1 S0 n
svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
/ x& w9 M8 y8 x1 A
/ v6 ^3 K8 n' U' }svnadmin recover REPOS_PATH              描述       & q- K! O; [% p6 x; _
在你得到的错误说明你需要恢复版本库时运行这个命令。              选项       1 T) ]6 d8 q3 e$ X2 K
; ?) Q! _; h; ?. Y: v% Q
--wait              例子      
8 ?+ z7 h" U* p 恢复挂起的版本库:      
! S$ f- e& {# f" ]) R" N: X9 Z& E. I  L9 ^" _
$ 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.
: M) S1 s* _! h& n2 S  o! ]( v 恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:         {- N) E" p3 m9 F, Z3 r
" M2 \, P' h+ `7 o% r
$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$
& ?% r' ]7 t3 Z" }3 j1 E! ? --wait选项可以导致 svnadmin recover一直等待其它进程断开连接:      
% g7 v6 b3 v8 l7 L) }& x. i
/ F# h3 C3 A9 |8 k" @3 g) 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.                                     名称       * f) ?1 `* \) z3 ~
svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要      
4 w) B% y- P8 j! R# H1 P% Z5 y/ Q" A4 N' B& E0 o3 V
svnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述       / L/ Z1 O+ p5 f% Q& s
从LOCKED_PATH删除没个锁定。              选项       7 q. a; A1 ?& z& [% k
9 M5 g0 v1 X# Y
无              例子      
) {) L  j# u9 q4 l$ x, R/ t3 r* d6 {+ P7 ~) B
这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:      
$ e$ o/ w, j" w6 a  I- d9 z- [, g# }1 m3 `  S) e7 X
$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称       7 Y5 u: ?# T1 K3 u8 e( @. l# S9 Z4 Y
svnadmin rmtxns — 从版本库删除事物。              概要      
  |% E/ c8 i/ y* i2 X& Q, W( m# x% E1 n6 Q
svnadmin rmtxns REPOS_PATH TXN_NAME...              描述         w' ]. F7 \; ~8 s
删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项      
* G& k# A4 t  o9 `& W( n2 @! F* y7 V% c* y( \3 [1 [
--quiet (-q)              例子       : {! n. j! Z- W- d
删除命名的事物:      
, l6 ~7 L  E1 }1 l. \& _9 V, O( O9 B! T" P
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x: T9 v# `9 u3 d! o1 a( s5 ^  M
很幸运, lstxns的输出作为 rmtxns输入工作良好:      
9 @2 `8 F, m! I! {- t+ d7 `; I$ Q5 z. T. w9 B( ]
$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`8 |. p7 e( t2 G
从版本库删除所有未提交的事务。                                     名称       3 n7 O$ Z0 ~- {# I% c( m" y

/ S" O& q4 e8 F& s+ A svnadmin setlog — 设置某个修订版本的日志信息。              概要       - I! b1 [2 K5 u7 Z' y- s, {
$ A9 l" t% Y5 ?; Z* u8 k: x
svnadmin setlog REPOS_PATH -r REVISION FILE              描述       - m6 f$ r* Q/ k/ C, j
设置修订版本REVISION的日志信息为FILE的内容。       # F+ z8 ]$ I* m* J/ G

) K+ h: ?! B1 p7 s/ q- A 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告      
# Q- Z. f/ {, t$ H5 c2 n: s4 i( ?0 w
修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      , U  ~% f/ w  Z3 {; E5 X( A
+ N# v6 I! k9 G- [7 b! R
--revision (-r) ARG--bypass-hooks            例子      
5 A2 a. H. x5 O- `+ g  q+ } 设置修订版本19的日志信息为文件msg的内容:      
( k, j* J6 X; }/ i8 u' C5 \$ ]/ C) c! {3 F/ v) ^' k; Q" |. A3 F
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     
( S2 }; `6 ~- E. |) [ svnadmin verify — 验证版本库保存的数据。          概要     
) ]# `$ N- c* D6 v0 C1 v
# S& i1 L/ |* z1 Tsvnadmin verify REPOS_PATH          描述     
4 K: B0 d2 D3 d% ~* J: R 如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子    + L; s- d# @0 d/ Q1 A
  x+ L$ ?( l" T2 K
检验挂起的版本库:   
3 q, p; }' H9 N! E
. N$ C+ w; k$ m  E$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2019-3-19 16:38 , Processed in 0.082467 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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