Svn笔记
文章目录
- Svn笔记
一、Svn简介
1.1、什么是Svn
SVN是Subversion的简称,是一个开发源代码的版本控制系统,相较于RCS、CVS,它是采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
1.2、Svn的使用
1.2.1、如果没有SVN团队开发会出现什么问题?
使用Svn以上问题都可以解决
1.3、常见的版本控制工具
1.3.1、VSS:微软的,主要应用在微软的平台
1.3.2、CVS:早起的版本控制工具
1.3.3、SVN:取代CVS
1.3.4、Git:和SVN差不多,比较火的版本控制工具
二、Svn服务端安装
2.1、官网下载Windows系统的Svn服务端
Svn服务端下载地址:
2.2、安装Svn服务端步骤
Backups:备份,可任意选择备份
2.3、Svn服务端使用【鼠标操作】
2.4、Svn服务端使用【命令行操作】
Svnadmin create [仓库名]
目录结构:
conf 存放当前仓库的配置文件
db 存放仓库版本的控制文件
hooks 仓库脚本
locks 锁文件
svnserve -d -r 路径 启动服务
修改仓库配置
三、Svn客户端安装
3.1、官网下载Svn客户端安装包
Svn客户端下载地址:https://tortoisesvn.net/downloads.html
3.2、官网下载Svn客户端语言汉化包
Svn客户端汉化包下载:https://tortoisesvn.net/downloads.html
根据自己的电脑适配 32Bit还是 64Bit的
3.3、安装Svn客户端以及简单操作使用
3.3、安装Svn客户端语言汉化包,并且设置汉化语言
安装完成之后,又可能自动设置汉化语言,又可能自己设置汉化语言
如果Svn的状态图标不显示的话,就重启下电脑或者查看注册表
四、Svn三大指令操作【Checkout、Update、Commit】
1、回顾Svn三大指令:
1.1、(Checkout) 检出操作
- 链接到SVN服务器端
- 更新服务端数据到本地
- 注意:Checkout只在第一次链接时操作一次,以后如果进行更新操作请使用Update指令
1.2、(Commit)提交操作:
提交本地数据到服务器端
2、模拟项目经理初始化项目
2.1、在目录创建一个Svn服务器端的仓库:shop
Svnadmin create shop
修改仓库shop->conf->snserve.conf配置文件
启动服务:
svnserve -d -r F:\Note\shop --listen-port 8087
2.2、在别的目录下创建一个jingli的目录
初始化项目并且提交:
以上工作大部分是由项目经理完成的,那么如果公司新来一个程序员(李四),他的工作是怎么样操作的那???
2.3、在目录下创建一个叫lisi的目录
检出操作,效果如下:
那么如果假设李四第一天的组长给李四一个模块让李四开发编代码,到下班了李四要提交代码了,这时候就要用到Commit这个提交指令了
李四的一天工作量:
admin.java
package com.lisi.admin
/**
后台管理系统登录接口
*/
public class admin{
public static void main(String[] args){
System.out.printIn("我是李四")
}
}
假设李四提交完一天写的代码了,项目经理想看看这个新来的程序员李四的编码能力,这时候就要用到Update指令了
项目经理心里窃喜:小伙子编码能力还需要多磨练,先干着把
五、Svn图标集与忽略
5.1、Svn图标集
1.1、常规图标集
含义:当客户端文件与服务器端文件完全同步时,系统显示以上图标
1.2、冲突图标
含义:当客户端提交的文件与服务器端数据有冲突,系统会显示以上图标
1.3、删除图标
含义:当服务端数据已删除,那么客户端该文件将显示以上图标
1.4、增加图标
含义:当我们编写文件已添加到提交队列,那么系统将自动显示以上图标
1.5、无版本控制图标
含义:当我们编写的文件没有添加到上传队列时,系统将自动提示以上图标
1.6、修改图标
含义:当客户端文件有修改但未提交,此时将自动显示以上图标
1.7、只读图标
含义:当客户端文件以只读形式存在时,将自动显示以上图标
1.8、锁定图标
含义:当服务端数据已锁定,那么客户都安文件将自动显示锁定图标
1.9、忽略图标
含义:客户端文件已忽略,不需要进行提交上传,那么将自动显示以上图标
5.2、Svn忽略功能
假设项目提交的时候不想提交此文件,效果如下:
假设有超过多个类似.txt文件,实际项目中不可能一个一个点一个一个忽略
六、Svn版本回退
6.1、什么是版本回退
有些时候,软件的运行可能使开发者或使用者不满意,这时我们需要把当前的版本回退到以前的某个版本
6.2、Svn版本回退功能
假设程序员写了一段代码,发现写完的代码自己看着贼不顺眼,并且昨天提交完代码,今天把代码删除了。
这时候项目经理说:你的代码已经提交了,我还没有查看,你就给删除了,我刚才看着还有,但是我还没审核,你抓紧把代码回退一下
这时候程序员重新回退了这个代码,项目经理更新,查看这名程序员写的代码
七、Svn版本冲突问题
7.1、什么是版本冲突
在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题
7.2、模拟版本冲突
假设项目开发组有两个程序员开发同一个项目。
1、在目录下创建一个叫:wangcai的目录,假设这是旺财的电脑并且这个目录是旺财开发的模块
需求如下:上午9:00上班,需要检出
旺财9:30提交代码
2、在目录下创建一个叫:xiaoqiang的目录,假设这是旺财的电脑并且这个目录是小强开发的模块
需求如下:上午9:00上班,需要检出
小强10:00提交代码
综上所述:两个人每天早上上班同一件事情:就是拉取代码,并开发功能,可能只不过旺财老员工,编码能力强,对业务比较熟悉,所以很快提交代码,而小强那公司新员工不熟悉业务,但编码能力还可以,所以提交代码相对于比较慢一些
3、小强提交出现冲突
4、解决冲突问题方法
4.1、合理分配项目开发时间
- 旺财 上午开发
- 小强 下午开发
4.2、合理分配项目开发模块
- 旺财 购物车模块
- 小强 文章模块
4.3、通过Svn解决版本冲突问题
- 更新服务端数据到本地
echo.php:整合后的echo.php文件
echo.php.mine:小强修改后的echo.php文件。
echo.php.r16:是09:00更新时的文件【起始状态】
echo.php.r17:旺财修改后的文件
4.4、要想解决冲突,必须删除除echo.php以外的三个文件
八、Svn配置服务与管理
8.1、配置自启动服务
sc create SVNService binpath="D:\subversion\bin\svnserve.exe --service -r D:/svnroot" start=auto
分析以上命令:
sc create 服务名称 binpath=空格“svnserve.exe -service -r D:/svn/WebApp” start=空格 auto
8.1.1、打开运行,输入cmd指令,打开DOS坏境(请使用超级管理员运行)
8.1.2、输入以下指令
8.1.3、查看系统服务
控制面板管理工具服务
双击运行,启动SVNService服务
如果运行成功代表开启SVN监管服务
8.2、创建批处理文件
启动服务:net stat 服务名称
停止服务:net stop 服务名称
删除服务:sc delete 服务名称
以上功能在实际项目开发中经常使用,所以可以封装为.bat批处理文件。
九、Svn模拟真实环境开发
9.1、Svn工作流程
9.2、钩子程序
所谓钩子就是一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改
默认情况下,钩子的子目录(版本仓库/hooks/)中包含各种版本钩子模板
post-commit.tmpl:事务完成后所触发的钩子程序
钩子程序默认情况可以采用批处理指令或Shell指令来进行编写
9.3、通过批处理指令编写钩子程序
9.3.1、指令svn服务端工作目录
设置服务端SVN路径
SET SVN = "D:\svn\bin\svn.exe"
9.3.2、指定web服务器工作目录
设置服务器端项目运行目录
SET DIR = "D:\server\apache\htdocs\shop"
9.3.3、通过update指令实时更新数据到DIR目录中
SVN update %DIR%
9.3.4、具体使用步骤
第一步:复制 post-commit.tmpl为post-commit.bat文件
第二步:填入相关批处理指令
第三步:在apache目录创建Shop项目并更新SVN服务端数据到本地
第四步:更新文件到SVN服务器端,可以在Shop目录实时获取到最新数据
1)在D盘创建lisi的目录方便演示
第五步:可以通过虚拟主机形式直接访问更新文件
略…