1 svn介绍

都已经用了git,为什么还要介绍svn呢?为了让aicoder.com的学员能够掌握多种的源代码管理工具的使用方法,更快的融入到项目开发中,特整理此文档。

1.1 项目管理中的版本控制问题

通常软件开发由多人协作开发,如果对代码文件、配置文件、文档等没有进行版本控制,将会出现很多问题:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 备份多个版本,占用磁盘空间大
  • 解决代码冲突困难
  • 容易引发BUG
  • 难于追溯问题代码的修改人和修改时间
  • 难于恢复至以前正确版本
  • 无法进行权限控制
  • 项目版本发布困难

1.2 什么是版本控制

版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

1.3 svn是什么?

SVN(Subversion)是一个开源的版本管理工具。

svn是基于客户/服务器模式:

  aicoder实习svn内部培训教程 随笔 第1张 image

复制-修改-合并方案(Subversion默认的模式):

在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。

锁定-修改-解锁方案:

在这样的模型里,在一个时间段里配置库的一个文件只允许被一个人修改。 此模式不适合软件开发这种工作。

2 svn服务端安装配置

2.1 linux(centos7)下搭建svn服务器端

  1. 从普通用户模式进入管理员模式
su
  1. 安装svn
yum install subversion -y

检验是否安装上了

svnser --version
#(注意是两个 - ) 
  1. 创建仓库所在文件夹
mkdir /home/svndata/objects

在该文件夹下创建版本库

svnadmin create /home/svndata/objects
  1. 配置SVN

找到SVN配置文件夹

cd /home/svndata/hgd/conf/ 

成功进入后,输入命令 ls 可以看到该目录下的文件:authz passwd svnserve.conf

  • 配置svnserve.conf
vim svnserve.conf 

进入文件后 按i进行编辑,将下列代码前的#和空格删去,直至顶格

anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #该路径为仓库路径 

编辑结束后 按esc退出修改模式 后再输入:wq,即保存退出

  • 配置passwd
vim passwd

密码文件内容如下:

[user]
username = password

格式:用户名=密码

修改后同上保存退出

  • 配置authz
vim authz

权限有三种:rw(读写)r(只读)w(只能写)

[group]
用户组=成员1,成员2.。。。。 [/]#总权限 @用户组 = 权限 [objects:/]#下级子仓库权限 @用户组 = 权限 
  • 关闭防火墙
systemtcl stop firewalld.service 

关闭开机启动

systemctl disable firewalld.service 

查看防火墙状态

firewall-cmd --state

出现not running就表示关闭成功了

  1. 启动SVN
svnserve -d -r /home/svndata/objects

至此svn就可以用了

  1. 配置SVN的钩子
    进入服务器端仓库的目录,会有hooks目录。
  aicoder实习svn内部培训教程 随笔 第2张 hooks目录

对应修改post-commit文件就是当有提交的时候自动执行的钩子。

例如:

REPOS="$1" REV="$2" #DIRS=$(svnlook dirs-changed $REPOS) #echo $DIRS | grep -c trunk #touch /usr/local/webserver/nginx/html/index.txt /usr/bin/svn up --force /home/svndata/scratchFile/hgd/branches/dev --username "admin" --password "xxxxxxxx" cd /usr/local/webserver/nginx/html rm -rf ./* cd /home/svndata/scratchFile/hgd/branches/dev npm i gulp dist cp -R /home/svndata/scratchFile/hgd/branches/dev/dist/* /usr/local/webserver/nginx/html exit 0 

3 TortoiseSVN客户端

3.1 svn客户端类型

svn客户端需要通过网络访问svn服务端提交文件、查询文件等,可通过以下客户端类型访问svn服务端:

1、使用Subversion提供的客户端命令

使用方式:在命令行下输入命令操作。

2、使用Torotise图形化界面操作(推荐)

3、使用开发工具插件操作(推荐)

3.2 下载安装

TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费。

TortoiseSVN是 Subversion 的 Windows 扩展。它使你避免接触 Subversion 枯燥而且不方便的 Command Line。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里右键操作就可以了

  aicoder实习svn内部培训教程 随笔 第3张 image

