zoukankan      html  css  js  c++  java
  • SVN版本控制服务

    1. SVN概述

    1.1 SVN简介

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,设计目的就是取代CVS。

    SVN是ASF(阿帕奇软件基金会)旗下的一款开源产品:

    1.2 常见的版本控制软件

    1.2.1 CVS

    • 逐渐被SVN取代,是CVX的重写版和改写版。

    1.2.2 SVN

    • Subversion

    1.2.3 Git

    • 一个开源的分布式版本控制系统,可以有效、高效的进行项目版本管理
    • Git 是 Linus为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    1.2.4 GitLab

    • 利用 Ruby on Rails(一个开源的版本管理系统),实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
    • 拥有与Github类似的功能,相当于是Git的加强版。

    2. SVN工作原理

    2.1 SVN存储数据的方式

    • BDB(Berkeley DB):
      • 一种事务安全型表类型
    • FSFS:
      • FSFS采用文件系统的方式,替代原来的基于Berkeley DB的实现
      • 因为BDB方式在服务器中断时,有可能锁住数据,所以FSFS方式更安全一点

    2.2 SVN的运行方式及端口

    • 独立服务器
      • 端口:3690
      • 访问方式:SVN://
      • C/S模式
    • 借助Apache运行:
      • 端口:80
      • 访问方式:http://

    2.3 SVN的工作流程

    集中式代理管理的核心是服务器,所有开发者在开始新的一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。

    所有的版本信息都放在服务器上,如果脱离的服务器,开发者基本上是无法工作的。

    经典的SVN工作流程:

    1. 从服务器下载项目组新代码
    2. 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(如果想看看前一个小时修改了哪些代码,就需要这样做了)
    3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

    3. SVN作为单独服务器工作

    3.1 概述

    在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码管理员统一管理这些源程序。

    每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,然后用svn命令进行提交,由源代码库统一管理修改。

    3.2 软件安装

    • 直接yum安装即可
      • subversion
      • httpd
      • mod_dav_svn
    • subversion监听的端口
      • 3690/tcp
      • 3690/udp

    3.3 版本库中的目录及文件详解

    3.3.1 创建版本库

    mkdir /webdept     # 存放版本库的主目录
    
    // 再创建两个版本库
    svnadmin create /webdept/www.hgzerowzh.com
    svnadmin create /webdept/my.hgzerowzh.com
    
    // 查看版本库
    ls /webdept/www.hgzerowzh.com/

    3.3.2 版本库中的文件和目录

    • dav目录
      • 是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有
    • db目录:
      • 所有版本控制的数据存放文件
    • hooks目录:
      • 放置hook脚本文件的目录
    • locks目录:
      • 用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端
    • format文件:
      • 是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
    • conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

    3.3.3 conf目录中的配置文件详解

    • authz:认证权限相关
    • passwd:设置用户名和密码
    • svnserve.conf:服务器配置文件

    svnserve.conf 文件:

    [general]
    anon-access = read      # 设置匿名用户可以读,使用none的话就是匿名用户不可以访问
    auth-access = write     # 认证用户可以写,可以是read,write,none
    password-db = passwd    # 密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库
    authz-db = authz        # 认证权限文件
    realm = hgzerowzh.com   # 登陆提示信息
    
    # 注意:此配置文件的所有内容必须顶格,否则会报错

    passwd 文件:

    [users]   
    shit = shitpass
    hehe = hehepass 
    tom = tompass
    
    # 直接设置用户和密码即可
    # 这里的密码都是明文,没有加密

    authz 文件

    [groups]              # 用户组设置   
    Check = shit,hehe     # 定义组,和组中的成员,成员之间用逗号隔开,用户名必须是在passwd中存在的
    
    [/]                   # /表示当前所在版本库目录,这里代表www.hgzerowzh.com
    top = rw              # 定义tom这个用户的权限
    @Check = r            # @Check表示这个组的权限,就是上面定义的组的成员
    *=                    # 除了上面的有赋予权限成员之外,其他的成员都没有权限
     
    //SVN目录格式:
    //     [/目录名]
    //     @用户组名 =权限
    //     用户名 =权限
    //     *=

    3.4 SVN 的启动

    直接启动所有版本库,也可以选择启动指定的库

    svnserve  -d  -r  /webdept/
    # -d 表示以daemon方式工作
    # -r 表示指定工作根目录,启动所有的版本库
    // 如果只需要启动某一个版本库,可以写成 -r /webdept/www.hgzerowzh.com
    //     这样就表示只启动www.hgzerowzh.com这个版本库了

    3.5 SVN的使用语法

    3.5.1 使用格式

    • svn   [选项]   源码   svn://server_ip/项目名

    3.5.2 常见的选项

    import:将未版本化的文件纳入版本控制并提交                    
    checkout:从版本库中检出一个修订版            
    update:更新工作拷贝 
                                   
    add,delete,copy,move:增、删、复制、移动文件或目录
    
    status:检查状态差异                                     
    diff:检查文件行级详细差异
    revert:恢复                                                           
    resolve:解决冲突
    switch:切换工作拷贝对应的版本库分支   
              
    log:查看历史记录
    list:显示文件目录                                                    
    cat:查看某个文件内容

    3.6 SVN使用示例

    3.6.1 将本地文件导入到SVN

    [root@c7_node_03 ~]# mkdir work
    [root@c7_node_03 ~]# cd work/
    [root@c7_node_03 work]# touch 1.html 2.html
    [root@c7_node_03 work]# cd 
    [root@c7_node_03 ~]# svn import /root/work/ file:///webdept/www.hgzerowzh.com/ -m "first edit"
    Adding         work/1.html
    Adding         work/2.html
    
    Committed revision 1.
    
    # 使用file,仅能在服务器本地导入
    # -m 添加的注释,message
    # 首次加入代码使用import选项,将未版本化的文件纳入版本控制并提交

    3.6.2 代码取出

    checkout 导出获得文件后,导出的文件仍处于SVN版本控制中,与版本库保持关联,比如可以进行svn update 或者 svn commit操作,checkout是第一次用,后面的用法就是更新。

    svn checkout svn://10.0.0.203/www.hgzerowzh.com/ down_source
    # checkout表示从版本库检出一个修订版,这里的down_source如果本地不存在则会自动创建
    
    // 之后输入用户名和密码即可

    3.6.3 代码添加

    • commit选项:
      • SVN的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加、删除、命名、移动等操作。
      • 开发项目时,会在工作拷贝中修改项目的代码,然后总是要把修改之后做过的改动又存回到项目仓库中,这个过程称之为“提交”
      • 提交是将对工作拷贝所作的所有改动发送并存储到中央项目仓库中。
    • add选项
      • 向文件拷贝所在的文件夹中添加新的文件,并作出标识,是新添加的,下一步提交时将一并提交到subversion版本库中。
      • 简单的说就是将一新文件加入svn,添加再提交后该文件就进入subversion版本中去了。

    // 在本地down_source目录中添加一些新文件
    cd down_source
    touch 3.html
    echo shit >> 3.html 
    
    // 将新内容添加到SVN服务,并提交
    svn add 3.html 
    svn commit -m "second edit"

    4. SVN+Apache 

    4.1 SVN+Apache的基本工作原理

    • SVN搭配Apache时,Apache需要使用mod_dav_svn这个模块
    • mod_dav_svn:可以让版本库通过http协议实现网站展示
    • 直接yum安装这个模块即可:yum  install  mod_dav_svn  -y
    •  SVN+Apache需要密码验证支持,用htpasswd工具生成即可

    4.2 配置Apache支持SVN

    4.2.1 配置Apache

    vim /etc/httpd/conf.d/subversion.conf
    <Location /webdept>
            DAV svn                               # 使用SVN模块
            SVNParentPath /webdept                # SVN的根目录
            AuthType Basic                        # Basic的认证方式
            AuthName "www.hgzerowzh.com website"  # 认证提示信息
            AuthUserFile /webdept/svn/passwd      # 用户密码文件
            AuthzSVNAccessFile /webdept/svn/authz # 访问控制权限文件
            Require valid-user                    # 合法用户才能访问
    </Location>

    4.2.2 创建用户passwd文件

    [root@c7_node_03 ~]# cd /webdept/
    [root@c7_node_03 webdept]# mkdir svn
    
    // 创建两个用户并设置密码
    [root@c7_node_03 webdept]# htpasswd -c -m /webdept/svn/passwd hguser
    New password: 
    Re-type new password: 
    Adding password for user hguser
    [root@c7_node_03 webdept]# htpasswd -b -m /webdept/svn/passwd hguser2 hgzero2
    Adding password for user hguser2
    
    [root@c7_node_03 webdept]# cat /webdept/svn/passwd 
    hguser:$apr1$N025THp3$Qyvk75AplROVFu53fnldm/
    hguser2:$apr1$q0qNVtcm$u6EHKtd6vJmC0/fJVj7XN/

    4.2.3 创建权限authz文件

    vim /webdept/svn/authz
    [groups]
    all = hguser,hguser2
    
    [/]                      # 表示所有仓库的根目录下
    #hgzero1 = rw
    
    [www.hgzerowzh.com:/]    # 表示www.hgzerowzh.com这个仓库所有用户都可读写
    @all = rw
    
    [my.hgzerowzh.com:/]   
    hguser = rw
    hguser2 = rw

    4.3 启动服务并测试

    • 修改/webdept目录的属主和属组
      • chown -R apache.apache /webdept
    • 然后直接启动Apache
    • 在浏览器键入 http://10.0.0.203/webdept/www.hgzerowzh.com/
      • 然后在弹出的窗口键入用户名和密码即可访问

    5. TortoiseSVN的使用

    没什么好说的,大致流程如下

    checkout --> 修改 --> add --> commit

  • 相关阅读:
    【计算机网络】宽带、基带传输
    【操作系统】多道程序的理解
    【操作系统】操作系统的理解
    NLP学习常用的网页链接
    linux下常用FTP命令 1. 连接ftp服务器[转]
    shell运行java/Jar 脚本
    jsp验证码
    用javascript实现的验证码
    eclipse设置高亮显示的颜色
    oracle 导出
  • 原文地址:https://www.cnblogs.com/hgzero/p/12890928.html
Copyright © 2011-2022 走看看