之前使用的一直是git,以至于一直以为git是绝大部分开发者的选择,直到后来知道了也会有不少人选择用SVN去做版本控制。于是我就学习了一下SVN,去了解一下这个SVN和git有什么异同。

SVN是什么

Apache Subversion 是SVN的全称。在这之前还有一个传统的版本管理工具是CVS,这个工具并没有分支的机制,现在已经被SVN全面超越了(看网上的资料大概是这个样子的,但是我自己实际还没有使用CVS,以后会补上相关的对比的)。

比起git,SVN更像是一个文件管理器,不过它会跟踪整个文件夹内容的修改,粒度是行,该有的分支管理、合并分支、版本控制样样都有。最大的不同是:git是一个分布式的版本控制工具,这就意味着在每一个终端上,它都有着完整的仓库,有着完整的版本控制功能。而SVN是一个中心化的版本控制器,中心化意味着需要有一个服务器来做功能的支持。这就意味着,一旦SVN服务器挂了,那整个项目的SVN使用都会受到影响。

还有一个不同的地方在于,即使服务器上面也是看不到源代码的,所有的内容都是以一种特别的方式

SVN服务器

因为SVN是中心化的,那就必须先要配置一个服务器,不然是无法使用SVN的,也没有办法学习。

配置

首先需要手动新建一个目录,作为所有版本库的存储位置:

1
mkdir all_SVN_repo

因为一个服务器是可以提供服务给很多个版本库的,所以这里起名字就明确为all。

切换到这个目录下,然后用命令创建一个版本库:

1
svnadmin create ./repo_1

这时候会发现在all_SVN_repo的文件夹下出现了一个刚新建的目录:repo_1

可以先启动这个svn服务器试试(先cd到all_SVN_repo目录下):

1
svnserve -d -r ./repo_1

当然了,本篇所有的相对路径都可以换成绝对路径啦。
这样就可以启动这个svn服务器了!
这里的参数-r是单目录的启动方式。因为目前只创建了一个库。当然用多库方式启动也是可以的。

可选参数有–listen-port xxxx,表示此服务的端口是xxxx,如果不指定这个参数的话,默认会开启3690这个端口。这个端口在后面会用到,所以这里需要记好。

开启服务之后并不会占用终端的输入状态,所以这个命令一敲回车就好了,如果没有报错信息的话,它就已经在运行了。

(未完待续… …)