提问的智慧SVN版 - 提问者必读
发新话题
打印

[原创] svnsync:Subversion备份版本库的好工具

svnsync:Subversion备份版本库的好工具

本文介绍利用svnsync来同步版本库,达到备份版本库的目的

要用到两个命令
1、svnsync init
初始化,建立目标库和源库之间的同步关系
命令格式 svnsync init 目标库URL 源库URL
2、svnsync sync
真正的同步
命令格式 svnsync sync 目标库URL
目标:
本次实现的是版本库的远程自动备份,将版本库备份到另一台机器上
假设我们要同步的源版本库为 http://192.168.0.1/svn/proj1 位于机器A,具体路径我们不必理会,因为我们使用http协议
目标库在机器B,file:///svn/proj1,这个为了简单和安全,我们使用file://协议
过程:
1、在机器B上,创建目标库
mkdir /svn
svnadmin create /svn/proj1
2、修改目标库的脚本pre-revprop-change
进入/svn/proj1/hooks/
cd /svn/proj1/hooks/
cp pre-revprop-change.tmpl  pre-revprop-change
vi pre-revprop-change
    REPOS="$1"
    REV="$2"
    USER="$3"
    PROPNAME="$4"
    ACTION="$5"
    if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
    echo "Changing revision properties other than svn:log is prohibited" >&2
    exit 1
原脚本的意思是如果修改的是svn:log属性,将允许修改,返回0;否则,不允许,返回1
我们要将它改为允许修改所有的属性,在脚本中直接返回0,新的脚本如下:
    exit 0;
3、初始化
svnsync init file:///svn/proj1 http://192.168.0.1/svn/proj1
会提示输入用户名和密码,这里提供的用户名和密码是可以完全读取http://192.168.0.1/svn/proj1的用户名和密码
4、同步
svnsync sync file:///svn/proj1

依然会提示输入用户名和密码,不过,你可以在这个命令之后加上 username 、password参数,
例如svnsync sync file:///svn/proj1 --username username --password password

  • 提问前先用多种搜索方式、多种可能的关键字对论坛进行搜索
  • 提问时详细描述软件版本,自己要做什么,做了什么,遇到了什么
  • 最后的绝招:PM版主
  • 问题解决后,请自行将“求助”修改为“已解决”

TOP

我将以下2种同步分别加到post-commit.bat
1。svnsync sync file://serverName/svnMirror/proj1 --username username --password password
2。svnsync sync file://serverName/svnMirror/proj1 --no-auth-cache --non-interactive --username username --password password

用TortoiseSVN Commit后,同步没有执行;我用svn list -v file://serverName/svnMirror/proj1查看目标库版本未更新

但手动直接运行post-commit.bat就能同步,并有如下提示:
已提交版本1。
复制版本1的属性。
用svn list -v file://serverName/svnMirror/proj1查看目标库版本也已更新。

老大,这是怎么回事?

TOP

老大,你知道如何解决这个问题不?

TOP

回复 2# lpm 的帖子

svnsync请使用绝对路径,因为脚本中没有任何环境变量,自然也是找不到svnsync命令

TOP

引用:
原帖由 Admin 于 2008-7-15 22:42 发表
svnsync请使用绝对路径,因为脚本中没有任何环境变量,自然也是找不到svnsync命令
是用的绝对路径:

e:\subversion\bin\svnsync sync file://serverName/svnMirror/proj1 --no-auth-cache --non-interactive --username username --password password

post-commit.bat里是这样写的,贴出来的时候漏写了svnsync前的路径。

TOP

TOP

在post-commit.bat中增加了 重定向: >> e:\sync-log.txt 2>&1  将命令执行期间的错误保存到txt中:
svnsync: 无法为URL打开ra_local会话
svnsync: 无法打开仓库"file:///z:/svn-mirror\test\"

