SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1135|回复: 0

[推荐] svnadmin 命令

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

6 {- K8 D9 s: N1 S" g 因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。                svnadmin Switches                   --bdb-log-keep        
0 j' k6 ^8 f/ ]3 a6 ~$ u7 T( A! D0 [. u3 F5 }
(Berkeley DB特定)关闭数据库日志自动日志删除功能。   --bdb-txn-nosync        % ]3 p1 w8 T- @: G% F* W2 c2 j
$ Y! V8 d: {) i
(Berkeley DB特定)当提交数据库事务时关闭fsync。   --bypass-hooks          i$ y7 H, f3 F2 F+ {
, E4 ]6 g2 B% ]
绕过版本库钩子系统。   --clean-logs        7 t( O3 M( I' e% f; B% _
( L" }+ ?" C0 t& b+ f
删除不使用的Berkeley DB日志。   --force-uuid        . Y+ S4 A5 x2 ?6 O) e
/ ?' Z4 _  [6 e9 S7 H
缺省情况下,当版本库加载已经包含修订版本的数据时 svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。   --ignore-uuid        
8 U0 z! z, @& Y3 A( n# M: @3 h) l0 L/ b# _
缺省情况下,当加载空版本库时, svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。   --incremental        
  j- T9 [, b" o5 D) f+ V5 W, D" @& I/ O
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。   --parent-dir DIR        , q6 l' o$ a/ W* I- q& [/ l3 B# z

1 E! r2 z) P8 q; q( ^+ B  n 当加载一个转储文件时,根路径为DIR而不是/。   --revision (-r) ARG        4 }- G2 A/ C9 Y" V- V. v# K) v

* }* U3 p& A9 o% a: Z) { 指定一个操作的修订版本。   --quiet        1 f0 t0 c: i7 ?

9 b' T& K, H7 a  \3 h7 |0 [ 不显示通常的过程—只显示错误。   --use-post-commit-hook        9 l6 A; D" q4 S, g

9 [3 @/ F) e% k' q6 Z% V& q$ S8 m 当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。   --use-pre-commit-hook        
6 G- [. G% A4 s  ]) I: @
- a1 ]7 w  `7 J" {0 z4 l6 j 当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。                           svnadmin Subcommands                        名称       3 E( D, C2 K$ w. m
) @2 o! p1 y1 Q5 t# S7 ?- @
svnadmin create — 创建一个新的空的版本库。              概要      
! Z8 S) C- L( ?. q7 }3 k
& T& r9 H5 t$ u( u. \* Csvnadmin create REPOS_PATH              描述         ]6 q5 f6 V+ J1 V5 ^; x
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 [ 51]对于Subversion 1.2, svnadmin缺省使用fsfs文件系统后端创建版本库。              选项      
. |- L; d0 @  ?. t
6 c; p8 Z7 M0 A5 z) @/ f9 w--bdb-txn-nosync--bdb-log-keep--config-dir DIR--fs-type TYPE              例子      
& H* }# @1 s! f$ r  k% @ 创建一个版本库就是这样简单:      
( h  Z0 {7 Y# \1 d. H/ o1 m6 `5 b
8 ~, Z* P) s# `$ svnadmin create /usr/local/svn/repos
/ {4 B+ O: s7 A* N 在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:       4 c0 N' p8 M6 o

: r" I* ^) W/ x* \$ svnadmin create /usr/local/svn/repos --fs-type fsfs                   + T) b2 X2 d7 u
  [ 51] 记住 svnadmin只工作在本地 路径,而不是 URL。                                           名称       9 j. z  A" ^0 n. N1 ?
svnadmin deltify — 修订版本范围的路径的增量变化。              概要       2 {2 U) e3 i% p/ i+ h( ?
! r: p" Z' a- [: o
svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH              描述 svnadmin deltify因为历史原因之存在于1.0.x,这个命令已经废弃,不再需要。      
- x4 x8 f9 z9 G% S  Q0 ]0 ~) C 它开始于当Subversion提供了管理员控制版本库压缩策略的能力,结果是复杂工作得到了 非常小的收益,所以这个“ 特性”被废弃了。              选项      
" s( C1 D" y* X1 a6 W; J; {/ f) m" H8 v6 S4 }) `; e4 P2 ^" D
--revision (-r)--quiet                                     名称      
* l2 W/ {/ k% Z# h2 t- R svnadmin dump — 将文件系统的内容转储到标准输出。              概要       # e0 S) J2 T4 d
  j; G3 b0 ~/ J) H. C
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]              描述       8 o- y6 O  I6 t9 e6 ]/ ?
使用“ dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树,通常的用法见 “版本库的移植”一节。      
: Z& z% J; G7 ~8 S3 K3 i$ z9 r. g$ i* o7 [; b/ {$ w3 U0 g' F3 h
缺 省情况下,Subversion的转储流包含了一个包括所有文件和目录的单独修订版本(请求的修订版本范围的第一个),后面是其它的只包含本修订所修改的 文件和目录的修订版本(请求范围的其它版本)。对于修改的文件,转储文件包括所有的内容和属性,对于目录,包括所有的属性。      
! Z& x; H% x" L/ e5 `  e7 f; g7 ?
6 r6 F3 X- i1 {7 V) e2 ?$ @6 ? 有一对有用的选项可以改变转储文件产生的方式,第一个是--incremental,使得第一个修订版本只显示其修改的文件和目录,而不是整个目录树,就像转储文件中其它的修订版本。这对产生一个准备导入到已经有数据的版本库时非常有用。      
" a7 X* k4 g. Z) b0 o1 F
, Q0 W1 ~$ h. ]$ Z2 t 第二个有用的选项是--deltas,这个选项导致 svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了 svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用 svndumpfilter操作,也不如非增量文件容易被如 gzip和 bzip2等第三方工具压缩。              选项       - c8 Z! d! u# ?! K! a" i
$ v0 K: M9 b0 t5 G9 i
--revision (-r)--incremental--quiet--deltas              例子       : w, X  d, e3 f) T: |, ]8 B
转储整个版本库:      
8 W& m0 z' k3 T/ o5 ?1 \( P0 m4 i8 r# [
$ svnadmin dump /usr/local/svn/reposSVN-fs-dump-format-version: 1Revision-number: 0* Dumped revision 0.Prop-content-length: 56Content-length: 56…& u6 p- b( t+ H9 ~
从版本库增量转储一个单独的事务:      
/ m/ o$ N" V) l+ Z  f$ j& t2 I  R% Q/ X* z% X, ~
$ 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…                                     名称      
% ?, G6 o, S: K6 G svnadmin help              概要      
" e. O1 J  V. C/ I+ t) P" @
) U; X# X$ S  X) Q' p5 Tsvnadmin help [SUBCOMMAND...]              描述       ) y: b) f* Z7 R/ X) L/ Q
当你困于一个没有网络连接和本书的沙漠岛屿时,这个子命令非常有用。              别名       - s) P8 B, U% H2 v$ ?

