SVN

学习目标和内容

  1. 能够理解版本控制器的作用
  2. 能够理解软件迭代开发的流程
  3. 能够实现SVN服务端的安装
  4. 能够实现SVN的仓库和服务启动
  5. 能够实现SVN的版本备份
  6. 能够理解并解决版本冲突
  7. 能够实现版本的回退
  8. 能够实现同步仓库项目到网站访问目录

SVN概述

subversion 管理代码的版本控制器。

为什么需要版本控制软件

在实际开发当中,会有多人进行开发,如果是之前的开发方式。不能够满足协作开发。

之前的开发中,如果多人进行开发,需要注意两个点:

①分模块、文件开发

②不同时间段开发

使用代码版本控制器,解决以上问题。

xiaoming 后端开发人员 java|php|python

xiaohong 前端开发人员 html、css、JavaScript

xiaohei、xiaobai 测试人员 检测程序的可用性、功能性、易用性~~~

通过代码版本控制器,可以方便的协作各工种的工作流程和配合

解决之道与版本控制软件介绍

vss 微软的一款版本控制器,工作有微软开发平台下的,现在已经不怎么使用了。

cvs 代码版本控制器的鼻祖,老牌版本控制器,有一定的使用缺陷问题,已经被其他产品取代。

svn 集中式代码版本控制器 Apache组织维护 具有代码版本备份和管理,恢复上一个版本代码的功能。

git 分布式代码版本控制器 利纳斯 开发的 现在比较流行的

github 是git的一种仓库,有很多开源代码在上面。可以借用使用上面的一些成型代码

SVN软件执行流程

每天开发工作的流程:

①更新你的代码到最新的版本库(update)

②开发新的代码(coding)

③把新的代码提交的到服务器(add,commit)

版本开发,也被称为迭代开发,一个版本接着一个版本

使用SVN的好处

①可以解决多人协作开发的问题

②可以有版本回溯的功能(后悔药)

③方便领导、项目经理把控项目的进度

SVN软件安装

获取SVN软件

svn官方网址:http://subversion.apache.org/

svn服务器下载地址:https://sourceforge.net/projects/win32svn/

svn客户端下载地址:https://tortoisesvn.net/downloads.zh.html

服务端安装

可以通过源码包方式(稍显繁琐)安装,或者使用yum方式安装

shell > yum install subversion

shell > rpm -qa |grep subversion

如果使用源码编译最新的svn版本,可能遇到的问题,可以参考以下链接的解决方案

https://blog.csdn.net/qq_27868061/article/details/81094187

客户端安装

①命令行客户端

对于运维人员来说,可能更多的是直接操作linux,当安装了subversion后,就具有了svn的命令行操作客户端。所以无需再另外安装。

②UI图形界面客户端

对于开发、测试、UI人员来说,更多的操作系统环境在于windows或者mac。操作UI图形界面客户端。一般可以使用TortoiseSVN(小乌龟)。

三、SVN快速使用

1、版本仓库的创建

仓库是svn用来管理代码的存放的地方。

语法:

创建仓库

svnadmin create “仓库地址”

shell > svnadmin create /usr/local/svnrepo/xxx

服务器监管

在平常使用apache或者mysql等服务时,都需要启动相对应的服务。

svn也同时需要启动仓库服务。

语法:

svnserve -d[启动模式] -r[仓库地址]

shell > svnserve -d -r /usr/local/svnrepo/xxx

使用SVN检出版本仓库

server10 svn服务端

server09 svn客户端

开发人员使用SVN仓库,需要先和仓库进行连接。

shell > cd /usr/local/

shell > mkdir dev

shell > svn checkout svn://192.168.17.xxx/ /usr/local/dev/xxx

如果和仓库建立连接成功,在开发目录里会有一个.svn的隐藏文件夹

开启匿名用户访问权限

在创建的仓库中,conf文件夹是一些可以进行配置的文件。

需要开启权限,否则不能够获取更新同步仓库中的内容。

配置必须要注意顶格写

使用SVN上传代码

①在开发目录中操作

这里实际中,是在不同机器上进行操作,也就是代表每个程序员的开发电脑。

开发一些代码或者添加一些代码

②添加新文件

shell > svn add

tip:删除添加

