学习目标和内容
subversion 管理代码的版本控制器。
在实际开发当中,会有多人进行开发,如果是之前的开发方式。不能够满足协作开发。
之前的开发中,如果多人进行开发,需要注意两个点:
①分模块、文件开发
②不同时间段开发
使用代码版本控制器,解决以上问题。
xiaoming 后端开发人员 java|php|python
xiaohong 前端开发人员 html、css、JavaScript
xiaohei、xiaobai 测试人员 检测程序的可用性、功能性、易用性~~~
通过代码版本控制器,可以方便的协作各工种的工作流程和配合
vss 微软的一款版本控制器,工作有微软开发平台下的,现在已经不怎么使用了。
cvs 代码版本控制器的鼻祖,老牌版本控制器,有一定的使用缺陷问题,已经被其他产品取代。
svn 集中式代码版本控制器 Apache组织维护 具有代码版本备份和管理,恢复上一个版本代码的功能。
git 分布式代码版本控制器 利纳斯 开发的 现在比较流行的
github 是git的一种仓库,有很多开源代码在上面。可以借用使用上面的一些成型代码
每天开发工作的流程:
①更新你的代码到最新的版本库(update)
②开发新的代码(coding)
③把新的代码提交的到服务器(add,commit)
版本开发,也被称为迭代开发,一个版本接着一个版本
①可以解决多人协作开发的问题
②可以有版本回溯的功能(后悔药)
③方便领导、项目经理把控项目的进度
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用来管理代码的存放的地方。
语法:
创建仓库
svnadmin create “仓库地址”
shell > svnadmin create /usr/local/svnrepo/xxx
在平常使用apache或者mysql等服务时,都需要启动相对应的服务。
svn也同时需要启动仓库服务。
语法:
svnserve -d[启动模式] -r[仓库地址]
shell > svnserve -d -r /usr/local/svnrepo/xxx
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文件夹是一些可以进行配置的文件。
需要开启权限,否则不能够获取更新同步仓库中的内容。
配置必须要注意顶格写
①在开发目录中操作
这里实际中,是在不同机器上进行操作,也就是代表每个程序员的开发电脑。
开发一些代码或者添加一些代码
②添加新文件
shell > svn add
tip:删除添加
shell > svn revert path
②提交到远程仓库
shell > svn commit -m"提交日志"
以上没有权限的问题,没有写提交权限。
①没有开启权限
②用户名和密码错误
提交版本成功
查看db/revprops的日志记录
查看db/revs的版本差异记录
如果本地的资源不慎丢失,可以借助版本控制器恢复版本
svn up //默认是最后的版本
如果.svn本地仓库信息文件夹被删除,重新checkout即可。
忽略文件一般要在提交之前,先进行操作
在实际开发中,有很多文件没有必要进行版本的备份。没有必要提交到svn服务器。
①配置文件 包含一些数据库等敏感信息,每个人的配置文件可能稍有不同
②缓存文件 框架执行的缓存文件
③资源文件 文件较大的 没有实际代码意义的文件(图片、原图[psd])
操作步骤:
①在目录中存在需要忽略的文件
语法:
忽略文件
svn propset svn:ignore *.conf .
忽略文件夹 -R 参数递归子文件夹
svn propset svn:ignore cache .
方法一:单独设置
方法二:设置文件
shell > vim .svnignore
编辑忽略配置文件,需要忽略的文件或者文件夹
加载忽略配置文件
shell > svn propset svn:ignore -R -F .svnignore .
在开发过程中,会出现需要恢复代码带上一个版本,或者上几个版本的情况。被称为版本的回退,代码版本的切换。
①本地版本的回退和切换
shell > svn update -r 版本号
②更新服务器版本到指定版本
shell > svn merge -r 最新版本:回滚的版本 “”
shell > svn diff “”
shell > svn ci -m”back to rxx”
当项目有多个人开发时,修改了共同文件,但是在提交过程中版本号不一致,就出现了冲突。
①文件不一致
②文件一致,文件内容不一致
操作模拟冲突的过程
①a开发提交
②b开发提交
③解决冲突
输出-P 手动解决
先修改冲突的文件。可能要和同事(冲突版本的提交者)进行沟通,确认有效的版本代码应是什么样的。修改好之后,再提交。来解决冲突。
先查看几个版本文件的差异
直接操作实际真实文件,查看冲突的地方,并修改即可。
总结来说,解决冲突的方式,就是需要在提交代码之前进行更新(update)操作。
可以减少冲突的情况和数量。
公司的业务发展快速,需要开发多个的项目,同时也需要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
旧地址 新地址
①开启权限
shell > vim svnserve.conf
注意anon-access不要注释和删除,会造成日志不可查看的情况
修改为anon-access = none
设置用户和权限
shell > vim authz
设置用户密码
shell > vim passwd
注意要顶格写
②测试权限
shell > svn up --username devops --password devop123 --non-interactive
可以编写一个shell脚本。用来启动svnserve要包含start|stop|restart|status
解决问题:
hooks一般就是指在做某一个操作,之前做的操作,或者之后做的操作。之前或者之后的这个操作,被称为钩子。钩子程序,钩子方法。
实现功能:
在代码提交到仓库之后,同时更新的代码到网站的访问目录
把仓库的里的项目代码,提交更新之后,同步到/usr/local/nginx/html/myshell
①找钩子脚本并稍作修改
shell > vim post-commit
②首次在网站目录进行和仓库建立联系 svn checkout
③模拟提交操作,自动同步到网站目录
Tip:如果日志乱码解决方法
#防止win下提交中文乱码,可以加入此参数
export LANG="zh_CN.UTF-8"
线上不是实现了一个项目的迭代开发