vlambda博客
学习文章列表

SVN之于GIT的理论优势

SVN之于GIT的理论优势


目录

使用SVN管理代码

SVN

客户端:TortoiseSVN

服务器:VisualSVN Server

管理证书

创建用户、用户组

创建仓库

下载仓库(checkout)

提交(push)、更新(pull)

查看历史记录

本地撤销、撤销历史提交、回退版本

忽略文件(本地变化)

创建分支(云端变化)

合并分支

解决冲突

备份

SVN托管平台

展开




SVN

官网:https://subversion.apache.org/


SVN之于GIT的理论优势


SVN(SubVersion)是Apache下一个开源的中心化版本控制系统,采用客户端/服务器架构存放项目仓库(仓库 = 代码 + 历史)。和分布式的Git相比,中心化的SVN有以下的诸多特点:

·中心化架构,轻量简单,适合中小规模的项目

·客户端本地不存储历史文件,节省空间(已有的记录不会自删)

·SVN更像是一个公共云端文件系统,使用http/DAV协议驱动

·拥有连续的整数版本号(修订号)

·弱化了“分支”的概念,svn分支实质上就是文件夹的拷贝,方便切换

·中心化的管理模式允许更精细的权限划分

·每一级目录都可以单独同步

·中心化存储易造成单点故障,需要定期备份




客户端:TortoiseSVN

官网:https://tortoisesvn.net/

TortoiseSVN是Windows下最流行的SVN客户端GUI工具,它的特点是基于Windows Explorer(文件资源管理器),通过文件图标,上下文菜单等形式实现SVN的功能,不用打开额外的应用程序。

SVN之于GIT的理论优势




服务器:VisualSVN Server

官网:https://www.visualsvn.com/server/

VisualSVN Server是Windows下一个简单易上手的SVN服务器兼GUI软件,支持web访问。

SVN之于GIT的理论优势

服务启动后,Visual SVN会自动在系统的“证书管理器”中添加一份以主机名为域名的根证书,证书的位置为“受信任的根证书颁发机构”,也就是非出厂自带的第三方自签名证书的存放位置。可以通过https安全访问这个域名,如下图是我的主机名证书。

SVN之于GIT的理论优势




管理证书

VisualSVN Server推荐用https,默认是基于主机名临时签发的自签名证书,可以在设置中更换。同时推荐在network面板中勾选“Automatically redirect HTTP to HTTPS(listen on port 80)”兼容http。

SVN之于GIT的理论优势




创建用户、用户组

打开VisualSVN Server Manager,添加用户。用户名和密码即可以下载svn仓库,也可以登录web网页。

SVN之于GIT的理论优势

点击添加用户组,输入组名,添加组成员。

SVN之于GIT的理论优势

后期可在任何文件夹的Properties中设置任何用户/用户组的读/写权限。

SVN之于GIT的理论优势




创建仓库

打开VisualSVN Server Manager,添加仓库。仓库类型选择第一个常规FSFS即可,第二个VDFS是VisualSVN基于FSFS的私有格式,一般用不到。

SVN之于GIT的理论优势

选择空仓库,后期根据项目需求设置目录结构,不必采用trunk、branches、tags的结构。

SVN之于GIT的理论优势

初始化用户权限,选择默认,以后再根据不同的目录结构分配权限。

SVN之于GIT的理论优势




下载仓库(checkout)

SVN之于GIT的理论优势

输入仓库的URL以及拷贝到本地的位置,Fully recursive指递归拷贝所有文件,HEAD revision指最新版本。

SVN之于GIT的理论优势

下载成功后,本地目录中有一个.svn的隐藏目录是用来存放仓库的元数据,不要碰它。




提交(push)、更新(pull)

SVN之于GIT的理论优势

空白处右键菜单中,SVN Update是从云端拉最新代码,SVN Commit是提交本地更新的代码。提交面板中,在Changes made中勾选需要提交的文件,或点击All全选。

SVN之于GIT的理论优势

注意,如果选中某个文件点击更新(而不是空白处),只会更新这个文件。




查看历史记录

可以从客户端(Tortoise)和网页端(Visual)2种途径查看仓库的历史记录。

1.TortoiseSVN客户端上选择show log

2.浏览器中访问VisualSVN网页端





本地撤销、撤销历史提交、回退版本

·本地撤销:撤销本地未提交的更新

·撤销历史提交:撤销某次提交的变更,可能引起冲突

·回退版本:恢复到某个版本,相当于若干次“撤销历史提交”

这3个概念容易混淆(3者的英文都包含“Revert”),首先,“本地撤销”就是将所有还未提交的变动撤销掉,对云端无任何影响:上下文菜单中点击Revert,然后选择要撤销的文件。

SVN之于GIT的理论优势

之后可以观察到文件图标的变化:

SVN之于GIT的理论优势

然后,“撤销历史提交”是指选择历史记录中的某条记录,撤销该条记录的变更,形成新的变更,如果这条记录是很久以前的,撤销时候可能会引起冲突。同样会形成新变更的是“回退版本”,后者实质上是若干次“撤销历史提交”的总和,即指定版本到最新版本之间的每次提交,所以“回退版本”不会引起冲突。

这两个操作需要在历史记录窗口中选择某历史版本,右键选择Revert changes from this revision或者Revert to this revision。

SVN之于GIT的理论优势





忽略文件(本地变化)

Git通过.gitignore忽略文件,TortoiseSVN通过对文件右键菜单中选择TortoiseSVN > Add to ignore list来实现,tortoise会帮你添加进svn:global-ignore中。

SVN之于GIT的理论优势

注意,忽略设置完后要提交,以同步云端(目录的属性变化)。




创建分支(云端变化)

SVN中创建分支的实质就是拷贝目录,所以有多种方式可以切分支,最简单的方式是在TortoiseSVN的Repo-browser中,对想要拷贝的目录(可以是根目录)右键选择copy to拷贝到新目录,从而创建所谓的分支。

SVN之于GIT的理论优势

注意,拷贝后只在服务端生效,需要SVN update一下同步到本地。




合并分支

和Git一样,SVN有好几种合并的方式,但多数情况下都是把分支中的修改合并到主干上来,本文只介绍这一种主要情况:在主干目录右键选择merge,选择第一个选项Merge a range of revisions。

SVN之于GIT的理论优势

一路下一步确定源和目标的范围,最后点击Test merge测试是否有冲突,如果没有则顺利合并。

SVN之于GIT的理论优势

注意:可以合并文件也可以合并整个文件夹。




解决冲突

无论是拉代码还是合并代码都有可能出现冲突,按照官方的说法,有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真香)






This browser does not support music or audio playback. Please play it in Weixin or another browser.