前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了。。。。这TMD什么运气!

花费了点时间研究了下svn自己的同步工具。写个日志记录下。

注意:svnsync要求svn版本1.4+

下面的内容来自svnbook-1.4svnsyncsvnsync是Subversion的远程版本库镜像工具,它允许你把一个版本库的内容录入到另一个。在任何镜像场景中,有两个版本库:源版本库,镜像(或“sink”)版本库,源版本库就是svnsync获取修订版本的库,镜像版本库是源版本库修订版本的目标,两个版本库可以是在本地或远程—它们只是通过URL跟踪。svnsync进程只需要对源版本库有读权限;它不会尝试修改它。但是很明显,svnsync可以读写访问镜像版本库。
警告svnsync对于不能作为镜像操作一部分的修改非常敏感,为了防止发生这个情况,最好保证svnsync是唯一可以修改镜像版本库的进程。
svnsync选项--config-dir DIR指导Subversion从指定目录而不是默认位置(用户主目录的.subversion)读取配置信息。
--no-auth-cache阻止在Subversion管理区缓存认证信息(如用户名密码)。
--non-interactive如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。
--password PASS指出在命令行中提供你的密码—另外,如果它是需要的,Subversion会提示你输入。
--username NAME表示你要在命令行提供认证的用户名—否则如果需要,Subversion会提示你这一点。

来源SVN:192.168.2.5

备份SVN:192.168.3.10

  1. 创建备份空版本库

    $ svnadmin create svn-mirror

  2. 配置来源、备份SVN,创建用户:syncuser

    请确认syncuser用户对备份SVN有写入权限。对来源SVN有读取权限。且密码相同。

  3. 配置备份SVN的pre-revprop-change hook
    #!/bin/sh 
    
    USER="$3"# 限制只有syncuser用户才能提交版本属性修改到此版本库
    if [ "$USER" = "syncuser" ]; then exit 0; fi echo "Only the syncuser user may change revision properties" >&2
    exit 1# 当然某些网络教程说的是你可以直接清空然后写入exit 0 ,这种方法虽然可以做,但是注意svnbook中的这句话:
    # svnsync的通讯议对于源和目标版本库版本历史的不一致非常敏感,因此,虽然svnsync无法要求目标版本库是只读的,[34]最好的办法就是只允许镜像进程修改目标版本库内容。(PS:镜像==来源SVN  目录==备份SVN)# [34] 实际上,它不是真的完全只读,或者svnsync本身有时间将版本库历史拷入。

  4. 配置备份SVN的start-commit hook【可选,但建议配上】

    #!/bin/sh 
    
    USER="$2"# 限制只用syncuser用户才能提交版本修改到版本库
    if [ "$USER" = "syncuser" ]; then exit 0; fiecho "Only the syncuser user may commit new revisions" >&2
    exit 1

  5. 初始化备份SVN

    $ svnsync initialize http://192.168.3.10/svn-mirror \http://192.168.2.5/Dev-rep \--username syncuser --password syncpass
    Copied properties for revision 0.# initialize 可以简写为 init 所以上面的命令可以写作如下:
    $ svnsync init http://192.168.3.10/svn-mirror \http://192.168.2.5/Dev-rep \--username syncuser --password syncpass
    # 注意
    # 提供给svnsync的URL必须是指向目标和源版本库的根目录,这个工具不支持对版本库子树的镜像处理。
    

  6. 在备份SVN测试数据同步

    $ svnsync synchronize http://192.168.3.10/svn-mirror \--username syncuser --password syncpass
    # 注意
    # svnsync的最初版本(在Subversion 1.4)有一些缺陷—-用来认证的--username和--password命令行参数同时作用于源和目标版本库。# 显然,我们无法保证同步的用户认证信息是相同的,如果不一样,用户使用非交互模式(--non-interactive选项)来运行svnsync时会遇到这个问题(PS:也就是认证无法通过)。
    # 现在有趣的部分开始了,通过一个单独的子命令,我们可以告诉svnsync将所有镜像的修订版本从源版本库拷贝到目标版本库。# [35]svnsync synchronize子命令会查看目标版本库特定修订版本的属性,并且检测同步的版本库是哪一个,以及最新镜像的修订版本是0。然后它会查询源版本库,检测其最新的修订版本。# 最后,它会询问源版本库服务器来开始重演从修订版本0到最新修订版本。svnsync从源版本库服务器得到返回的结果,然后将其作为新的提交转发到目标版本库服务器。# [35] 要预先警告一下,尽管对于普通读者只需要几秒钟就可以理解下面的输出,而对于整个镜像过程花费的时间可能会非常长。

  7. 在来源SVN配置post-commit hook,启用实时备份

    $ svnsync synchronize --non-interactive http://192.168.3.10/svn-mirror \--username syncuser --password syncpass# --non-interactive 非交互模式,如果程序需要参数,让程序自行处理

  8. 异常处理
  • svnsync: E165006: Repository has not been enabled to accept revision propchanges;
    ask the administrator to create a pre-revprop-change hook

    请配置pre-revprop-change hook

  • Failed to get lock on destination repos, currently held by 'localhost.localdomain:d1dfeaac-b028-4484-a1ec-ae455ba090e1'

    使用 svnsync synchronize 同步时异常终止。如:机器停电,断网等。

    $ svn propdel svn:sync-lock --revprop -r HEAD http://192.168.3.10/svn-mirror

  • svnsync: The requested report is unknown.

  这个错误一般不会遇到,svnsync只适用于1.4+版本。请升级该SVN。