下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。

目前最新版为 1.11.0 下载地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/

  aicoder实习svn内部培训教程 随笔 第4张

在语言补丁包中我们可以找到中文的补丁并下载下来:

 

  aicoder实习svn内部培训教程 随笔 第5张 image

运行下载的 TortoiseSVN 安装程序

  aicoder实习svn内部培训教程 随笔 第6张 image

运行下载的 TortoiseSVN 中文语言包

  aicoder实习svn内部培训教程 随笔 第7张 image

3.3 修改默认语言

修改 TortoiseSVN 默认语言

TortoiseSVN 安装完后默认的界面是英文的,我们可以通过设置修改成已安装语言

  aicoder实习svn内部培训教程 随笔 第8张

3.4 浏览仓库

使用Tortoise浏览svn服务端的仓库的内容:

  aicoder实习svn内部培训教程 随笔 第9张 image   aicoder实习svn内部培训教程 随笔 第10张 image   aicoder实习svn内部培训教程 随笔 第11张 image

4 关于工作上手

进入公司后,第一步就是要获取公司的源码快速上手项目。

4.1 获取用户名和仓库地址

可以找老大要一下仓库的地址,并让代码管理员帮忙创建仓库的账号和密码。

5 TortoiseSVN日常使用

5.1 浏览仓库

Repo-browser : 浏览仓库中资源信息

  aicoder实习svn内部培训教程 随笔 第12张

5.2 导入导出

Export :导出项目 ,和checkout区别 (checkout检出后文件,含有.svn隐藏文件夹, 会和SVN仓库交互, export导出,没有.svn隐藏文件夹)

  aicoder实习svn内部培训教程 随笔 第13张 image

import 将本地资源导入到svn 服务器

  aicoder实习svn内部培训教程 随笔 第14张 image

5.3 修改提交

  aicoder实习svn内部培训教程 随笔 第15张 image

5.3.1 Checkout

检出项目,复制项目的副本到本地。

在要检出的目录中右键:

  aicoder实习svn内部培训教程 随笔 第16张 image   aicoder实习svn内部培训教程 随笔 第17张 image

5.3.2 add

在检出的目录中添加文件:

  aicoder实习svn内部培训教程 随笔 第18张 image

图标: 这是一个新文件

n Add to ignore list :添加到忽略列表 (标记该文件不需要版本控制 )

  aicoder实习svn内部培训教程 随笔 第19张 image

n Add : 标记这个文件添加到服务器

  aicoder实习svn内部培训教程 随笔 第20张 image

已经标记要添加到版本库

5.3.3 Commit

当检出目录或子目录中内容有修改,目录图标变为:

提交Commit 提交本地修改至svn服务器:

在检出目录或要提交修改的目录右键:

  aicoder实习svn内部培训教程 随笔 第21张   aicoder实习svn内部培训教程 随笔 第22张   aicoder实习svn内部培训教程 随笔 第23张

 

 

提交后目录中的内容与svn服务同步,目录图标变为:

  aicoder实习svn内部培训教程 随笔 第24张

5.3.4 update

更新仓库的文件到本地

在检出目录或子目标或文件上右键:

  aicoder实习svn内部培训教程 随笔 第25张

5.3.4.1 更新到最新版本

  aicoder实习svn内部培训教程 随笔 第26张

5.3.4.2 更新到指定版本

  aicoder实习svn内部培训教程 随笔 第27张   aicoder实习svn内部培训教程 随笔 第28张

5.3.5 Delete

Delete :删除版本库文件

标记删除后,本地文件删除,标记删除后需要提交。

  aicoder实习svn内部培训教程 随笔 第29张

5.3.6 恢复

在检出目录或子目录操作会记录操作日志,提交前可以回滚操作。

在要回滚的检出目录或子目录中右键:

  aicoder实习svn内部培训教程 随笔 第30张   aicoder实习svn内部培训教程 随笔 第31张

5.4 冲突处理