! b/ }6 p4 q; H7 I% j# e) n# |1 p ?, h                                     名称       ! z' O5 c! `! o1 L# q

8 m: U. m* h9 X svnadmin hotcopy — 制作一个版本库的热备份。              概要      
7 C5 e! \! g$ n# H5 K
& W# L+ L0 u8 `# Q0 G: d* ksvnadmin hotcopy REPOS_PATH NEW_REPOS_PATH              描述       & P% Z% I# l0 i" |
这个子命令会制作一个版本库的完全“ 热”拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递--clean-logs选项, svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。              选项       ! P5 s5 v+ y0 Z/ [- W

  @" U2 K, e2 e0 E4 y--clean-logs                                     名称      
8 M$ Q! |6 {- w1 S; F: W svnadmin list-dblogs — 询问Berkeley DB在给定的Subversion版本库有哪些日志文件存在(只有在版本库使用bdb作为后端时使用)。              概要      
1 y9 l8 k4 _* V9 F
7 q1 |/ }2 m  Q% nsvnadmin list-dblogs REPOS_PATH              描述      
( w& ^3 \* P  t0 D' x& ` Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。                                     名称       # Q; G- I. v3 V1 x

- }, {% X% w3 s0 `/ h svnadmin list-unused-dblogs — 询问Berkeley DB哪些日志文件可以安全的删除(只有在版本库使用bdb作为后端时使用)。              概要      
% n- I% V( p4 M2 I- l) ~! z. a7 n
- ~& t7 U* u, A/ f# x7 y7 _svnadmin list-unused-dblogs REPOS_PATH              描述       0 F! q! Y$ N. T' c& m& Y2 |
Berkeley DB创建了记录所有版本库修改的日志,允许我们在面对大灾难时恢复。除非你开启了DB_LOG_AUTOREMOVE,否则日志文件会累积,尽管大多数是不再使用,可以从磁盘删除得到空间。详情见 “管理磁盘空间”一节。              例子       " l4 J, \$ X% `0 ~. g, K* Z0 S% y: |/ j' V
' b3 `, j) P  `+ v# ~% b2 P1 b
删除所有不用的日志文件:      
  g: p  ?1 H$ J4 ~! m) V/ R' j1 f# v, N: Q" f
$ 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!                                     名称      
  i: }% h/ G9 \6 x svnadmin load — 从标准输出读取“ 转储文件”格式流。              概要       9 Z6 B$ v2 {9 R8 v

/ J% n8 g. n  W8 Y# a% N& Usvnadmin load REPOS_PATH              描述      
+ ]1 V1 O3 R9 f 从标准输出读取“ 转储文件”格式流,提交新的修订版本到版本库文件系统,发送进展反馈到标准输出。              选项       / N3 M0 S+ {4 s( }
' b) Z" E! n5 v( w* y
--quiet (-q)--ignore-uuid--force-uuid--use-pre-commit-hook--use-post-commit-hook--parent-dir              例子      
0 X5 g8 y5 T, c" a/ T  i 这里显示了加载一个备份文件到版本库(当然,使用 svnadmin dump):      
8 y! ~1 q  i8 C+ I8 x9 d5 [- v+ |$ G7 k( N; W7 N
$ 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.…
: [( K0 u$ F7 T- _ 或者你希望加载到一个子目录:       6 k  N  g2 @( U
% x, m( v2 Q. [/ k# X2 L
$ 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.…                                     名称      
2 e" T# H( p1 c3 [4 S# H7 c svnadmin lslocks — 打印所有锁定的描述。              概要      
  Q# R/ r) t% ^$ F1 |/ x- ?. q7 Q. O+ R& Y3 w$ a: v5 v
svnadmin lslocks REPOS_PATH              描述       & j0 ^+ P& [, Z6 l6 V/ i
打印版本库所有锁定的描述。              选项       $ C+ v$ P7 T3 ~. |) J5 q/ a# |* G7 U

' ?+ v( j7 L& D$ I; C# [ 无              例子       & H* o5 i) U) z' w9 b8 Q
" ]+ o- m  a- q% l" ~: l$ E
显示了版本库/svn/repos中一个锁定的文件:      
' M* ]4 e2 ~0 G. C* z% n
. C; h+ E$ P1 w( j5 ^& t$ 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.                                     名称      
& A7 H) s, f7 y& K% r0 Y) t+ m svnadmin lstxns — 打印所有未提交的事物名称。              概要       3 Z& i$ x( `7 G* q8 g  l
2 z8 s4 c5 H6 Q
svnadmin lstxns REPOS_PATH              描述       ( J9 F0 W( x* N6 `3 Q
打印所有未提交的事物名称。关于未提交事物是怎样创建和如何使用的信息见 “版本库清理”一节。              例子      
; {0 E4 [$ m+ [% O7 Z0 F: I' c; I' ]2 u: @5 Q7 {" Q
列出版本库所有突出的事物。       " B! t+ O, H; R4 a

1 _0 {" X6 G6 K3 }& T$ svnadmin lstxns /usr/local/svn/repos/ 1w1x                                     名称      
1 @- m9 ~5 D, A4 G svnadmin recover — 将版本库数据库恢复到稳定状态(只有在版本库使用bdb作为后端时使用),此外,如果repos/conf/passwd不存在,它会创建一个默认的密码文件。              概要      
- g; G3 G0 k% x1 D' k' A- Z' R/ P
: \# i$ [, R3 I( C. r( m) c  g7 ssvnadmin recover REPOS_PATH              描述       + K3 L7 Y4 U! v9 R' H
在你得到的错误说明你需要恢复版本库时运行这个命令。              选项      
, I+ @0 C7 J8 F/ ^2 O6 w* K; [. ?! o' `* D" K* o% j" ]. D
--wait              例子      
; _3 {2 k$ j: U" [ 恢复挂起的版本库:      
/ s9 |. I* \  g
/ V( ^( L8 T. a. _$ 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.) U: p6 _. D, |6 v, I/ T0 @
恢复数据库需要一个版本库的独占锁(这是一个“ 数据库锁”;见 “ 锁定”的三种含义),如果另一个进程访问版本库, svnadmin recover会出错:       4 {: T! Z5 U6 _" G2 F8 F9 c# }
" t. L7 g4 h+ \
$ svnadmin recover /usr/local/svn/repossvn: Failed to get exclusive repository access; perhaps another processsuch as httpd, svnserve or svn has it open?$
$ V5 s! X- h/ M, h! U' f5 _6 ~# E( p' f --wait选项可以导致 svnadmin recover一直等待其它进程断开连接:       # d0 F/ Z- J; [. Q& Z. }5 M

- Z. \- @0 O- H. S+ }( R$ 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.                                     名称      
* c- z) X: p" p7 u svnadmin rmlocks — 无条件的删除版本库的一个或多个锁定。              概要       4 k7 y! f  g) ^1 f) X2 @$ e

+ g* M6 h' C; a$ D! Osvnadmin rmlocks REPOS_PATH LOCKED_PATH...              描述      
6 r% p' U( v0 K6 A: c3 p% q 从LOCKED_PATH删除没个锁定。              选项      
& s  m0 ~' m) j1 H! F
: l7 `' m9 Y' U' \* o! f 无              例子       ' ?1 @1 |/ _6 p7 X7 {

4 Q* M' x, C! L" [0 g6 ^1 m 这删除了版本库/svn/repos里tree.jpg和house.jpg文件上的锁定:       0 T( S/ r& c& U( x
, I  Q1 R3 o0 M. Y
$ svnadmin rmlocks /svn/repos tree.jpg house.jpgRemoved lock on '/tree.jpg.Removed lock on '/house.jpg.                                     名称       % {9 ~! e: \/ k+ _- a; X
svnadmin rmtxns — 从版本库删除事物。              概要       6 {4 p  `: B' X1 w3 F
5 Z; e1 }7 {; C. a) \! a
svnadmin rmtxns REPOS_PATH TXN_NAME...              描述      
# [: k+ A5 a' |# B* n8 X; B) ?6 m 删除版本库突出的事物,更多细节在 “版本库清理”一节。              选项      
0 P4 Z1 u$ ?' S3 k2 K# x0 f1 D8 o0 W" B
--quiet (-q)              例子      
/ w" n2 }6 ~% s) [7 g 删除命名的事物:      
, ?& v" |# @+ t- e( c. T; I* [1 o. p% I) E6 u. |
$ svnadmin rmtxns /usr/local/svn/repos/ 1w 1x& M# ^6 v0 @( Y9 P; V, w
很幸运, lstxns的输出作为 rmtxns输入工作良好:       ( Q/ w3 {; ?$ ~6 Q% Y+ m1 ^( W: `
) ~" R& B) C, e& H; I7 y
$ svnadmin rmtxns /usr/local/svn/repos/  `svnadmin lstxns /usr/local/svn/repos/`' a" y4 |% }1 n" r/ D
从版本库删除所有未提交的事务。                                     名称       : a. s* |# C/ V- H8 j5 v+ q. c

8 J! Y2 Z+ @' V& q6 r- [ svnadmin setlog — 设置某个修订版本的日志信息。              概要       9 f6 D& V+ i! g& D+ S/ f

: E/ H" Z/ `- k; h9 f7 T! ysvnadmin setlog REPOS_PATH -r REVISION FILE              描述      
2 w8 z* d1 O/ ] 设置修订版本REVISION的日志信息为FILE的内容。       2 K; X; v& e, M& ]! U7 ~& C6 z

7 ^! y  u! n- }9 r7 U& l 这与使用 svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用--bypass-hooks选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。  警告      
( F( g+ g2 u. \
$ m9 k1 e% C7 R' c 修订版本属性不在版本控制之下的,所以这个命令会永久覆盖前一个日志信息。                  选项      
: I' r) E. R3 M- I: D9 z6 j: }( f( o4 ]3 j6 u- _) a4 Y) U
--revision (-r) ARG--bypass-hooks            例子      
0 U& ^6 u) d+ R) q% J( R' t 设置修订版本19的日志信息为文件msg的内容:      
3 I7 N' c2 H' O9 t& y, {: z7 \& c( m2 A
$ svnadmin setlog /usr/local/svn/repos/ -r 19 msg                        名称     
/ H% I5 ?1 A# P8 j% k- J svnadmin verify — 验证版本库保存的数据。          概要     6 R4 s- H" ^: y! q5 C/ H3 M$ j
2 K: o# o2 A9 h
svnadmin verify REPOS_PATH          描述     # G9 S( v( e: R1 H- ~/ B
如果希望验证版本库的完整性可以运行这个命令,原理是通过在内部转储遍历所有的修订版本并且丢掉输出。      例子    ; f  U4 o: Q! o( \
6 l; p" O0 [7 F* J- ]9 n
检验挂起的版本库:   
. S6 B9 u$ C8 }! ?* e2 R- S- [
& k4 D& P' k* V( a9 Q8 J$ svnadmin verify /usr/local/svn/repos/ * Verified revision 1729.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2019-6-25 02:30 , Processed in 0.063900 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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