热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SVN自动化

SVN自动化正文共:5007 字预计阅读时间: 13 分钟平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对
SVN自动化

正文共:5007 字

预计阅读时间: 13 分钟

平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对git理解也算特别深刻,而转到SVN发现是类似的,所以借此机会内化一下SVN的处理。

文章内容的结构会先理清楚SVN的声明周期,接着会在Centos下搭建SVN服务,接着创建一个项目并使用客户端手动进行SVN操作,最后使用shell命令进行自动化上传。

SVN生命周期

  • 创建版本库首先创建版本库,版本库其实就是一个空间,用于开发者存储所有的工作成果,版本库不仅可以放文件,还会保留每次修改的历史记录,每个文件的变动历史。

  • 检出 CheckoutCheckout会从版本库中创建一个工作副本,工作副本是开发者的私人工作空间,可以进行内容修改,然后提交到版本库中。

  • 更新 updateupdate用来更新版本库,该操作会将工作副本与版本库进行同步。因为版本库由整个团队共用,当他人提交了自己的修改后,自己的工作副本就过期了。此时就需要还是用update更新操作从版本库中拉取最新的代码更新到自己的工作副本中。

  • 执行变更当你检出Checkout获得自己的工作副本后,通常会进行编辑等操作,此时就发生了变更,变更的内容只有通过commit操作才会成为版本库的一部分。删除操作也一样,如果没有进行commit操作,版本库中的文件是不会删除的。

  • 复查变化当你对工作副本进行修改后,此时你的工作副本就与版本库不相同,此时在commit前复查一下自己的修改比较好status操作会列出当前工作副本中所进行的改动,status操作只提供一个变动列表,但并不会显示详细信息。

  • 修复错误当你对工作副本做了很多修改后,突然不想要这些修改了,可以执行revert操作,revert操作会重置对工作副本的修改,他可重置一个或多个文件或文件夹,也可以对整个工作副本进行重置。revert操作UI将销毁待变革列表并将工作副本恢复到原始状态。

  • 解决冲突合并时,可能发生冲突。merge操作会自动处理可以安全合并的内容,其他会被当做冲突,如hello.py文件在一个分支上被修改了,在另一个分支上被删除了,这种情况需要人为进行处理,resolve操作可以帮助你找到冲突,并告诉版本库应该如果处理这些冲突。

  • 提交更改commit操作用来将更改从工作副本到版本库,这个操作会修改版本库中的内容,其他开发者可以通过更新他们的工作副本来查看这些修改。在提交前,这些修改必须添加到待变更列表中,列表中记录了将会被提交的改动,在提交时通常会提供可以提供一个注释来说明为何会进行这些修改。commit是原子操作,,要买完全提交成功,要么失败回滚,不会出现提交到一半的情况。

  • Centos搭建SVN服务

    SVN分成两块,一块是server进程,通常在服务器上用于与SVN客户端交互,另一块就是SVN客户端client进程,即开发者使用的,开发者使用SVN通常就是使用client端输入相应的SVN命令与Server端交互,以实现相应的效果,这里我们先来搭建SVN服务,即Server端,流程比较简单。

  • 下载安装SVN服务端,在Centos中,使用yum一步完成



    1. yum install -y subversion


  • 创建一个目录,使用svnadmin将其设为SVN的版本库



    1. mkdir -p /home/svn/project


    2. svnadmin create /home/svn/project/


  • svnadmin将该目录设置为版本库后,就会在该目录中生成相应的文件,这里会在 /home/svn/project生成相应的目录,其中conf目录下有三个比较重要的文件,分别为: authz权限配置文件 passwd用户名口令文件 svnserver.conf svn服务综合配置文件

  • 配置authz, vim/home/svn/project/conf/authz,输入如下内容



    1. [groups]            


    2. #用户组


    3. admin = admin,root,test  


    4. #用户组所对应的用户


    5. [/]                


    6. #库目录权限


    7. @admin = rw        


    8. #用户组权限


    9. *=r              


    10. #非用户组权限


    [groups]配置段中配置行格式为: <用户组> = <用户列表>版本库路径权限段的段名格式为: [<版本库名>:<路径>],如果为 [/]表示整个svn目录,通常用单库svnserver方式

  • 配置用户口令文件passwd,输入如下内容:



    1. [users]


    2. # harry = harryssecret


    3. # sally = sallyssecret


    4. admin = Admin1234


    5. root = root1234


    6. test = test1234


  • 配置svn服务综合配置文件svnserver.conf



    1. [general]


    2. #匿名访问的权限,可以是read,write,none,默认为read


    3. anon-access=none


    4. #使授权用户有写权限


    5. auth-access=write


    6. #使用哪个文件作为账号文件


    7. password-db=passwd


    8. #使用哪个文件作为权限文件


    9. authz-db=authz


    10. #认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字


    11. realm=/home/svn/project


    该文件仅由一个[general]配置段组成。

  • anon-access: 控制非鉴权用户访问版本库的权限,取值范围为&#8221;write&#8221;、&#8221;read&#8221;和&#8221;none&#8221;。 即&#8221;write&#8221;为可读可写,&#8221;read&#8221;为只读,&#8221;none&#8221;表示无访问权限。 缺省值:read

  • auth-access: 控制鉴权用户访问版本库的权限。取值范围为&#8221;write&#8221;、&#8221;read&#8221;和&#8221;none&#8221;。 即&#8221;write&#8221;为可读可写,&#8221;read&#8221;为只读,&#8221;none&#8221;表示无访问权限。 缺省值:write

  • authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径。 缺省值:authz

  • realm: 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的 认证域相同,建议使用相同的用户名口令数据文件。 缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。

  • 然后就可以启动SVN服务器了,命令为:



    1. svnserve -d -r 目录 --listen-port 端口号


    -r: 配置方式决定了版本库访问方式。

    &#8211;listen-port: 指定SVN监听端口,不加此参数,SVN默认监听3690

    具体而言:



    1. svnserve -d -r /home/svn/project/


    -r参数配置不同,SVN启动方式不同,SVN可以以两种不同的方式访问。

    第一种:-r直接指定到版本库,这种模式称为单库svnserver方式



    1. svnserve -d -r /home/svn/project/


    authz配置文件对应版本库权限的配置通常为:



    1. [groups]


    2. admin=user1


    3. dev=user2


    4. [/]


    5. @admin=rw


    6. user2=r


    这种情况下,一个svnserver只能为一个版本库工作。访问地址通常为 svn://192.168.0.1/,这样就可以方位project版本库了

    第二种:-r指定版本库的上级目录,称为多库svnserve方式



    1. svnserve -d -r /home/svn


    这种情况下,一个svnserve可以为多个版本库工作,但创建情况与上面讲解的内容有所不同,需要做一些调整。

    authz配置文件中对版本库的权限配置通常为:



    1. [groups]


    2. admin=user1


    3. dev=user2


    4. [project:/]


    5. @admin=rw


    6. user2=r



    7. [project01:/]


    8. @admin=rw


    9. user2=r


    如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录。

    使用类似这样的URL:svn://192.168.0.1/runoob 即可访问runoob版本库。

    此时可以通过命令查看centos中是否运行起了SVN相应的进程



    1. ps -aux | grep svn


  • 配置防火墙端口,你的SVN进程指定了使用哪个端口,防火墙要相应的开启它 centos6中防火墙其实是iptables,centos7中防火墙为Firewalld,如SVN默认是3690端口,则防火墙要开放3690端口。配置完防火墙后,记得重启。

  • SVN多库svnserve方式

    上面的内容没有详细的讲清楚SVN多库模式,即多个SVN版本库被管理,多库模式才是实际中常见的模式,所以这里具体来实践一下,首先mkdir创建多个目录,然后使用svnadmin在这些目录下创建对应的版本库,如下:



    1. mkdir /home/svn/Resource_1


    2. mkdir /home/svn/Resource_2


    3. svnadmin /home/svn/Resource_1


    4. svnadmin /home/svn/Resource_2


    接着为了方便配置,将其中一个版本库中的配置文件拷贝下来,如拷贝Resource_1下的配置文件,这里拷贝到/home/svn/conf中,此时/home/svn/conf中就有如下文件



    1. [root@localhost conf]# ls


    2. authz  passwd  svnserve.conf


    3. [root@localhost conf]# pwd


    4. /home/svn/conf


    先修改authz文件,规则一样,<用户组>=<用户名>,不同的SVN版本库可以指定不同的用户组,给予不同的权限,如下



    1. [groups]



    2. admin=root


    3. user=test



    4. [Resource_1:/]


    5. @admin=rw



    6. [Resource_2:/]


    7. @user=rw


    上面的配置指明,admin用户组下的用户才有权限操作Resource1,而user用户组下的用户才有权限操作Resource2,admin用户组下只有一个名为root的用户,user用户组下只有一个名为test的用户。

    接着编辑passwd文件,定义不同用户的账号和密码



    1. [users]


    2. root=root123


    3. test=test123


    最后编写总配置文件svnserve.conf,指定要使用的配置文件,svnserve.conf关键配置如下:



    1. [general]


    2. anon-access = none


    3. auth-access = write


    4. password-db = passwd


    5. authz-db = authz


    最后,最重要的就是SVN启动方式,启动时要指定svn版本库的上层目录,然后还要指定对应的配置文件



    1. svnserve -d -r /home/svn/ --config-file /home/svn/conf/svnserve.conf


    这样所有版本库对应的配置都是 /home/svn/conf/svnserve.conf,管理起来非常方便。

    使用SVN客户端

    windows的SVN客户端使用比较简单,因为有比较成熟的客户端,使用比较简单,本人使用的为Mac,在Mac下当然也有SVN客户端,但我更喜欢命令行,所以使用的方式都是以命令行的方式进行的。

    Mac下安装SVN客户端



    1. brew install svn


  • 第一步检出checkout,复制版本库,在本地生成对应的副本



    1. svn checkout svn://192.168.100.62 --username=admin


    https://raw.githubusercontent.com/ayuLiao/images/master/svn1.png

  • 修改自己的工作副本,如通过touch来创建一个名为test的文件,使用add命令加载进内容,然后再用commit命令将add命令添加的内容体检,简单命令如下:



    1. svn add test.txt


    2. svn commit -m 'touch test.txt'


    命令非常简单。

  • 如果你与多人合作,此时在编写代码时,一个好的习惯就是在编写前update一下SVN项目,保证自己工作副本中的代码是最新的。



    1. svn update .


    小结

    考虑字数原因,到这里就先系统的介绍SVN服务端与客户端的情况,下一篇会通过shell与python分别写两个思路不同的脚本来实现自动上传

    参考文章

    SVN 教程http://www.runoob.com/svn/svn-tutorial.html

    CentOS 7 安装配置SVN服务器https://www.jianshu.com/p/4e3dd253a209


    推荐阅读
    • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
      本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • Nginx使用AWStats日志分析的步骤及注意事项
      本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
    • Vagrant虚拟化工具的安装和使用教程
      本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
    • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
    • Centos下安装memcached+memcached教程
      本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
    • 计算机存储系统的层次结构及其优势
      本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
    • 开发笔记:计网局域网:NAT 是如何工作的?
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
    • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
    • SpringBoot整合SpringSecurity+JWT实现单点登录
      SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
    • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
    • 单页面应用 VS 多页面应用的区别和适用场景
      本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
    • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
    • Linux下安装免费杀毒软件ClamAV及使用方法
      本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
    author-avatar
    通贯戬_461
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有