两个客户端同时修改同一个文件, 改动同一个位置,发生冲突情况

     如果当commit 遇到文件已经过时,说明另一个人可能改动过 ----- update
  aicoder实习svn内部培训教程 随笔 第32张
     db.properties 将本地和服务器合并到一起的文件 (不要直接看) db.properties.mine 我本地自己修改后的文件 db.properties.r16 我修改之前的文件 db.properties.r17 别人修改后的文件 
  aicoder实习svn内部培训教程 随笔 第33张

手动Merge 后,需要将编辑后冲突文件,标记为已经解决 , 再进行commit

  aicoder实习svn内部培训教程 随笔 第34张

6. 分支管理

6.1 合并动作 merge

假如我们在 branch 分支中对文件进行了修改或增加了文件,要 merge 回 trunk 目录中,方法很简单。以上面的例子来说,我们在 D:\runoob01\trunk目录空白处,按下鼠标右键,选择 Merge(合并):

  aicoder实习svn内部培训教程 随笔 第35张

这个画面主要分为三个部份,前面的 From: 与 To: 是要问您打算从 Branch 中的哪个版本到哪个版本,merge 回原来的 trunk 目录中。因此,From 跟 To 的 URL 字段应当都是指定原来 branch 的目录下。剩下的就是指定要 merge 的 revision 范围。以上面的例子而言,我们从 Branch 的 Revision 7 开始 merge 到 Branch 下面的最新版本。您可以透过,Dry run 按钮,试作一次 Merge。这个 merge 只会显示一些讯息,不会真正的更新到 trunk 的目录去。只有按下 Merge 按钮后,才会真正的将 branch 的档案与 trunk 的档案合并起来。

  aicoder实习svn内部培训教程 随笔 第36张

如果您确认这次的 merge 没有问题,您可以直接使用 commit 来将这两个被修改的档案 commit 回 SVN repository 上。如果有问题,您可以直接修改这两个档案,直到确认 ok 了,再行 commit。

6.2 制作 Tag 或是 Release

所谓的 Tag 或是 Release 就是一个特别的版本,因为这个版本可能有特别的意义。例如:这个版本是特别的 Milestone 或是 release 给客户的版本。其实,Tag 与 Release 的作法与 Branch 完全相同。只是 Branch 可能会需要 merge 回原来的 trunk 中,而 tag 及 release 大部分都不需要 merge 回 trunk 中。

举例来说,今天我们的 trunk 做了一版,这个版本被认定是软件的 1.0 版。 1.0版对于开发来说是一个非常重要的里程碑。所以我们要特别为他做一个标记,亦即 Tag。假设,这个 1.0 版是要正式 release 给客户或是相关 vendor,我们要可以为他做一个 Release 的标记。基本上,SVN 只有目录的概念,并没有什么 Tag 的用法。所以您会看到在 SVN 的选单上面,Branch 与 Tag 是同一个项目。以这个 1.0 的例子来说,我们在 runoob01 目录下创建 tags 目录用于存放打 tag 的版本,并提交到版本库,然后在 Trunk 上面,按下鼠标右键,选择 Branch/Tag 的项目:

  aicoder实习svn内部培训教程 随笔 第37张   aicoder实习svn内部培训教程 随笔 第38张

成功的话,您就在对应的 Tag 目录下面建立了一个 v1.0 的目录。当然,如果您这时到 Tag 的目录下面去,会看不到这个目录,您需要在 Tag 目录下面 update 一下,才能看到它。

  aicoder实习svn内部培训教程 随笔 第39张

6.3分支工作流管理

参考老马的git分支管理教程:https://ke.qq.com/course/368468?tuin=1eb4a0a4

7. svn注意事项

  1. 每次操作必须要有cmmit的消息
  2. 所有的提交之前必须经过严格测试,而且必须先获取最新,然后解决冲突后再提交。
  3. 下班的时候要提交一次代码(即使没有完成的代码,最好注释掉不能编译通过的部分,也要提交一次)
  4. 更新的公共代码后,通知一下小伙伴,一起update一下
  5. commit的消息遵守公司的规范,最好严格按照规范走
  6. 公共文件最好获取lock后再修改,然后尽快释放lock
  7. 提交频率最好是一个功能完成后,测试没有问题大了,就立即提交。

参考

  1. AICODER官网地址:https://www.aicoder.com/
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