• SVN使用—工作模式及运行原理以及优缺点对比


    一、SVN原理

    (1)运行方式
    svn服务器有2种运行方式:独立服务器和借助apache运行。
    1.独立服务器访问
    访问地址如:svn://svn.test.com/test

    2.借助Apache等http服务
    访问地址如:http://svn.test.com/test
    a.单独安装Apache+svn
    b.CSVN(Apache+SVN)是一个单独的整合的软件,带web界面管理的SVN软件

    3.本地直接访问
    访问地址如:file:///application/svndata/test

    SVN客户端访问方式
    svn客户端可以通过多种方式访问服务器端,例如:本地磁盘访问,或各种各样的网络协议访问,但是一个版本库地址永远都是只有一个URL,URL反映了访问方法

    file:///	直接通过本地磁盘或者网络磁盘访问版本库
    http://	通过WebDAV协议访问支持Subversion的Apache服务器
    https://	与http://相似,但是用SSL加密访问
    svn://	通过TCP/IP自定义协议访问是SVN服务器
    svn+ssh://	通过认证并加密的TCP/IP自定义协议访问svn服务器
    

    (2)数据存储
    svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

    BDB:
    伯克利DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,不能再通过网络共享的文件系统上使用,伯克利DB是Subversion1.2版本以前的缺省版本库格式

    FSFS:
    一个专用于Subversion版本库的文件系统后端,可以使用网络文件系统(例如:NFS或SMBFS)。是1.2版本及以后的缺省版本库格式。

    svn是基于关系型数据库的BDB或一系列二进制文件的FSFS。这解决了许多问题(如:并行读写共享文件)以及添加了许多新功能(如:运行时的事物特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等能看到实体的文件。

    (3)工作原理
    SVN是一个增量式的版本控制,它不会讲各个版本的副本都完整的保存下来,而只会记录下版本之间的差异,然后按照顺序更新或者恢复特定版本的数据。这使得服务端的存储量会非常低。

    集中式代码管理的核心是SVN服务器,开发者在开始新一天工作之前必须现在本地update一下代码,然后开发、解决冲突、合并。所有的版本信息都放在SVN上面。

    二、SVN与GIT的区别

    (1)SVN是集中式版本控制系统

    SVN版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也必须提交到这个中央版本库。

    优点:

    • 对于某些项目的核心代码或者是一些重要的保密性要求较高的项目,svn比git更适合。
    • svn支持空目录
    • svn有更好的windows平台支持
    • svn可以check out/clone一个子树(sub-tree)
    • svn支持特权访问控制svn lock,在处理很难合并的文件时非常有用
    • svn支持二进制文件,更容易处理大文件(不需要把老版本拷来拷去)
    • 学习简单、使用简单

    缺点:

    • 无网的情况下:无法提交代码,无法查看代码的历史版本、无法同步代码
    • 代码要定期做备份(所有的代码数据及版本变更记录)
    • 分支切换缓慢
    • 由于每次提交都会保留一个原始副本,因此SVN的数据库容量会暴增。尤其是在开发人员非常多的情况下。

    (2)GIT是分布式版本控制系统

    git没有中央版本库,但是为了方便开发小组的成员们进行代码共享,通常会搭建一个远程的git仓库。和svn不同的是开发者本地也包含一个完整的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。

    优点:

    • 比svn方便和快捷的切换分支
    • 书写的代码可以随时提交
    • 丰富的命令行操作和组合
    • 可以一人一个仓库,仓库可以有多个分支

    缺点:

    • 没有一个较好的桌面集成工具
    • 不支持二进制文件
    • 学习成本高
  • 相关阅读:
    SSL 数据加密原理简述
    MQTT 协议 部分细节
    ARM汇编--汇编中符号和变量
    Kconfig 配置文件编码规则
    ARM汇编指令-STMFD/LDMFD
    python类属性和对象属性、类的普通方法和静态方法
    ARM汇编---程序获取符号的物理地址
    Spring源码分析:非懒加载的单例Bean初始化前后的一些操作
    Spring源码分析:非懒加载的单例Bean初始化过程(下)
    Spring源码分析:非懒加载的单例Bean初始化过程(上)
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8472045.html
Copyright © 2020-2023  润新知