shell > svn revert path

②提交到远程仓库

shell > svn commit -m"提交日志"

以上没有权限的问题,没有写提交权限。

①没有开启权限

②用户名和密码错误

提交版本成功

SVN使用注意

SVN差异存储机制

查看db/revprops的日志记录

查看db/revs的版本差异记录

如果本地的资源不慎丢失,可以借助版本控制器恢复版本

svn up //默认是最后的版本

如果.svn本地仓库信息文件夹被删除,重新checkout即可。

SVN忽略文件

忽略文件一般要在提交之前,先进行操作

在实际开发中,有很多文件没有必要进行版本的备份。没有必要提交到svn服务器。

①配置文件 包含一些数据库等敏感信息,每个人的配置文件可能稍有不同

②缓存文件 框架执行的缓存文件

③资源文件 文件较大的 没有实际代码意义的文件(图片、原图[psd])

操作步骤:

①在目录中存在需要忽略的文件

语法:

忽略文件

svn propset svn:ignore *.conf .

忽略文件夹 -R 参数递归子文件夹

svn propset svn:ignore cache .

方法一:单独设置

方法二:设置文件

shell > vim .svnignore

编辑忽略配置文件,需要忽略的文件或者文件夹

加载忽略配置文件

shell > svn propset svn:ignore -R -F .svnignore .

SVN版本回退

在开发过程中,会出现需要恢复代码带上一个版本,或者上几个版本的情况。被称为版本的回退,代码版本的切换。

①本地版本的回退和切换

shell > svn update -r 版本号

②更新服务器版本到指定版本

shell > svn merge -r 最新版本:回滚的版本 “”

shell > svn diff “”

shell > svn ci -m”back to rxx”

SVN版本冲突

当项目有多个人开发时,修改了共同文件,但是在提交过程中版本号不一致,就出现了冲突。

①文件不一致

②文件一致,文件内容不一致

操作模拟冲突的过程

①a开发提交

②b开发提交

③解决冲突

输出-P 手动解决

先修改冲突的文件。可能要和同事(冲突版本的提交者)进行沟通,确认有效的版本代码应是什么样的。修改好之后,再提交。来解决冲突。

先查看几个版本文件的差异

直接操作实际真实文件,查看冲突的地方,并修改即可。

总结来说,解决冲突的方式,就是需要在提交代码之前进行更新(update)操作。

可以减少冲突的情况和数量。

五、配置多仓库与权限控制

1、使用指令配置多个仓库

公司的业务发展快速,需要开发多个的项目,同时也需要svn代码版本服务器进行代码的托管。开启多个svn仓库

①创建多个库并启动

shell > svnadmin create /usr/local/repo/java

shell > svnadmin create /usr/local/repo/python

启动库

启动上一级的目录为svn根目录

shell > svnserve -d -r /usr/local/repo

②修改原库的远程地址

shell > svn switch --relocate svn://192.168.17.103/ svn://192.168.17.103/web1

旧地址 新地址

SVN权限控制

①开启权限

shell > vim svnserve.conf

注意anon-access不要注释和删除,会造成日志不可查看的情况

修改为anon-access = none

设置用户和权限

shell > vim authz

设置用户密码

shell > vim passwd

注意要顶格写

②测试权限

shell > svn up --username devops --password devop123 --non-interactive

六、SVN服务配置与管理

1、设置仓库启动脚本

可以编写一个shell脚本。用来启动svnserve要包含start|stop|restart|status

配置自启动

解决问题:

七、SVN钩子程序

hooks一般就是指在做某一个操作,之前做的操作,或者之后做的操作。之前或者之后的这个操作,被称为钩子。钩子程序,钩子方法。

实现功能:

在代码提交到仓库之后,同时更新的代码到网站的访问目录

把仓库的里的项目代码,提交更新之后,同步到/usr/local/nginx/html/myshell

①找钩子脚本并稍作修改

shell > vim post-commit

②首次在网站目录进行和仓库建立联系 svn checkout

③模拟提交操作,自动同步到网站目录

Tip:如果日志乱码解决方法

#防止win下提交中文乱码,可以加入此参数

export LANG="zh_CN.UTF-8"

实际开发上线项目使用SVN

线上不是实现了一个项目的迭代开发