同样出现在客户端commit时,  而直接运行post-commit.bat可以同步且不会出现上述提示.  (我看了 [原创] “无法为URL打开ra_local会话”的错误原因之一  http://bbs.iusesvn.com/redirect.php?tid=2236&goto=lastpost   不存在路径写法错误)

z:\  是由\\ServerName\path\映射而来的

如果我将镜像位置改为源版本库同一部电脑, 例如file:///e:/svn-mirror/test 则客户端commit时能顺利同步.

老大, 这是怎么回事?如何解决呀?  这问题困扰我多时了.

TOP

回复 7# lpm 的帖子

引用:
svnsync: 无法打开仓库"file:///z:/svn-mirror\test\
斜杆错误,或者这里根本就没有库

TOP

回复 8# Admin 的帖子

sorry

笔误.  
应该是:
svnsync: 无法为URL打开ra_local会话
svnsync: 无法打开仓库"file:///z:/svn-mirror/test"

确定镜像库存在.因为手动运行同步成功.

TOP


问题已解决:


发现如果将apache作为service启动就会出现这种现象, 作为console启动没有问题。

TOP

回复 1# PCplayer 的帖子

windows操作系统,服务器端和客户端都使用1.5版本,源版本库和目标版本库在通一机器
源版本库路径   svn://192.168.1.52/share
目标版本库     svn://192.168.1.52/mr

在执行初始化命令时提示不允许修改版本属性。
D:\svn150\bin>svnsync init svn://192.168.1.52/mr svn://192.168.1.52/share
svnsync: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子

D:\svn150\bin>svnsync init file:///f:/svnhome/mr svn://192.168.1.52/share
svnsync: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子

在目标库F:\svnhome\mr\hooks 修改了pre-revprop-change文件,将最后的返回值改为0,
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 0
重新执行初始化操作,依然是前面的提示。

问题:
1、svnsync这个操作,是否必须用于不同的机器?
2、为什么依然提示不能修改版本库的属性?

请求解答,谢谢了!

已经解决了:在目标库中新建了一个空的BAT文件,用UltraEdit编辑器建的,另外目标库的URL在前,源库的URL路径在后。
不知以上两个操作是否必然条件。
D:\svn150\bin>svnsync init svn://192.168.1.52/share svn://192.168.1.52/mr
svnsync: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子
D:\svn150\bin>svnsync init svn://192.168.1.52/share svn://192.168.1.52/mr
svnsync: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子
D:\svn150\bin>svnsync init svn://192.168.1.52/mr svn://192.168.1.52/share
复制版本 0 的属性。
D:\svn150\bin>svnsync init svn://192.168.1.52/mr svn://192.168.1.52/share
svnsync: 目标版本库已经与“svn://192.168.1.52/share”同步
D:\svn150\bin>svnsync sync svn://192.168.1.52/mr
传输文件数据....................................................................
................................................................................
..................................................................
已提交版本 1。
复制版本 1 的属性。
传输文件数据....................................................................
..........................
已提交版本 2。
复制版本 2 的属性。
传输文件数据....................................................................
................................................................................
................................................................................
................................................................................
......................
已提交版本 3。
复制版本 3 的属性。
传输文件数据.................................................
已提交版本 4。
复制版本 4 的属性。
传输文件数据....................................................................
........................................
已提交版本 5。
复制版本 5 的属性。
传输文件数据....................................................................
................................................................................
..................................................................
已提交版本 6。
复制版本 6 的属性。
已提交版本 7。
复制版本 7 的属性。
传输文件数据.................................................
已提交版本 8。
复制版本 8 的属性。
已提交版本 9。
复制版本 9 的属性。
已提交版本 10。
复制版本 10 的属性。
已提交版本 11。
复制版本 11 的属性。
已提交版本 12。
复制版本 12 的属性。
已提交版本 13。
复制版本 13 的属性。
D:\svn150\bin>

[ 本帖最后由 liugengcheng 于 2008-7-30 18:03 编辑 ]

TOP

发新话题
本功能由奇虎问答实现

相关主题

标题 作者 最后发表
subversion里如何进行版本库的自动全备份与增量备份 vivian 2006-09-30
Subversion 1.4中文 Release Notes thought 2006-09-12
Subversion1.4即将发布,谁给翻译一下? PCplayer 2006-08-31
点击阅读更多关于的相关帖子  更多相关主题
订阅 我用Subversion - SVN中文论坛 邮件列表:iUseSVN@googlegroups.com
电子邮件:
网站重要事项将会在这个列表进行通知,点击这里浏览存于列表中的所有邮件