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

  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/hgzero/p/12890928.html
Copyright © 2011-2022 走看看