SVN特性及原理、安装、创建版本库、在windows上创建、启动SVN服务、checkout下载版本库、add、commit、update版本库、版本库权限讲解

一、版本管理

首先来聊一聊版本管理,版本管理源于工程设计领域,能追踪工程蓝图从诞生到定案的整个过程(其实由于软件行业本来也比较年轻,很多概念都是借鉴其他学科来的嘛)。

在版本管理里有两个版本管理软件比较有名(其他的貌似基本被干掉了),一个是svn,一个是git,不过现在git的流行程度更大了吧,之后打算写一篇总结git的文章。svn是一对多的模式,一个仓库,多个使用节点;git则是多个节点都有仓库,都可以提交更新,总之在数据的安全性上,git占优一点。

svn嘛,前几年挺火的,所以咯,项目的历史版本都在svn上,也不想改了,反正也没出啥问题。

OK,接下来聊聊SVN,这东西全称叫Subversion,又是Apache软件基金会组织下的一个项目,之前有个叫CVS的版本管理工具,svn相当于在cvs的基础上发展而来的。Apache基金会真的牛逼,从tomcat、svn到hadoop都是它的项目。

之前说了SVN的种种用处,其实都是基于它的特性。

二、SVN的特性

1,目录版本控制

简单说就是可以直接按照目录的方式操作版本中的各文件。讲真,我觉得这还挺神奇的,它是怎么实现的呢?

2,原子提交

原子的概念是不是在数据库中听过,没错,就是要么全都提交,要么就全都被撤销。原子被认为是不可分的,所以嘛,不可分的东西,你当然不能提交一部分另一部分又不提交。

3,版本控制的元数据

元数据是什么?这个概念在前端里也有,有个东东叫meta的也是元数据。元数据可以理解成属性的概念,对每个文件和目录都可以有个属性来说明它的情况的。

4,可选的网络层

其实就是指访问svn的服务器是抽象的,可以根据接口设置。

5,一致的数据处理

svn采用一种叫二进制文件差异算法的方式处理二级制和文本数据,保证操作的一致性

6,高效的分支和标签

svn建立分支和标签时就是复制项目,类似于硬链接,所以复制完后,标签和分支的管理就很快了咯。

三、SVN的工作原理

前面比较svn和git时就说过,svn的仓库保留在服务器上,感觉就是一个一对多的 “客户端/服务端” 模型咯(貌似最新的svn也有新的进展,还没研究过),参考下这个图:

它的checkout就是把整个项目下载下来,update就是从服务器中更新不一样的部分,而commit嘛,就是讲本地代码提交上去的咯。

四、subversion的安装

该进入正题了,subversion嘛最新的更新都到了2018-10-02了,也是厉害,更新地很快的啦,说明还是有用的价值嘛。

因为实际上公司的svn版本也有点老了,所以就用老版本的做总结了

然后就会在系统的环境变量中加入svn的exe地址:

安装完成后输入 svn --version   获取版本信息:
svn,版本 1.8.9 (r1591380)
编译于 May  7 2014,11:00:25 在 x86-microsoft-windows

五、SVN的使用

1,创建版本库:

svnadmin create D:\test\svnTest\svn_repo\oa      -- 之后会在该目录下创建一个oa仓库

在仓库下有如下目录:

conf目录放的是和当前版本不相关的一些目录,db是数据库的意思,实际上svn也是通过数据库保存版本信息的!数据库真是有用~这个hooks很有意思,一提交它会触发一个时间,是不是很像触发器?它是用c写的,有空研究底层的时候做个深入分析。

2,启动服务器端程序

svnserve -d -r D:\test\svnTest\svn_repo\oa

参数说明:

参数3为版本库的目录。

这个命令就是说在后台执行D:\test\svnTest\svn_repo\oa 这个版本库咯

好了,是不是启起来了呢?由于svn服务监听的事3390端口,我用netstat查一下看看:

netstat -an

确实是有的哦!实验成功!

这种启动方式,只是演示啦,linux下直接启动,就一直挂着就好了。

好,来个新知识!如何将svn添加到服务里?我用服务来启动!

C:\Users\Administrator>sc create SVNService binpath= "D:\Program Files\bin\svnserve.exe --service -r D:\test\svnTest\svn_repo" start= auto depend= Tcpip

创建成功了!我们来看下服务是否真的有了:

有了!!

创建服务的过程很有意思,原来这样就可以搞定一个服务啦!

参数来说明一下:sc 是service control的缩写,表示服务控制,create表示创建服务,binpath就是要开启的服务的exe所在路径咯,start= auto表示自动启动的啦,depend就是依赖的意思。SVN服务可是要tcpip的支持呢!

这个binpath里呢,--service表示以服务方式启动Subversion,-r表示版本库根目录

只要启动这个服务就可以啦,用命令行就是sc start 服务名。启动完之后再看下端口,3390启动了就成功了。

因为是实验的嘛,这个服务之后也是可以删掉的啦。sc stop 服务名 停掉, sc delete 服务名 删掉

3,checkout的使用

svn服务开启的状态下,使用如下命令(本地进行演示):

D:\test\client>svn checkout svn://localhost/oa

会在命令行中说明取出的版本。

在如上情况下,会生成一个oa项目的哦:

在oa中有一个.svn文件,保存了一些版本库信息

4,客户端上传文件

现在该目录下新建一个txt

命令行中输入:D:\test\client\oa>svn commit helloSVN.txt

然后报错了:

因为要先添加才能commit!

命令行中输入: D:\test\client\oa> svn add helloSVN.txt

下面的 A。。。 表示当前文件的状态,A表示刚刚加入版本控制

然后再commit,还是报错:

这是为什么呢?原来是要有一个commit的信息,不然版本库是不认的哦。有用过git的同学,估计已经看出来了,这两个命令竟然是一模一样的!

好了,修改一下commit命令:svn commit -m "My first commit" helloSVN.txt

猜一下能成功吗?当然不能咯,用过git都知道,提交可是要账号密码的,不然谁都提交,哪个才是正式版本呀?!:

5,SVN权限讲解

代开oa版本库的svnserve.conf:

来看下它的配置,看到了这两行:

anon是anonymous的简写,表示未登陆用户有只读权限;auth是authorization之类的简写,表示授权用户的权限,可写。

修改,注意要顶格,使得未登陆可写:

6,继续提交

回到第4步,我们继续提交:D:\test\client\oa>svn commit -m "My first commit" helloSVN.txt

可以了哦;注意这个版本1不是指上传的文件的版本,而是指整个版本库的版本。

7,进行更新

采用如下命令即可:svn update   如果后面没有参数,就是更新整个版本库,有参数就是更新某个文件咯。

猜你喜欢

转载自blog.csdn.net/qq_22059611/article/details/82960726
今日推荐