zoukankan      html  css  js  c++  java
  • SVN 集中式版本控制软件


    简介:

    目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广、且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点。

    以前写的 SVN 文档丢失了,简单整理一遍。

    一、SVN 的安装 ( CentOS )

    shell > yum -y install subversion
    
    shell > svn --version --quiet # 版本号
    1.6.11

    二、SVN 基本步骤

    1、创建工作目录、版本库

    shell > mkdir /svn # 创建一个工作目录 ( 可以略 )
    shell > svnadmin create /svn/myrepos # 新建一个版本库,名为 myrepos ( 可以使用 svnadmin help [ 可以接子命令 ] 命令参数 )
    
    shell > ls /svn/myrepos/ # 版本库下的目录、文件
    conf db format hooks locks README.txt
    
    shell > tree /svn/myrepos/conf/ # 版本库配置文件目录
    /svn/myrepos/conf/
    ├── authz # 用户授权
    ├── passwd # 用户认证
    └── svnserve.conf # svnserve 服务配置文件

    2、修改 SVN 版本库配置文件 ( 需要重启 svnserve )

    shell > grep -vP '^#|^$' /svn/myrepos/conf/svnserve.conf # 文件行首不能有空格
    [general]
    
    anon-access = none # 匿名用户访问权限
    auth-access = write # 认证用户访问权限
    password-db = passwd # 认证用户密码文件
    authz-db = authz # 目录授权文件位置
    realm = My First Repository # 提示信息
    
    [sasl]

    3、添加认证用户、密码 ( username = password )

    shell > grep -vP '^#|^$' /svn/myrepos/conf/passwd
    [users]
    
    wang = wang_pwd
    guaishou = guaishou_pwd

    4、添加目录授权

    shell > grep -vP '^#|^$' /svn/myrepos/conf/authz
    [aliases]
    
    [groups]
    
    [myrepos:/] # 授权目录
    
    wang = rw # 授权认证用户 ( 可读、可写)
    
    * = # 非授权认证用户 ( 无权限 )

    5、以守护进程的方式启动 SVN

    shell > svnserve -d -r /svn # -d 以守护进程的方式启动一个 svnserve ,-r 指定版本库

    # 默认监听 TCP 3690 端口,以守护进程模式启动时,可以使用 --list-port 、--list-host 来指定端口、主机

    shell > netstat -lnpt | grep 3690
    tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1883/svnserve

    6、授权测试 ( 一 )

    shell > svn checkout --no-auth-cache --username wang --password wang_pwd svn://192.168.12.128/myrepos /home/wang/myrepos # 成功
    取出版本 0。
    
    shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos # 失败 ( co = checkout )
    svn: 认证失败

    # 由上可知,authz 中的授权生效 ( 用户:guaishou 虽然也是认证用户,但是没有授权 )

    shell > touch /home/wang/myrepos/readme # 建立测试文件
    shell > svn add /home/guaishou/myrepos/readme # 添加到工作区
    shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add readme' /home/guaishou/myrepos/readme # commit 提交,-m 指定 log
    增加 home/wang/myrepos/readme
    传输文件数据.
    提交后的版本为 1

    # 由上可知,用户:wang 被授权的读、写权限生效

    shell > grep -vP '^#|^$' /svn/myrepos/conf/authz
    [aliases]
    
    [groups]
    
    [myrepos:/]
    
    wang = rw
    
    * = r # 非授权认证用户 ( 只读权限 )
    
    shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos # 成功
    A /home/guaishou/myrepos/readme
    取出版本 1。
    
    shell > echo my name is guaishou > /home/guaishou/myrepos/readme # 修改 readme
    shell > svn --no-auth-cache --username guaishou --password guaishou_pwd commit -m 'change readme' /home/guaishou/myrepos/readme # 失败 ( 用户:guaishou 为只读权限 )
    svn: 提交失败(细节如下): 
    svn: 认证失败

    # 由上可知,authz 文件发生改变,不需要重启 svnserve 即可生效

    7、授权测试 ( 二 )

    shell > mkdir /home/wang/myrepos/{home_f,home_g,public} # 建立三个测试目录
    
    shell > svn add /home/wang/myrepos/* # 添加到工作区
    A /home/wang/myrepos/home_f
    A /home/wang/myrepos/home_g
    A /home/wang/myrepos/public
    svn: 警告: “/home/wang/myrepos/readme”已纳入版本控制
    
    shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add test dir' /home/wang/myrepos/ # 提交到版本库
    增加 home/wang/myrepos/home_f
    增加 home/wang/myrepos/home_g
    增加 home/wang/myrepos/public
    提交后的版本为 2。
    
    shell > shell > grep -vP '^#|^$' /svn/myrepos/conf/passwd # 添加认证用户
    [users]
    
    wang = wang_pwd
    feng = feng_pwd
    guaishou = guaishou_pwd
    
    shell > grep -vP '^#|^$' /svn/myrepos/conf/authz # 新的授权目录如下
    [aliases]
    
    [groups]
    
    [myrepos:/]
    
    wang = rw
    
    * = r
    
    [myrepos:/home_f]
    
    wang = r
    feng = rw
    
    * =
    
    [myrepos:/home_g]
    
    wang = r
    guaishou = rw
    
    * =
    
    [myrepos:/public]
    
    * = rw
    
    shell > svn co --no-auth-cache --username wang --password wang_pwd svn://192.168.12.128/myrepos /home/wang/myrepos/ # wang 检出了所有目录
    A /home/wang/myrepos/home_f
    A /home/wang/myrepos/readme
    A /home/wang/myrepos/home_g
    A /home/wang/myrepos/public
    取出版本 2。
    
    shell > svn co --no-auth-cache --username feng --password feng_pwd svn://192.168.12.128/myrepos /home/feng/myrepos/ # feng 没有检出 home_g
    A /home/feng/myrepos/home_f
    A /home/feng/myrepos/readme
    A /home/feng/myrepos/public
    取出版本 2。
    
    shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos/ # guaishou 没有检出 home_f
    A /home/guaishou/myrepos/readme
    A /home/guaishou/myrepos/home_g
    A /home/guaishou/myrepos/public
    取出版本 2。
    
    shell > touch /home/wang/myrepos/home_f/readme # 建立测试文件
    
    shell > svn add /home/feng/myrepos/home_f/readme # 添加到工作区
    A /home/wang/myrepos/home_f/readme
    
    shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add readme' /home/feng/myrepos/home_f/readme # 提交失败
    增加 home/wang/myrepos/home_f/readme
    传输文件数据.svn: 提交失败(细节如下): 
    svn: Access denied
    
    shell > touch /home/wang/myrepos/public/readme
    
    shell > svn add /home/wang/myrepos/public/readme 
    A /home/wang/myrepos/public/readme
    
    shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add public/readme' /home/wang/myrepos/public/readme # 提交成功
    增加 home/wang/myrepos/public/readme
    传输文件数据.
    提交后的版本为 3。

    ## 好了,授权就到这里 !

    三、停止 svnserve

    shell > kill $(ps aux | grep svnserve | grep -v grep | awk '{print $2}')

    四、SVN 备份、还原 ( 写个小脚本,加入到任务计划中 !)

    1、逻辑备份 ( 备份灵活、可以全量、增量备份 --incremental 、节省空间,适合版本库比较小的规模 )

    shell > svnadmin dump /svn/myrepos > /data/backup/svn/myrepos_$(date +%Y%m%d).bak

    2、物理备份 ( 占用空间大,备份、恢复速度快 )

    shell > svnadmin hotcopy /svn/myrepos/ /data/backup/svn/myrepos_hot_$(date +%Y%m%d).bak

    3、逻辑还原

    shell > svnadmin load /svn/myrepos/ < /data/backup/svn/myrepos_20160303.bak # 注意:如果版本库被删除,还原后还需重新配置认证用户、授权等!

    4、物理还原

    shell > svnadmin hotcopy /data/backup/svn/myrepos_hot_20160303.bak/ /svn/myrepos # 路径刚好反过来就好了!

    五、Win 客户端连接

    shell > iptables -A INPUT -p tcp --dport 3690 -j ACCEPT # 开放 TCP 3690 端口
    shell > service iptables save

    1、下载、安装小乌龟 ( TortoiseSVN )

    2、建立工作目录,右键 Checkout --> URL ( svn://192.168.12.128/myrepos ) --> 输入用户名、密码 ( wang / wang_pwd )

    3、测试授权,创建一个文件,添加,提交 看看是否很授权吻合 !

    ## 先到此为止 !

  • 相关阅读:
    正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
    ArcGIS10 图框生成和批量打印工具V5.0正式发布
    c# winform未能找到引用的组件“Excel”的解决办法
    图框工具5.0 for ArcGIS10正式发布
    python UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 2: ordinal not in range(128)错误解决办法
    ArcGIS地图文档MXD效率慢的一点建议(转)
    ArcGISEngine实现图层输出kml
    云南云测采用本人开发所有权辅助建库软件,获得好评
    瑞星发力高端企业级市场 连续中标政府大单 狼人:
    臭名昭著的十种Web恶意攻击软件 狼人:
  • 原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/5336468.html
Copyright © 2011-2022 走看看