SVN之于GIT的理论优势
SVN之于GIT的理论优势
目录 |
使用SVN管理代码 SVN 客户端:TortoiseSVN 服务器:VisualSVN Server 管理证书 创建用户、用户组 创建仓库 下载仓库(checkout) 提交(push)、更新(pull) 查看历史记录 本地撤销、撤销历史提交、回退版本 忽略文件(本地变化) 创建分支(云端变化) 合并分支 解决冲突 备份 SVN托管平台 展开 |
SVN
官网:https://subversion.apache.org/
SVN(SubVersion)是Apache下一个开源的中心化版本控制系统,采用客户端/服务器架构存放项目仓库(仓库 = 代码 + 历史)。和分布式的Git相比,中心化的SVN有以下的诸多特点:
·中心化架构,轻量简单,适合中小规模的项目
·客户端本地不存储历史文件,节省空间(已有的记录不会自删)
·SVN更像是一个公共云端文件系统,使用http/DAV协议驱动
·拥有连续的整数版本号(修订号)
·弱化了“分支”的概念,svn分支实质上就是文件夹的拷贝,方便切换
·中心化的管理模式允许更精细的权限划分
·每一级目录都可以单独同步
·中心化存储易造成单点故障,需要定期备份
客户端:TortoiseSVN
官网:https://tortoisesvn.net/
TortoiseSVN是Windows下最流行的SVN客户端GUI工具,它的特点是基于Windows Explorer(文件资源管理器),通过文件图标,上下文菜单等形式实现SVN的功能,不用打开额外的应用程序。
服务器:VisualSVN Server
官网:https://www.visualsvn.com/server/
VisualSVN Server是Windows下一个简单易上手的SVN服务器兼GUI软件,支持web访问。
服务启动后,Visual SVN会自动在系统的“证书管理器”中添加一份以主机名为域名的根证书,证书的位置为“受信任的根证书颁发机构”,也就是非出厂自带的第三方自签名证书的存放位置。可以通过https安全访问这个域名,如下图是我的主机名证书。
管理证书
VisualSVN Server推荐用https,默认是基于主机名临时签发的自签名证书,可以在设置中更换。同时推荐在network面板中勾选“Automatically redirect HTTP to HTTPS(listen on port 80)”兼容http。
创建用户、用户组
打开VisualSVN Server Manager,添加用户。用户名和密码即可以下载svn仓库,也可以登录web网页。
点击添加用户组,输入组名,添加组成员。
后期可在任何文件夹的Properties中设置任何用户/用户组的读/写权限。
创建仓库
打开VisualSVN Server Manager,添加仓库。仓库类型选择第一个常规FSFS即可,第二个VDFS是VisualSVN基于FSFS的私有格式,一般用不到。
选择空仓库,后期根据项目需求设置目录结构,不必采用trunk、branches、tags的结构。
初始化用户权限,选择默认,以后再根据不同的目录结构分配权限。
下载仓库(checkout)
输入仓库的URL以及拷贝到本地的位置,Fully recursive指递归拷贝所有文件,HEAD revision指最新版本。
下载成功后,本地目录中有一个.svn的隐藏目录是用来存放仓库的元数据,不要碰它。
提交(push)、更新(pull)
空白处右键菜单中,SVN Update是从云端拉最新代码,SVN Commit是提交本地更新的代码。提交面板中,在Changes made中勾选需要提交的文件,或点击All全选。
注意,如果选中某个文件点击更新(而不是空白处),只会更新这个文件。
查看历史记录
可以从客户端(Tortoise)和网页端(Visual)2种途径查看仓库的历史记录。
1.TortoiseSVN客户端上选择show log
2.浏览器中访问VisualSVN网页端
本地撤销、撤销历史提交、回退版本
·本地撤销:撤销本地未提交的更新
·撤销历史提交:撤销某次提交的变更,可能引起冲突
·回退版本:恢复到某个版本,相当于若干次“撤销历史提交”
这3个概念容易混淆(3者的英文都包含“Revert”),首先,“本地撤销”就是将所有还未提交的变动撤销掉,对云端无任何影响:上下文菜单中点击Revert,然后选择要撤销的文件。
之后可以观察到文件图标的变化:
然后,“撤销历史提交”是指选择历史记录中的某条记录,撤销该条记录的变更,形成新的变更,如果这条记录是很久以前的,撤销时候可能会引起冲突。同样会形成新变更的是“回退版本”,后者实质上是若干次“撤销历史提交”的总和,即指定版本到最新版本之间的每次提交,所以“回退版本”不会引起冲突。
这两个操作需要在历史记录窗口中选择某历史版本,右键选择Revert changes from this revision或者Revert to this revision。
忽略文件(本地变化)
Git通过.gitignore忽略文件,TortoiseSVN通过对文件右键菜单中选择TortoiseSVN > Add to ignore list来实现,tortoise会帮你添加进svn:global-ignore中。
注意,忽略设置完后要提交,以同步云端(目录的属性变化)。
创建分支(云端变化)
SVN中创建分支的实质就是拷贝目录,所以有多种方式可以切分支,最简单的方式是在TortoiseSVN的Repo-browser中,对想要拷贝的目录(可以是根目录)右键选择copy to拷贝到新目录,从而创建所谓的分支。
注意,拷贝后只在服务端生效,需要SVN update一下同步到本地。
合并分支
和Git一样,SVN有好几种合并的方式,但多数情况下都是把分支中的修改合并到主干上来,本文只介绍这一种主要情况:在主干目录右键选择merge,选择第一个选项Merge a range of revisions。
一路下一步确定源和目标的范围,最后点击Test merge测试是否有冲突,如果没有则顺利合并。
注意:可以合并文件也可以合并整个文件夹。
解决冲突
无论是拉代码还是合并代码都有可能出现冲突,按照官方的说法,有3种类型的冲突:
·文件冲突:通常发生在文件同一行被多个人修改后
·属性冲突:文件/文件夹属性被改变时,比如忽略属性
·树冲突:移动/删除/重命名时易发生
注意,建议养成每次开始改动前先更新代码的习惯,从而减少冲突的可能性。
备份
因为SVN“中心化”的天然特性,需要定期备份避免数据丢失。在VisualSVN Server上对某个仓库选择Backup,存储为.vsvnbak格式的文件,最好发送到其他机器上。
SVN托管平台
·Github对SVN的支持:https://docs.github.com/en/github/importing-your-projects-to-github/support-for-subversion-clients
·SVNBucket(国内):https://svnbucket.com/
·SilkSVN:https://sliksvn.com/
(SVN真香)