svn温习
之前使用了svn,但是感觉还不透测,所以温习一下
svn分为服务端和客户端,
一般代码仓库不归你管,一般服务端时不用安装的,只需要安装个客户端,项目经理给你svn地址即可。
但是为了彻底的的了解一下svn,打算安装一下服务端看看,
svn服务端安装与使用
服务端地址网上查一下即可,这里看一下服务端软件下载好之后长什么样子:
这个版本较高啊
1、配置好安装目录、仓库目录、端口(选8443)、这个版本还有个backups(备份地址),剩余的都选择默认项即可,一直到最后,finish
来看看安装好之后的文件夹
在,webApp中假如要建立一个项目比如叫shop,那么我们称之为shop目录为shop项目的版本仓库,因为在svn中没有项目的概念,只有项目版本仓库的概念
现在的shop只是一个普通的文件夹,还没与svn进行连接,还未转换为版本仓库。
那么如何将shop目录与snv连接,转换为版本仓库呢?
2、创建版本仓库基本语法:(在dos窗口中执行)
svnadmin create shop 文件夹路径(shop仓库)
如果执行没有问题,代表是正常的
我们未执行以上命令之前,shop目录是空的,执行成功之后,shop文件夹下回出现一些文件:
下一步:进行服务器监管
SVN--->svn://localhost或ip地址 访问到相关数据仓库(如shop仓库)
基本语法:同样是在dos窗口执行
svnserve -d(后台运行) -r(监管目录) 版本仓库路径
光标会在闪烁,因为-d参数代表 后台运行 , 如果关闭dos窗口 就失效了。
以上指令,就可以让svn://localhost或ip地址 在浏览器 访问到shop版本仓库文件夹了
不带端口号也行
3、权限控制
默认情况下。svn是不允许匿名用户上传文件到服务器端的,必须更改项目的相关配置文件
那么比如说更改shop版本仓库的配置,就需要在shop文件夹下的conf文件进行相关修改
打开svnserve.conf文件 第19行代码
将前面的#去掉,并且将read 改成write 那么当前仓库 所有的用户就都有 刻=可读、可写权限了
客户端安装与使用:
1、安装:
svn客户端安装地址可以在网上搜索一下,下载下来的软件如下:
64位的,根据自己电脑位数下载对应包
双击svn客户端软件安装包(先不急安装汉化包),点击同意许可证--设置软件安装目录(位置可以随意安装、不需要注意 中英文等情况)---一直下一步到install按钮就可以了--直到finish完毕。
客户端软件安装完之后,注意要重启一下电脑,不然svn(小乌龟)是无法看到的
右键桌面出现:
就代表客户端在安装成功了
如果想安装那个汉化包,就双击那个汉化包安装就ok了,右键,打开svn的设置,语言设置为简体中文即可
2、使用客户端软件连接 svn服务器
检出操作 (与服务器端 牵手)
首先在您的项目目录,右键---》tortoisesvn---》版本库浏览器---》输入svn浏览器服务地址:如(把我刚建立的shop仓库检出一下)
打开这个检出的文件,把隐藏文件打开,会看到一个.svn的文件,这代表我们已经和svn服务器建立联系了
svn常规使用:
先了解图标集,
右键--》svn--》设置---左侧选择 图标集
图标含义:
:客户端文件与服务器端文件完全同步时
:客户端提交的文件与服务器端有冲突
:客户端要提交的文件在服务器端被删除了
:当我们编写的文件已添加到提交队列,还未提交,系统会自动加上这个图标,当我们下一次执行commit提交指令时,就会被提交到服务器端
:当我们编写的文件没有添加到上传队列时,系统会自动添加这个图标
:客户端文件有修改,还未提交时
:当客户端文件以只读形式存在时
:当服务器端文件已锁定,客户端文件就会出现锁定图标,服务器端的locks文件就是控制锁定文件的
:客户端文件已忽略,不需要上传,就会显示该图标
以上就是常用的图标集的解释
下面来尝试一下忽略功能:
我先尝试提交个文件到我的服务端仓库
我尝试提交了一下,出了个错
出现这种问题肯定是SVN服务器出现了问题,需要修改其三个配置文件: 1、svnserve.conf: [general] anon-access = read auth-access = write password-db = passwd authz-db = authz 2、passwd: [users] admin=123 //这代表 一个账号admin 对应的密码是123 3、authz: [groups] [/] admin= rw 出现authorization failed异常,一般都是authz文件或者svnserve.conf里,用户组或者用户权限没有配置好,只要设置[/]就可以,代表根目录下所有的资源,如果要限定资源,可以加上 子目录即可。
然后在提交就会让输入账号密码:输入账号:admin 密码:123 即可,然后再提交就不会报错了
接下来继续尝试忽略功能
右键需要忽略的文件,选tortosesvn,选择增加到忽略列表即可
然后再提交,就不会提交到服务器版本库了
也可以忽略某一类型的文件:
版本回退功能:
我们先在一个文件中加一些文字:
然后提交一下;
我再修改一下内容提交一下
ok,假如我们发现,我们版本2有些错误,想回到1版本,那么我就可以使用版本回退功能,回退到一版本
可以看到有两种回退方式,1、根据日志回退 2、根据版本号回退
那么我们需要查看日志,查看版本号,来进行回退
根据我们提交的日志,选择,后确认回退到某一版本
我真正查看日志时报错了:
解决方案是:
将svnserve.conf里的anon-access=read 改为anon-access=none。
然后就可以正常查看日志了:
假如我想回到1版本,那么我就可以选择1版本的日志,然后点击确认
发现代码变成1版本的内容了
然后再查看一下日志看看
发现当前版本是粗体
然后我又选择最上边的最先版本,3版本,点击确定
代码又变成最新版本了,
那么我们在回退到1版本,更改点东西再提交呢?回事==会是神马==什么情况?来看看
ok,很奈斯,和自己想象的是一样的,版本切换自如,奈斯
下面来说一下版本冲突的解决:
在开发过程中,如果两个人同时修改一个文件,就会出现版本冲突问题。
我们来模仿一下,我现在有一个文件夹已经是最新版本的代码了,然后我再建立一个文件夹,更新一下代码,那么此时两个文件夹(相当于两个人)的内容是一样的
都是版本4,
此时,shop文件夹修改一下文件内容,记得是同文件,比如修改成旺财修改
然后提交一下shop文件夹的svn
然后,我们在shop2文件夹上,未拉取的情况下,修改一下同文件的内容为
此时,shop2,也就是小强去提交了,想想会发生什么情况???
我们发现,小强提交不上去了,提示让更新一下,因为旺财已经把心文件提交上去了,这提示是好的,那么我们尝试更新一下,此时肯定是冲突的!!!
来看看shop2,小强更新一下会发生什么
提示有冲突文件!!!
解决之道:
1、不要在同时间段内安排两个人开发
2、两个人分模块开发,避免开发同一模块
3、如果发生冲突怎么解决,svn会生成三个文件:
除此之外,在原文件会提示出那些地方冲突了:
如果使用vscode编辑器,解决冲突是很方便的!!!
解决冲突之后,记得把生成的三个文件删除掉
我们一般在整合后的文件解决冲突即可
然后再提交就没问题了
配置多仓库:
在项目开发过程中,我们可能同时进行多个项目的开发,那么我们如何进行项目监管呢?
通过svnserve进行仓库监管,但是监管指令只能监管一个文件夹,而不能同时监管多个仓库。。。
答:可以通过监管webAPP总目录来达到监管所有项目的目的:
打开dos窗口,输入以下命令:
SVNserve -d -r D:\svn\webApp
没有报错,光标闪烁,代表监管成功
然后就可以通过svn://localhost或ip地址 来访问webapp仓库了
如果要访问:
shop项目:svn://localhost/shop
WeChat项目:svn://localhost/weChat
这种就称之为配置多仓库
注意,不能把webApp跟文件夹创建为版本仓库,否则会报错,也创建不成,只能在webApp下创建一个文件夹,将其创建为版本仓库了
权限功能配置:
如果使用权限控制,有一个前提是:必须首先开启权限功能
在每一个仓库中,都有一个conf文件夹,里面有三个文件:
authz文件:授权文件
告诉哪些用户具有哪些权限
passwd文件:认证文件
标识当前snv系统中某个仓库有哪些相应的用户以及相对应的密码
默认情况下,以上两个文件都是禁用的,如果要使用,首先需要开启:
svnserve.conf:核心配置文件
开启步骤如下
1、打开svnserve.conf文件
注释掉匿名用户的可读可写权限
2、开启认证文件(passwd)与授权文件(authz)
27和36行,将前面的#号去掉,代表分别开启了认证文件和授权文件 (注意前面的空格也要去掉)
然后保存一下svnserve.conf文件
如何进行授权文件和认证文件的相关配置工作呢?
3、编写认证文件,配置相关用户名和密码
打开passwd(认证文件)
配置一个管理员用户和一个普通用户(admin:123 ziji:123456)
保存一下
4、编写授权文件
打开authz文件
groups:组信息,首先要对仓库进行分组操作
我们创建了两个组,admin组和idcast组
admin组有admin、张三、李四三个用户
idcast组有idcast 一个用户
有了组的配置之后,还需要配置,对应组的权限:
以上配置,代表shop目录下的admin组有可读可写权限,idcast组只有 只读权限 匿名用户只有只读权限
测试一下以上的配置:
新建一个文件夹
拉取shop仓库
然后会弹出让输入账号密码,输入之后,就可以检出了!!!
svn服务配置与管理:
我们以上都是在dos窗口中监听仓库的,如果突然关机了,dos窗口的这个命令还会重启吗?如果不重启就很麻烦。
1、配置自启动服务:
sc create SVNservice binpath= "D:\subversion\bin\svnserve.exe --service -r D:/svnroot" start= auto
解析一下上述命令:
sc create 服务名称:创建系统服务 服务名称(SVNservice)
binpath= 空格 :制定==指定相关的目录 (当前我们安装的svnserve.exe指令的地址 )
--service :以服务的形式进行运行
-r:监管服务 监管那个目录呢?D:/svn/webApp目录
start= 空格auto :自启动服务
此命令需要用超级管理员在dos窗口执行
在控制面板中的管理工具中的服务中可以看到这个服务
windows系统上创建批处理文件
启动服务 net start 服务名称
停止服务 net stop 服务名称
删除服务 sc delete 服务名称
把以上三个指令分别创建个text文件放进去,后缀改成.bat 然后我们只需要点击此文件 就可以 运行相对应的指令了
模拟正式开发环境:
我们一直没提到过hooks文件,钩子程序,它可以做到,同步更新的作用,
我们打开hooks文件夹看一下:
这里只讲,如何通过钩子程序实现数据的同步更新,已达到自动化部署
post-commit.tmpl:事务完成后所出发的钩子程序
钩子程序默认可以使用批处理程序和shell指令来进行编写
通过批处理指令来编写钩子程序
1、指定svn的工作目录
设置服务器端svn路径
SET SVN="D:\svn\bin\svn.exe"
2、指定web服务器工作目录
SET DIR="D:\server\apache\htdocs\shop"
3、通过update指令实时更新数据到DIR目录中
svn update %DIR%
4、将post-commit.tmpl复制一份,后缀改成bat
然后将里面的内容清空
将三个命令放进去:
。