好了,svn实时备份就到这儿。如有疑问,请留言。

转载于:https://www.cnblogs.com/zz0412/p/svnsync.html

工作随笔——使用svnsync实时备份SVN版本库相关推荐

  1. 如何给SVN版本库瘦身

    转截请注明来源:http://blog.csdn.net/caoshiying 当svn库庞大到一定程度的时候,无论是在查询还是在备份方面肯定会给我们带来很多不便,对于有把SVN版本库随身携带到移动硬 ...

  2. linux+svn+拉取版本_在linux客户端下管理svn版本库

    把linux作为客户端管理svn版本库,不一定是svn服务器. 1.svn管理命令用法:[root@xiaoyu ~]# svn --help usage: svn [opations] [args] ...

  3. Ubuntu8.10下迁移SVN版本库到新增的SAS硬盘

    一.新增SAS硬盘 公司一台DELL POWEREDGE R200的服务器安装了UBUNTU8.10版本的系统并配置作为SVN服务器. 因数据增长迅速,300GB的硬盘空间将近用完,近期新买了一块30 ...

  4. svn服务端删除版本库_删除SVN目录及从服务器端删除SVN版本库文件方法详解

    删除SVN目录 当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法. 一.在linux ...

  5. 项目从服务器移除,删除SVN目录及从服务器端删除SVN版本库文件方法详解

    删除SVN目录 当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法. 一.在linux ...

  6. 宝塔安装 SVN 搭建svn版本库

    svn 默认端口号是 3690  注意 宝塔需要开放 3690 端口   服务器也需要开放 3690 端口 打开宝塔命令行, yum 安装SVN 第一步 安装SVN 命令: yum -y instal ...

  7. svn版本库浏览器_svn:版本库xxx不存在||svn:No such revision xxx的问题

    满意答案 ee0808 2016.11.13 采纳率:56%    等级:13 已帮助:8065人 svn:版本库xxx不存在||svn:No such revision xxx的问题一般情况下出现这 ...

  8. svn版本库的拆分及迁移子目录等

    需求 库的改名 库A导入到库B 库A的子目录导入到库B 库A的子目录导入到库B的子目录 svnadmin dump 此工具只运行在服务器上 查看最新版本 svnlook youngest /var/s ...

  9. svn版本库浏览器_在SVN版本库浏览器中直接编辑文件保存后不会弹..._网络编辑_帮考网...

    原因是没有实际添加到版本库中,要添加到版本库必须执行"Commit". 具体分析如下: SVN错误处理svn : Couldn't perform atomic initializ ...

最新文章

  1. 闭关纪要17.Google app engine的简单应用
  2. 图神经网络:方法与应用 | 一文展望,四大待解问题
  3. Feature Selection: A Data Perspective --阅读笔记2 传统数据的特征选择算法
  4. 多样性计算时代,怎样的技术生态才能满足发展需求
  5. 飞桨 AI Studio 课程学习 可以成为一名优秀的算法工程师
  6. JVM系列之内存泄漏
  7. WIN10系统 截图或者某些程序时屏幕会自动放大怎么办
  8. java 异或_Javase第一部分:操作符的使用(按位异或运算)(含视频讲解)
  9. StringJoiner
  10. 2020山西农业大学计算机排名,山西农业大学排名第几
  11. R语言数据可视化之美:专业图表绘制指南
  12. dialogfragment监听返回键
  13. 怎么在mysql中创建用户名和密码是什么_mysql中怎么创建用户名和密码
  14. 51单片机通过WIFI模块ESP8266控制LED灯
  15. rsync+inotify实现文件增量实时同步
  16. 125亿元!华为公开晒年终奖
  17. 与兄弟连的不期而遇似早已缘定——是什么促使我来兄弟连
  18. 【转】互联网盈利模式分析
  19. 使用esp8266作为I2C传感器的主机
  20. 2020上海交大计算机考研真题,上海交大 2020考研真题 回忆版

热门文章

  1. mongoDB的三种基础备份方法
  2. 机器学习入门8--决策树
  3. 双十一是不是被各种满减、优惠券绕晕了?那就来做一个购物攻略
  4. Nginx + uWSGI + Python + Django部署实例
  5. Python数据加解密技术_SHA256算法
  6. OpenSSL密码库算法笔记——第5.4.9章 椭圆曲线点的加法
  7. mysql联表查询聚合_MySQL--04(聚合函数表连接查询)
  8. 当客户需求不明确时,怎么办?资深pm告诉你!
  9. 通证经济大局观(十五):稀缺性与权衡取舍
  10. 编程题C语言写牛牛数星星,一步一步写算法(之“数星星”)