两个SVN服务器之间同步
上次大D在VPS上搞了个SVN服务器,碍于美帝网络线路时不时的抽一抽,仍然保持本地和SVN服务器两个SVN服务器的状态。
但是问题来了,怎么保持两个SVN服务器上都是一样的。
来回使用重新定位这么搞岂不是麻烦死。
看了一下Subversion的手册,干脆搞个同步好了。
准备工作
默认情况下,Subversion出于安全原因,是禁止修改任何属性的。
我们需要调整pre-revprop-change来避免出现如下错误:
1 2 |
svnsync: E165006: Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook |
P.S. 大D遇到了N次这个错误。。。。
首先我们在版本库目录的hooks目录下,创建文件:
Windows
创建批处理文件,pre-revprop-change.bat,内容如下:
1 |
exit 0 |
P.S 可能会需要管理员权限。
Linux
在版本库路径下找到hooks目录,复制其中的pre-revprop-change.tmpl,并更名为pre-revprop-change。
1 |
cp pre-revprop-change.tmpl pre-revprop-change |
编辑复制出来的pre-revprop-change文件,将文件内容清空,并输入:
1 |
exit 0 |
修改文件权限
1 |
chmod a+x pre-revprop-change |
初始化
做好准备工作之后,对需要同步的SVN服务器进行初始化操作
这里是将本地的SVN版本控制数据同步到VPS上,如需要其他类型的操作,可以查询Subversion使用手册。
先放一下svnsync.exe关于初始化的帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
C:\Users\Derek.S>svnsync init --help initialize (init): 用法: svnsync initialize DEST_URL SOURCE_URL 初始化一个目标版本库以从另一个版本库同步。 如果源 URL 不是版本库的根,只有版本库中指定的部分会被同步。 目标 URL 必须指向版本库的根目录,并且允许修改版本属性。一般来说,目标版本库不能包含已经提交的版本。可使用 --allow-non-empty 来越过此限制,它导致 svnsync 假定目标版本库中的版本是源版本库中对应版本的镜像(例如,这对于从源版本库的副本初始化镜像特别有用)。 除了 svnsync 外,你不应该在目标版本库中提交,或者修改版本属性。也就是说,目标版本库应该是源版本库的只读镜像。 有效选项: --non-interactive : do no interactive prompting (default is to prompt only if standard input is a terminal device) --force-interactive : do interactive prompting even if standard input is not a terminal device --no-auth-cache : 不要缓存用户认证令牌 --username ARG : 指定用户名称 ARG (已经过时; 参看 --source-username 和 --sync-username) --password ARG : 指定密码 ARG (已经过时; 参看 --source-password 和 --sync-password) --trust-server-cert : 不提示的接受未知的证书颁发机构发行的 SSL 服务器证书 (只用于选项 “--non-interactive”) --source-username ARG : 使用用户名称 ARG 连接源版本库 --source-password ARG : 使用密码 ARG 连接源版本库 --sync-username ARG : 使用用户名称 ARG 连接目的版本库 --sync-password ARG : 使用密码 ARG 连接目的版本库 --config-dir ARG : 从目录 ARG 读取用户配置文件 --config-option ARG : 以下属格式设置用户配置选项: FILE:SECTION:OPTION=[VALUE] 例如: servers:global:http-library=serf --source-prop-encoding ARG : 将可翻译的属性从编码 ARG 转换到 UTF-8。如果不指定 ,那么假定属性的编码是 UTF-8。 -q [--quiet] : 尽可能少打印 --allow-non-empty : 允许非空目标版本库 --disable-locking : 禁用内置锁。使用此选项可能 会损坏镜像,除非你能确认没有其它 svnsync 实例同时运行。 --steal-lock : 在需要时窃取锁。请小心使用 如果你的镜像包含过时的锁,并且没有其它 svnsync 实例同时运行。 |
我们只需要最简单的用法,如下:
1 2 |
#命令形式 svnsync.exe initialize svn://svn服务器IP地址:端口/repos/ file:///本地SVN服务地址/ --username svn服务器登录用户名 --password svn服务器登录密码 --allow-non-empty |
例子:
1 |
svnsync.exe initialize svn://192.168.1.100/repos/ file:///d:/svn/ --username svn --password 123456 --allow-non-empty |
提示:复制版本 0 的属性
表示初始化完毕,可以进行同步了。
同步
再来看下同步的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
C:\Users\Derek.S>svnsync sync --help synchronize (sync): 用法: svnsync synchronize DEST_URL [SOURCE_URL] 从源版本库复制所有挂起的版本到目标版本库。 如果提供了 SOURCE_URL,就用作源版本库的 URL,从而忽略在目标版本库中记录的 源 URL。如果有不信任的用户/管理员可以写入位于 DEST_URL 的版本库,那么特别 推荐指定 SOURCE_URL。 有效选项: --non-interactive : do no interactive prompting (default is to prompt only if standard input is a terminal device) --force-interactive : do interactive prompting even if standard input is not a terminal device --no-auth-cache : 不要缓存用户认证令牌 --username ARG : 指定用户名称 ARG (已经过时; 参看 --source-username 和 --sync-username) --password ARG : 指定密码 ARG (已经过时; 参看 --source-password 和 --sync-password) --trust-server-cert : 不提示的接受未知的证书颁发机构发行的 SSL 服务器证书 (只用于选项 “--non-interactive”) --source-username ARG : 使用用户名称 ARG 连接源版本库 --source-password ARG : 使用密码 ARG 连接源版本库 --sync-username ARG : 使用用户名称 ARG 连接目的版本库 --sync-password ARG : 使用密码 ARG 连接目的版本库 --config-dir ARG : 从目录 ARG 读取用户配置文件 --config-option ARG : 以下属格式设置用户配置选项: FILE:SECTION:OPTION=[VALUE] 例如: servers:global:http-library=serf --source-prop-encoding ARG : 将可翻译的属性从编码 ARG 转换到 UTF-8。如果不指定 ,那么假定属性的编码是 UTF-8。 -q [--quiet] : 尽可能少打印 --disable-locking : 禁用内置锁。使用此选项可能 会损坏镜像,除非你能确认没有其它 svnsync 实例同时运行。 --steal-lock : 在需要时窃取锁。请小心使用 如果你的镜像包含过时的锁,并且没有其它 svnsync 实例同时运行。 |
同样我们仅需要最简单的用法:
1 2 |
#命令形式 svnsync.exe sync svn://svn服务器IP地址:端口/repos/ file:///本地SVN服务地址/ --username svn服务器登录用户名 --password svn服务器登录密码 |
例子:
1 |
svnsync.exe sync svn://192.168.1.100/repos/ file:///d:/svn/ --username svn --password 123456 |
随后就会开始同步,同步需要的时间根据版本库的大小和版本库提交次数而决定。
版权声明
转载保留版权: 大D技研室 | 《两个SVN服务器之间同步》
本文链接地址:https://www.dadclab.com/archives/4657.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
已有 2 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
SVN是挺方便的,原来用SAE的时候就用的SVN上传代码,但不知道为什么经常上传报错(Win环境+TortoiseSvn)。
共和国万岁