zoukankan      html  css  js  c++  java
  • 工作随笔——使用svnsync实时备份SVN版本库

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

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

    注意:svnsync要求svn版本1.4+

    下面的内容来自svnbook-1.4
    svnsync svnsync是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; fi
      
      echo "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实时备份就到这儿。如有疑问,请留言。

  • 相关阅读:
    jQuery插件实现简单的圆角
    提高网页效率的14条准则
    jQuery插件sdmenu导航插件
    Using MVC Pattern in Web Interactions
    jQuery插件源代码显示.(Ajax加载方式).
    jQuery插件jLook(表单美化)
    jQuery关于 序列化
    jQueryblockUIV2翻译.
    cssimagemap
    jQuerySlide menu
  • 原文地址:https://www.cnblogs.com/zz0412/p/svnsync.html
Copyright © 2011-2022 走看看