svnsync同步版本库
原文:http://ritto.blog.51cto.com/427838/735831
2011-12-06 21:30:13
标签:svn svnsync 休闲 职场
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ritto.blog.51cto.com/427838/735831
假设有一个主版本库(Master)需要同步到另外一个服务器的新库(Mirror)当中以达到备份的效果。
主(Master): 将要通过svnsync被同步的活动读/写版本库。
镜像(Mirror): 将要与master通过svnsync同步的只读版本库。
Subversion 1.4发布之后,svnsync工具就成了标准Subversion的一部分,可以用”一个可以维护只读Subversion镜像所有功能的工具”描述, 从它的文档中理解它的目的非常简单,为什么在企业中维护一个镜像版本库非常重要?每个Subversion实现都不一样,可能有很多原因,但是有一些是共 同的原因:
提供了版本库的备份,这样可以使灾后恢复和软件升级方面得到好处。
提供了一个简单的只读版本库,一些人希望提供简单的只读访问版本库,通过svnsync你可以简单的达到这个目标而无需维护授权文件或其他。(例如:维护一个版本库的社区访问点,同时另一个不同的版本库给开发者使用)
有很多例子,但是必须提供一个svnsync可以提供什么的思想。(更详细的解释,请参考”使用Subversion进行版本控制“的”Repository维护“) 现在我可以投入到脚本建议和例子上了,这有点可耻吧。为了确实理解我们为什么这样做,我们必须理解svnsync的工作。我会简短解释,然后会进入例子脚本和建议,你可以将其应用到你的Subversion实现。
理解svnsync
svnsync工作方式非常简单:将一个版本库的修订版本”重放”到另一个,这意味着镜像版本库和主版本库使用相同的规则,对镜像版本库执行操作的 用户必须对其有完全的写权限,而秘诀就是Subversion在镜像版本库的修订版本0上维护了必要的元数据,从而可以知道应该同步什么。svnsync 工作原理非常容易理解,但是让svnsync依设计工作,还是有一些规则,你需要知道这一点。下面是一些规则和使用svnsync的最佳实践:
同步用户需要对整个版本库有读/写权限
同步用户需要能够修改特定修订版本属性
镜像版本库需要对除同步用户以外的用户只读
在你同步一个镜像版本库之前,镜像版本库需要在修订版本0
现在,我们知道什么是svnsync了,也知道了它的工作原理以及为什么有用,让我们通过对主版本库使用svnsync开始同步一个镜像版本库。
实现svnsync
实现svnsync的唯一的前提条件是创建一个希望镜像的版本库,一旦创建,你就可以按照下面步骤继续:
Step 1: 创建镜像Repository.
svnadmin create MIRROR_REPO_PATH
Step 2: 设置镜像版本库只对同步用户可写
为了让镜像版本库只被同步用户写,我们的例子里用户名是”svnsync”,我们有一些选项,一个就是使用Subversion的授权功能设置缺省的访问规则:
[/]* = r
svnsync = rw
另一个选项就是使用start-commit 检查svnsync用户,下面是一个例子,是shell脚本:
#!/bin/sh
USER=”$2″
if [ “$USER“ =“svnsync” ]; then
exit 0
fi
echo “Only the svnsync user may commit new revisions as this is a read-only, mirror repository." >&2
exit 1
Step 3: 让镜像版本库使用同步用户修改修订版本属性
为此,我们需要创建一个pre-revprop-change钩子,类似于下面的例子,也是shell脚本:
#!/bin/sh
USER=”$3″
if [ “$USER” =“svnsync” ]; then
exit 0
fi
echo “Only the svnsync user may change revision properties as this is a read-only, mirror repository." >&2
exit 1
Step 4: 注册同步的镜像版本库
在任何平台使用下面的svnsync命令:
svnsync initialize URL_MIRROR_REPO URL_MASTER_REPO --username=svnsync --password=svnsyncpassword
如果所有的配置正确,你一定会看到下面的输出:
Copied properties for revision 0.
现在你已经注册了镜像版本库与主版本库的同步,我们必须继续执行初始的同步,这样镜像版本库才和主版本库是一样的了。
Step 5: 执行初始同步
为了确定所有事情已经准备好了,并且执行初始同步,在任何系统只需要执行:
svnsync synchronize URL_TO_MIRROR_REPO --username=svnsync --password=passwd
如果所有的同步正确,你会看到类似的输出:
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
Copied properties for revision 3.…
Step 6: 使用post-commit钩子自动同步
根据初始同步的输出,我们现在要做的就是写一个定时执行或post-commit钩子来同步镜像版本库,我建议post-commit,因为它让你的镜像版本库尽可能的最新,下面是可以用在主版本库上同步镜像版本库的post-commit钩子,一个shell脚本:
# Example for synchronizing one repository from the post-commit hook
#!/bin/sh
SVNSYNC=/usr/local/bin/svnsync
$SVNSYNC synchronize URL_TO_MIRROR_REPO –username=svnsync –password=svnsyncpassword &
exit 0
注:上述钩子脚本需用 chmod 755 使之可运行。
排错:
Subversion同步工具svnsync出错:Failed to get lock on destination repos
同步工具svnsync在使用svnsync同步两个版本库时经常出现如下的错误,并自动中断了同步操作:
Copied properties for revision 461.
svnsync: Server sent unexpected return value (502 Bad Gateway) in response to PR
OPFIND request for ‘/svn/!svn/vcc/default’
当再次运行 svnsync sync svn://localhost/jqueryjs 时,有可能出现”Failed to get lock on destination repos”的错误信息,使同步操作无法继续进行:
svnsync sync svn://localhost/jqueryjs
Failed to get lock on destination repos, currently held by ‘firehack:963c0909-45ad-644f-b383-7e35d445028f’
……
Failed to get lock on destination repos, currently held by ‘firehack:963c0909-45ad-644f-b383-7e35d445028f’
svnsync: Couldn’t get lock on destination repos after 10 attempts
解决办法:
删除SVN仓库修订号0 svn:sync-lock的保护.
svn propdel svn:sync-lock --revprop -r 0 http://some.domain.com/svn/projects
分享到:
相关推荐
利用svnsync同步SVN版本库,将之前主库上的SVN数据迁移到VisualSVN上,然后在实现版本库的远程自动备份,版本库备份到另一台机器上。
### svnsync同步增量备份详解 #### 一、概述 Subversion (SVN) 是一个广泛使用的版本控制系统,被众多开发团队用于管理源代码。在实际应用中,为了确保数据的安全性和系统的稳定性,通常需要对 SVN 仓库进行备份。...
### SVNsync配置库同步知识点详解 #### 一、SVNsync简介 SVNsync是一款用于Subversion(简称SVN)仓库之间同步的工具。它能够帮助用户实现从一个SVN仓库到另一个SVN仓库的数据复制,这对于需要在多个服务器之间...
在SVN环境中实现双机热备,主要是利用`svnsync`工具进行数据同步,保证两台服务器上的版本库保持一致。 #### 实现步骤 1. **创建目标目录** 首先在备用服务器上创建一个与主服务器版本库结构相同的目录,并初始...
`svnsync`支持单向同步,即从源仓库到目标仓库,且具有幂等性,即使在同步过程中发生中断,也能在下次同步时继续从断点处开始,避免重复工作。 接下来是`svnhotcopy_daily.sh`,这是一个基于shell的脚本,用于创建...
SVN同步备份是指通过一定的机制实现主版本库(源库)与备用版本库(备份库)之间的数据同步,确保两份数据的一致性,从而提高数据的安全性和可靠性。 #### 二、SVN同步备份流程 根据题目中提供的内容,我们可以将...
在软件开发过程中,版本控制系统如Subversion(SVN)对于团队协作至关重要。当开发团队分布在不同的地理位置,且出于安全原因无法直接访问同一SVN仓库时,实现仓库间的双向同步就显得尤为必要。SVN虽然原生支持单向...
- **svnsync工具**:自Subversion 1.4.*版本起引入的功能,用于实现版本库之间的同步。 - **工作原理**:通过将一个版本库的修订版本“重放”到另一个版本库中来实现同步,确保两个版本库的修订版本一致。 #### 五...
同步仓库则通过 `svnsync sync` 命令实现,它将更新本地仓库以反映远程仓库的最新变化。这个命令需要定期执行以保持同步。 对于svn仓库的备份,有两种主要方法:压缩备份和不压缩备份。使用 `svnadmin dump` 命令...
- 使用`svnsync sync`命令进行数据同步。 - 解决同步过程中可能出现的问题,如断开连接后如何重启同步流程。 6. **处理同步错误** - 当遇到“Failed to get lock on destination repos”错误时的解决方案。 - ...
windows 2008 R2和win7 测试通过。平台的VisualSVN-Server文档,包括了安装配置,用户文件管理,用户自主...2.svnsync自动定时同步 3.svn dump方式备份 四.SVN迁移(CVS或VSS迁移至SVN) 五.SVN服务器配置和使用约定
标题“AXE SVN Sync-开源”指的是一个名为AXE SVN Sync的开源项目,它专注于在两个SVN(Subversion)仓库之间实现同步。Subversion是一个广泛使用的版本控制系统,用于管理和跟踪文件和目录的更改。AXE SVN Sync是...
`svnsync`是一个用于在两个SVN仓库之间复制数据的工具,它可以实现增量同步,即只同步自上次同步以来发生改变的数据。 **操作命令**: 1. 初始化同步源: ```cmd svnsync init file:///d:/beifen/CYMS svn://192....
本章节主要介绍如何使用`svnsync`命令进行版本库的同步备份。 1. **svnsync init** - **命令格式**:`svnsync init 目标库URL 源库URL` - **作用**:初始化,用于建立目标库和源库之间的同步关系。 2. **svnsync...
- 包括创建版本库、配置Apache、设置用户权限、初始化和同步备份等多个步骤,手册提供了详细的步骤和示例。 6. **遇到的问题与解决方法**: - 手册列举了一些可能遇到的问题,如`svnsync`错误,以及解决这些问题...
svnsync同步**: - 配置svnsync服务,设置源库和目标库,使用`svnsync initialize`初始化同步,然后定期使用`svnsync sync`命令保持同步。 在实施这些备份策略时,应考虑以下因素: - **备份频度**:根据业务需求...
在本例中,`svnsync.sh`是执行同步的shell脚本,它会定期运行,确保主服务器和从服务器的版本库保持一致。 2. **配置过程**:在开始同步前,需要在主服务器上初始化同步,然后在从服务器上配置为同步源。这通常涉及...
`svnsync`的使用包括初始化同步关系和执行同步。初始化时,需要指定源和目标仓库的URL,之后使用`sync`命令保持同步。如果遇到问题,检查Apache和SVN的配置,以及网络连接。 ### 8. 注意事项 - 版本库路径的正确...
svnsync工具提供了远程仓库之间的同步功能,可以实现异地备份。首先,你需要初始化源仓库为镜像目标: ``` svnsync init file:///D:\path\to\backup http://source-server/svn/repo ``` 然后,定期运行`svnsync...