zoukankan      html  css  js  c++  java
  • 版本控制系统-SVN(1)

    1.   SVN介绍

    1.1.  简介

    SVN(subversion),版本管理工具,与CVS一样,SVN是一个可跨平台的开源版本控制系统,Subversion管理随时间变化的数据。这些数据都被放置在一个档案库(repository)中,它会记录每一次文件的变动,这样我们就可以把档案恢复到旧的版本或者浏览文件的变动记录。除了能够存放程序代码外还可以管理其他任何类型的文件,如文本,视频,图片。

    Subversion官网:https://subversion.apache.org

    SVN客户端:http://tortoisesvn.sourceforge.net/

    SVN中文网站:http://svndoc.iusesvn.com/

    中文常见问题解答:https://subversion.apache.org/faq.zh.html

    官方手册:http://svnbook.red-bean.com/

    1.2.  Svn服务端运行方式

    常见的运行方式有以下3种:

    • a、独立服务器,例如:svn://svn.petrochina.org/sadoc
    • b、借助apache,例如:http://svn.petrochina.org/sadoc
    • c、本地直接访问,例如:file:///application/svndata/sadoc

    1.3.  Svn客户端访问方式

    访问方式 说明
    file:/// 直接通过本地磁盘或者网络磁盘访问版本库
    http:// 通过WebDAV协议访问支持Subversion的Apache服务器
    https:// 与http://相似,但是用SSL加密访问
    svn:// 通过TCP/IP自定义协议访问是SVN服务器
    svn+ssh:// 通过认证并加密的TCP/IP自定义协议访问svn服务器

    1.4.  SVN数据格式

    svn存储版本数据有2种方式。BDB(事务安全型表类型)和FSFS(不需要数据库的存储系统)。由于BDB方式在服务器中断时有可能锁住数据,所以还是FSFS方式更安全一点。CVS是基于RCS文件的版本控制系统,每个CVS文件都不过是普通的文件加上一些额外的信息,这类文件会简单重复本地文件的树结构。因此不必担心数据损失,必要的话可以手工修改RCS文件。而SVN是基于关系数据库或一系列二进制文件的(FS_FS),这解决了许多问题(如并行读写共享文件)以及添加了许多新功能,但是数据存储也由此变的不透明。

    1.5.  SVN系统逻辑架构图

     

    1.6.  中央式管理的工作流程

     这种结构的核心是Server,所有开发人员在工作前要先去服务器端获取代码-->开发-->解决冲突-->提交至服务器。如果脱离了服务器就无法正常工作。

    1.7.  运维人员对版本管理系统需要掌握的

    • 安装、部署、维护、排障
    • 简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号
    • 对于版本控制系统,运维人员要相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务

    2.   安装配置

    2.1.  系统环境

    CentOS release 6.6 (Final)
    2.6.32-504.el6.
    x86_64 

    2.2.  安装svn

    由于是内部应用,故用yum安装即可。

    yum install subversion –y

    检查

    rpm -qa subversion
    subversion-1.6.11-15.el6_7.x86_64

    2.3.  配置启动

    建立svn版本库根目录svndata,密码权限目录svnpasswd。

    [root@svn ~]# mkdir -p /application/{svndata,svnpasswd}
    [root@svn ~]# tree /application/svn*                   
    /application/svndata
    /application/svnpasswd
    
    0 directories, 0 files

    启动svn服务指定服务的svn根目录

    [root@svn ~]# svnserve -d -r /application/svndata/
    -d dameon模式

    查看svnserver命令帮助

    [root@svn ~]# svnserve --help
    用法: svnserve [-d | -i | -t | -X] [options]
    
    有效选项: 
      -d [--daemon]            : 后台模式
      -i [--inetd]             : inetd 模式
      -t [--tunnel]            : 隧道模式
      -X [--listen-once]       : 监听一次方式(调试用)
      -r [--root] ARG          : 服务的根目录
      -R [--read-only]         : 强制只读;覆盖版本库配置文件
      --config-file ARG        : 从文件 ARG 读取配置
      --listen-port ARG        : 监听端口
                                 [方式: daemon, listen-once]
      --listen-host ARG        : 监听主机名称或IP地址
                                 [方式: daemon, listen-once]
      -T [--threads]           : 使用线程代替进程 [方式: daemon]
      --foreground             : 在前台运行(调试用)
                                 [方式: daemon]
      --log-file ARG           : svnserve 日志文件
      --pid-file ARG           : 写进程 PID 到文件 ARG
                                 [方式: daemon, listen-once]
      --tunnel-user ARG        : 隧道用户名(默认是当前UID对应的用户名)
                                 [方式: tunnel]
      -h [--help]              : 显示本帮助
      --version                : 显示程序版本信息

    查看svn进程

    [root@svn ~]# ps -ef |grep svn        
    root      2925     1  0 00:51 ?        00:00:00 svnserve -d -r /application/svndata/
    root      2949  2754  0 00:58 pts/0    00:00:00 grep --color=auto svn
    [root@svn ~]# ps -ef |grep svn|grep -v grep
    root      2925     1  0 00:51 ?        00:00:00 svnserve -d -r /application/svndata/

    检查svn端口

    [root@svn ~]# netstat -lntup|grep svn
    tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      2925/svnserve   
    [root@svn ~]# netstat -lntup|grep 3690
    tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      2925/svnserve       
    [root@svn ~]# lsof -i tcp:3690
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    svnserve 2925 root    3u  IPv4  22216      0t0  TCP *:svn (LISTEN)

    2.4.  建立版本库

    创建一个新的subversion项目(版本库)sadoc,

    [root@svn ~]# svnadmin create /application/svndata/sadoc
    [root@svn ~]# ll /application/svndata/sadoc
    总用量 24
    drwxr-xr-x. 2 root root 4096 11月 12 01:02 conf
    drwxr-sr-x. 6 root root 4096 11月 12 01:02 db
    -r--r--r--. 1 root root    2 11月 12 01:02 format
    drwxr-xr-x. 2 root root 4096 11月 12 01:02 hooks
    drwxr-xr-x. 2 root root 4096 11月 12 01:02 locks
    -rw-r--r--. 1 root root  229 11月 12 01:02 README.txt

    查看帮助

    [root@svn ~]# svnadmin help 
    一般用法: svnadmin SUBCOMMAND REPOS_PATH  [ARGS & OPTIONS ...]
    使用“svnadmin help <subcommand>” 得到子命令的帮助信息。
    使用“svnadmin --version”查看程序的版本号和文件系统模块。
    
    可用的子命令: 
       crashtest
       create
       deltify
       dump
       help (?, h)
       hotcopy
       list-dblogs
       list-unused-dblogs
       load
       lslocks
       lstxns
       pack
       recover
       rmlocks
       rmtxns
       setlog
       setrevprop
       setuuid
       upgrade
       verify
    
    [root@svn ~]# svnadmin help create
    create: 用法: svnadmin create REPOS_PATH
    
    在 REPOS_PATH 创建一个新的空版本库。
    
    有效选项: 
      --bdb-txn-nosync         : 在提交事务时禁用fsync [BDB]
      --bdb-log-keep           : 禁用自动删除日志文件 [BDB]
      --config-dir ARG         : 从目录 ARG 读取用户配置文件
      --fs-type ARG            : 版本库类型: “fsfs”(默认)或“bdb”
      --pre-1.4-compatible     : 使用与1.4之前版本兼容的格式
      --pre-1.5-compatible     : 使用 Subversion 1.5 之前版本的格式
      --pre-1.6-compatible     : 使用与 1.6 之前版本兼容的格式

    修改配置文件,允许用户zhang读写访问

    [root@svn ~]# cd /application/svndata/sadoc/conf/
    [root@svn conf]# /bin/cp svnserve.conf svnserve.conf.zhang.$(date +%F)   先备份在修改svnserve.conf
    # anon-access = read   12行
    # auth-access = write   13行
    # password-db = passwd 18行
    # authz-db = authz     25行
    改为
    anon-access = none
    auth-access = write
    password-db = /application/svnpasswd/passwd
    authz-db = /application/svnpasswd/authz
    ------------------------------------------------------------------------------------------
    快速修改:
    sed -i 's/# anon-access = read/anon-access = none/' /application/svndata/sadoc/conf/svnserve.conf
    sed -i 's/# auth-access = write/auth-access = write/' /application/svndata/sadoc/conf/svnserve.conf
    sed -i 's/# password-db = passwd/password-db = /application/svnpasswd/passwd/' /application/svndata/sadoc/conf/svnserve.conf
    sed -i 's/# authz-db = authz/authz-db = /application/svnpasswd/authz/' /application/svndata/sadoc/conf/svnserve.conf

    查看一下,egrep可以同时过滤两个关键字符,相当于grep –E

    [root@svn conf]# egrep "-access|db =" svnserve.conf
    anon-access = none
    auth-access = write
    password-db = /application/svnpasswd/passwd
    authz-db = /application/svnpasswd/authz

    实现刚才修改的内容

    [root@svn conf]# cp authz passwd /application/svnpasswd/
    [root@svn conf]# ll /application/svnpasswd/
    总用量 8
    -rw-r--r--. 1 root root 1080 11月 12 01:25 authz
    -rw-r--r--. 1 root root  309 11月 12 01:25 passwd

    改权限

    [root@svn conf]# chmod 700 /application/svnpasswd/*
    [root@svn conf]# ll /application/svnpasswd/        
    总用量 8
    -rwx------. 1 root root 1080 11月 12 01:25 authz
    -rwx------. 1 root root  309 11月 12 01:25 passwd

    编辑passwd和authz

    1)    vim /application/svnpasswd/passwd
    增加:
    zhang = 123456
    test = 123456
    
    2)    vim /application/svnpasswd/authz
    增加:
    #groups
    zhang_sa = zhang,test1
    zhang_wangguan = test
    #project
    [sadoc:/]  #set project 
    @zhang_sa = rw
    @zhang_wangguan = r
    test = r
    重启svn
    [root@svn svnpasswd]# pkill svnserve
    [root@svn svnpasswd]# killall svnserve
    svnserve: 没有进程被杀死
    [root@svn svnpasswd]# killall svnserve
    -bash: kill: all: arguments must be process or job IDs
    -bash: kill: svnserve: arguments must be process or job IDs
    [root@svn svnpasswd]# svnserve -d -r /application/svndata/
    [root@svn svnpasswd]# ps -ef|grep svn
    root      4225     1  0 18:46 ?        00:00:00 svnserve -d -r /application/svndata/
    root      4227  1824  0 18:46 pts/1    00:00:00 grep svn


    74  yum install subversion –y

       75  rpm -qa subversion

       76  mkdir -p /application/{svndata,svnpasswd}

       77  svnserve -d -r /application/svndata/

       78  ps -ef |grep svn|grep -v grep

       79  netstat -lntup|grep svn

       80  svnadmin create /application/svndata/sadoc

       81  ll /application/svndata/sadoc

       82   cd /application/svndata/sadoc/conf/

       83  /bin/cp svnserve.conf svnserve.conf.zhang.$(date +%F)

       84  ll

       85  vi svnserve.conf

       86  egrep "-access|db =" svnserve.conf

       87  ll

       88  cp authz passwd /application/svnpasswd/

       89  chmod 700 /application/svnpasswd/*

       90  vim /application/svnpasswd/passwd

       91  vim /application/svnpasswd/authz

       92  pkill svnserve

       93  kill all svnserve

       94  svnserve -d -r /application/svndata/

       95  ps -ef|grep svn

       96  svnserve -d --listen-port

       97  svnserve --listen-port

       98  history


    3.   客户端安装TortoiseSVN

    安装完毕后2008需重启。

    (1)建立一个工作目录,如 。

    (2)在工作目录中,选择TortoiseSVN右键菜单“SVN检出”,显示检出对话框,输入cnpack版本库url,检出目录设定为工作目录下的cnpack目录。

    输入在svn的passwd里配置的用户名密码,复选框:Save authertication的意思是tortoiseSVN在subversion内的缺省目录(%APPDATA%Subversionauth)的三个子目录内保存认证信息。

    • svn.simple包含了基本认证方式所需要的认证信息(用户名和密码),密文保存
    • svn.ssl.server包含了SSL信息
    • svn.username里包含了用户名认证的认证信息

    如果想清楚服务器的认证缓存,可以通过TortoiseSVN设置对话框的已保存数据页来实现。如果想清除某一个范围的认证信息,则需要打开那些目录,找到包含要清除的信息的文件并删除。

    查看服务器上的内容:

     

    上传和更新在文件的上级目录,即(1)中新建的那个工作目录。


    3.   svn命令行的使用说明

    3.1.  导入svn原始目录树

    [root@svn ~]# mkdir /data/zhang -p
    [root@svn ~]# cd /data/zhang/;mkdir trunk branch tags –p      #主干,分支,标记#
    [root@svn zhang]# tree 
    .
    ├── branch
    ├── tags
    └── trunk
    
    3 directories, 0 files

    导入svn

    网络导入
    [root@svn zhang]# svn import /data/zhang svn://192.168.233.150/sadoc/ -m "imp tree" #网络导入 认证领域: <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f “root”的密码: 认证领域: <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f 用户名: zhang “zhang”的密码:
    本地导入
    svn import /data/zhang/ file:///application/svndata/sadoc/
    svn import /data/zhang/ svn://192.168.233.150/sadoc/

    注意!  你的密码,对于认证域:

       <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f
    
    只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
    可以保存加密后的密码。请参阅文档以获得详细信息。
    
    你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
    来避免再次出现此警告。
    -----------------------------------------------------------------------
    保存未加密的密码(yes/no)?yes
    增加           /data/zhang/trunk
    增加           /data/zhang/branch
    增加           /data/zhang/tags
    
    提交后的版本为 2

    3.2.  从svn库提取数据(Linux为客户端)

    二次更新时可不加用户名密码

    #svn checkout svn://192.168.233.150/sadoc /data/test --username zhang --password 123456

    4.   svn钩子

    钩子脚本的具体写法就是操作系统shell脚本程序的写法,可以根据自己svn所在的操作系统和shell程序进行相应的开发,钩子脚本就是被某些版本库事件触发的程序,例如创建新版本或修改为被版本控制的属性,每个钩子都存储足够的信息来了解发生的事件,操作对象以及触发事件用户的账号,根据钩子的输出或者返回的状态,钩子程序能够以某种方式控制该动作是否继续执行,停止或挂起。默认情况下钩子的子目录中包含各种版本库钩子模板。

    查看钩子库

    #ls -l /application/svndata/sadoc/hooks

    常用应用

    • 限制上传文件扩展名及大小
    • SVN更新自动周知,途径有MSN,邮件或者短信
    • SVN更新触发实时rsync。
    生活的一大乐趣就是 完成别人认为你不能做到的事情
  • 相关阅读:
    正则表达式
    9.4、分布式进程
    Linux文件编辑工具——VIM
    14 Linux网络管理
    13.Linux系统服务
    12.Linux进程管理
    11.Linux磁盘管理——lvm,raid
    10.Linux磁盘管理
    09.Linux软件包管理——(YUM 、RPM)
    07.Linux 压缩打包
  • 原文地址:https://www.cnblogs.com/daynote/p/8459589.html
Copyright © 2011-2022 走看看