Git与SVN对比
一、版本控制器的作用
- 协同开发
- 多版本控制,版本回退
- 问题定位排查
二、常见版本控制器
- 分布式版本控制工具:git
- 集中式版本控制工具:SVN
三、git与SVN的区别
- git是分布式的,svn是集中式的
- git分布式模式,客户端完整备份。大部分操作在本地完成,不需要联网
- svn是集中式的,需要联网操作
- git内容按原数据方式存储,而svn是按文件
- git每一次提交都存储快照:保存变化文件的快照,没有变化的文件只保存之前快照的索引
- svn存储文件差异:基于差异的版本控制,存储每个文件与初始版本的差异
- git完整性更高
- svn分支切换代价大
- svn有全局版本号
SVN笔记
一、SVN概述
- 为什么使用
- 协作开发、远程开发、多版本控制
- 解决之道
- SCM:软件管理配置(对软件源代码进行控制与管理)
- 产品:
- CVS:元老级产品
- VSS:入门级产品
- ClearCase:IBM公司提供技术支持
- SVN:主流产品
- 什么是SVN
- 介绍:
- SVN全称SubVersion,是近年来崛起的版本管理工具,是CVS的接班人。目前,很多公司都在使用SVN作为代码版本管理软件
- 特点:
- 操作简单,入门容易
- 支持跨平台操作(Windows、Linux、MacOS)
- 支持版本回退功能(时间机器)
- 介绍:
- 获取SVN软件
- 属于C/S结构软件(客户端与服务端)
- 服务器端:VisualSVN(https://www.visualsvn.com/)
- 客户端:Tortoisesvn(https://tortoisesvn.net/downloads.html)
二、SVN软件安装
- SVN工作流程
- 服务端软件安装(VisualSVN)
- 服务端软件存储与软件/服务器端
- 安装
- 双击安装
- 下一步,继续
- 下一步,继续
- 下一步,继续
- 下一步,继续
- 下一步,继续,安装完成
三、SVN服务器端配置
- 创建一个项目
- 首先在SVN服务器端创建一个共有目录WebApp作为项目目录
- 在WebA目录下创建Shop文件夹,作为Shop(版本仓库)
- 创建版本仓库,基本语法:
svnadmin create Shop文件夹路径(Shop仓库)
svnadmin create G:/svn/WebApp/Shop
- 创建成功,显示如下目录结构
- 文件目录
- conf:项目配置文件
- db:项目数据
- hooks:钩子文件(同步复制、同步更新)
- locks:追踪目录
- format:版本仓库层次结构
- README.txt:说明文件
- 进行服务端监管
- Apache http://localhost或(ip地址)访问到htdocs目录下的相关文件(监管)
- SVN svn://localhost或(ip地址)访问到相关数据仓库(如Shop仓库)
- 基本语法:
svnserve -d(后台运行) -r(监管目录) 版本仓库目录
svnserve -d -r G:/svn/WebApp/Shop
- 通过以上指令,我们的svn://localhost或ip地址就可以直接只想Shop版本仓库
- 权限控制
- 默认请款修改,SVN服务器是不允许匿名用户上传文件到服务器端的,所以必须更改系统相关配置文件。
四、SVN客户端软件安装与使用
- 获取软件安装包
- 重启
- 安装汉化包:SVN安装汉化包
- 使用客户端连接SVN服务器(Checkout检出)
- 首先在项目目录鼠标右键TortoiseSVN版本库浏览器输出SVN服务器地址
- 右键检出
五、SVN使用详解(三大指令)
- 回顾SVN三大指令
- Checkout检出
- 连接到SVN服务器端
- 更新服务器端数据到本地
- 注意:Checkout只有在第一次链接时操作一次,以后如果进行更新操作请使用Update更新指令
- Commit提交
- 提交本地数据到服务器端
- Update更新
- Checkout检出
六、SVN使用详解(图表集+忽略)
- 图表集
- 常规图标:当客户端与服务器端文件完全同步时,系统会显示以上图标
- 冲突图标:当客户端提交的文件与服务器数据有冲突,系统会显示以上图标
- 删除图标:当服务端数据已删除,那么客户端该文件将显示以上图标
- 增加图标:当我们编写文档已提交到提交队列,那么系统会自动显示以上图表
- 无版本控制图标:当我们编写的文件没有添加到上传队列,系统将自动显示以上图标
- 修改图标:当客户端文件有修改但未提交,此时将自动显示以上图标
- 只读图标:当服务端数据已锁定,吗那么客户端文件见自动显示以上图标
- 忽略功能
- 将不需要进行版本控制的文件添加至忽略列表
- 忽略某个指定文件
- 忽略某类型文件
七、SVN使用详解(版本回退)
- 什么是版本回退
- 有些时候,软件的运行可能使开发者或使用者不满意,这时我们需要把当前版本退回到以前的某个版本
- 版本回退功能
- 项目空白区域点击鼠标右键
- 根据日志进行版本回退
八、SVN使用详解(版本冲突)
- 什么是版本冲突
- 在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题
- 模拟版本冲突
- 解决冲突
- 更新服务器端数据到本地
- index.php:整合后的index.php文件
- index.php.mine:本人修改的index.php文件
- index.php.r6:本地修改前的起始状态
- index.php.r7:别人修改后的文件
- 删除除index.php以外的其他三个文件
- 修改整合index.php冲突文件
- 重新提交数据到SVN服务器,即可解决版本冲突问题
- 更新服务器端数据到本地
九、配置多仓库与权限控制
- 配置多仓库
- 在实际项目开发中,我们可能会同时开发多个项目,如何同时监管多个仓库
svnserve -d -r WebApp(项目总目录)
svnserve -d -r G:/svn/WebApp
- svn://localhost或ip地址访问G://svn/WebApp目录
- Shop项目:svn://localhost/Shop
- Wechat项目:svn://localhost/Wechat
- 权限控制
- 如果想要使用权限空值有一个前提:必须首先开启权限功能在每一个仓库中都以一个conf文件夹,里面有三个文件
- authz文件:授权文件
- 告诉那些用户具有哪些权限
- passwd文件:认证文件
- 标识当前svn系统中某个仓库具有哪些用户以及相应的密码
- ssnserver.conf:配置文件
- 默认情况下,以上两个文件都是禁用的,如需要使用,首先要开启以上两个文件
- authz文件:授权文件
- 开启步骤
- 注释匿名用户的可读写权限
- 开启认证文件与授权文件
- 编写认证文件定义相关用户名与密码
- 编写授权文件
- 测试:输入admin,admin888登录认证
- 如果想要使用权限空值有一个前提:必须首先开启权限功能在每一个仓库中都以一个conf文件夹,里面有三个文件
十、SVN服务的配置与管理
- 配置自启动服务
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
- 创建系统服务,服务名SVNService
- 打开运行,输入cmd指令,打开DOS环境(使用管理员运行)
- 输入指令
- 查看系统服务
- 控制面板管理工具服务
- 启动服务
- 运行成功代表开启SVN监管服务
- 创建批处理文件
- 启动服务:net start 服务名称
- 停止服务:net stop 服务名称
- 删除服务:sc delete 服务名称
- 以上功能在实际详谬开发中经常使用,所以可以封装为.bat批处理文件,效果如下:
十一、模拟真实的开发环境
- SVN工作流程
- 钩子程序
- 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是位版本化属性的修改。
- 默认情况下,钩子的目录(版本仓库/hooks)中包含各种版本库钩子模板。
- post-commit.tmpl:事务完成后所触发的钩子程序
- 钩子程序默认情况可以采用批处理指令或Shell指令来进行编写
- 通过批处理指令编写钩子程序
#指定svn服务端工作目录,设置服务器端SVN路径
SET SVN="D:\svn\bin\svn.exe“
#指定Web服务器工作目录,设置服务器端项目运行目录
SET DIR=“D:\server\apache\htdocs\shop”
#通过update指令实时更新数据到DIR目录中
SVN update %DIR%
- 具体使用步骤
- 创建post-commit.bat文件
- 写入上述指令
- 在apache目录创建Shop项目病根小棍SVN服务端数据到本地
- 更新文件到SVN服务器端,可以在Shop目录实时获取到最新数据
- 可以通过虚拟主机形式直接访问更新文件