SVN版本控制(一)---简介

在现在公司内部很多都在使用版本控制工具,比如:CVS、SVN、Git,大多数就是这么三种,现在的趋势正在向使用git增多,但是现在市场占有额还是以SVN为主。

前言

接下来我会在博客中,进行4期内容的SVN笔记记录。
课程内容
1.SVN简介
2.SVN服务器端与客户端的使用
3.SVN与第三方 Eclipse 整合
4.SVN与第三方 Apache 整合

课程目标
1.掌握SVN服务端与客户端的安装与配置
2.掌握SVN服务端权限配置
3.掌握SVN在Eclipse中的使用

SVN简介

首先,问大家几个问题:
1. 参与过2人以上的软件项目开发?
2. 开发过程中程序是否具有版本控制?
3. 如果不使用版本控制还会出现什么问题?

为什么使用版本控制工具

那么如果不使用版本控制工具,会出现以下问题:

  • 备份多个版本,费空间,费时间
  • 难于恢复至以前正确版本
  • 容易引发BUG
  • 解决代码冲突困难
  • 代码管理混乱
  • 难于追溯问题代码的修改人和修改时间
  • 无法进行权限控制
  • 项目版本发布困难

什么是版本控制工具?

我们现在已经知道为什么使用版本控制工具了,那么版本控制工具给出个概念吧:版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

什么是SVN?

Svn(Subversion)是一种开放源码的全新版本控制系统。是新一代的版本控制工具,由于其优于CVS的一些特点,得到了越来越多人的关注和使用,支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、恢复和分支等功能,而且Subversion 还增加了追踪移动和删除的能力。此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常有用,同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域。

SVN的层次及组件

下面来看一个图,来理解svn的层次:
SVN各层介绍

Subversion 组件:

  1. 服务器组件 (管理员使用)
    1. svnadmin:用来调整和修正svn档案库的工具
    2. mod_dav_svn:给 Apache-2.X 网页服务器使用的外挂模块; 可以用来将你的档案库透过网络对外开放, 以供他人进行存取。
    3. svnserve:一个独立的服务器程序, 可以作为服务器行程执行, 或是被 SSH 启动; 另一个让你的档案库在网络上可供其它人存取的方法.
  2. 客户端组件(用户使用)
    1. svn:命令行客户端程序,这是用来管理数据的主要工具。

SVN控制版本策略

SVN版本控制策略图一

接下来,看着图一,我们来说下问题,我们可以看到如果harry和sally同时读取数据仓库,并且各自修改后,sally先提交到数据库,然后harry也要提交,这时就会出现,那么两个版本控制问题,如何解决也就是这里说道的版本控制策略。
1锁定-修改-解锁 方案
SVN版本控制策略图
许多版本控制系统使用锁定-修改-解锁机制解决这种问题,在这样的模型里,在一个时间段里版本库的一个文件只允许被一个人修改。例如大家以前用的 VSS,就是采用的这种方案。
锁定-修改-解锁模型的优点:能非常好的保证版本库中所有文件的一致性,能避免大部分的冲突。但锁定-修改-解锁模型有一点问题就是限制太多,经常会成为用户的障碍:
   锁定可能导致管理问题。
   锁定可能导致不必要的线性化开发。
   锁定可能导致错误的安全状态。

2.拷贝-修改-合并 方案
SVN版本控制策略图二
Subversion,CVS和一些版本控制系统使用拷贝-修改-合并模型,在这种模型里,每一个客户联系项目版本库建立一个个人工作拷贝——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,最终,各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
拷贝-修改-合并模型感觉有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有交迭发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少。
最后,一切都要归结到一条重要的因素:用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。
拷贝-修改-合并有一个很致命的缺点,就是对那些无法合并的二进制文件管理起来困难。因此,Subversion 也提供了锁定-修改-解锁的方案,用来更好的管理二进制文件。
因此,我们采取混合版本控制方案。即,对源代码的纯文本文档实行拷贝-修改-合并的方案,对二进制文件,如 dll、图片等采用锁定-修改-解锁的方案。也就是使用autoprops.reg 中的信息,来告诉 Subversion 怎么去管理这些文件。
上面讲解的内容十分重要,在面试中曾有人问过我类似的问题。

SVN基本交互流程图

基本交互流程图
SVN工作的的基本思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序.这样,就好象只有一个人在 修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 SVN 命令进行提交,由 SVN仓库管理员统一 修改.这样就可以做到跟踪文件变化,冲突控制等等。

SVN安装

SVN服务器安装

官网:https://subversion.apache.org/
就是傻瓜式一键安装,不过有需要注意的部分,安装的目录必须是英文且不能有空格
安装完之后,我们再确认下path中环境变量有没有添加上,一般来说都会在安装过程中自动添加上的。
再进行最后一步确认,在cmd窗口下,输入svnserve –version,如果出现类似这种的界面就是安装成功了
安装成功界面
注意的是svnserve –version而非svnserver -version

SVN数据仓库安装

接下来还是不可以使用svn的,因为我们还有一个很重要的东西没有完后,svn数据仓库,那么怎么创建呢?使用svnadmin,可以使用svnadmin help查看命令有哪些

建立svn仓库(单仓库,多仓库)
    命令: svnadmin create 仓库名称
比如:执行svnadmin create E:\software\repository\svn\changqing
这里后就会看到在E:\software\repository\svn文件夹中生成一个changqing文件夹,文件夹中的内容如下:
仓库文件内容

SVN仓库启动

有两种方式:
1. SVN服务器启动(不推荐)
cmd命令行启动
   svnserve -d –r 文档仓库路径
      -d 后台执行
      -r 版本库的根目录
比如:svnserve -d -r E:\software\repository\svn\changqing
这个时候我们的cmd命令框会停在这里,到底成功了吗?如何验证?

启动后我们如何知道svn启动成功呢? 我们新开一个cmd窗口查看端口使用情况:

netstat -an 
我们看到3690端口服务,说明启动成功

TCP 0.0.0.0:3690 0.0.0.0:0 LISTENING

如果我们把停住的cmd窗口关闭掉,这时就会发现3690端口不再被占用,也就是关闭了。

所以,这种方式并不稳定
2. windows服务自动启动
利用xp、2000 以上的系统自带的工具service control,执行文件是sc.exe
下面这段貌似高大上,noSVN(哈哈,no是not only,自创。。。,可以用到好多场景下)

sc create SVN-Service binpath= “E:\software\svn\bin\svnserve.exe –service -r E:\software\repository\svn” displayname= “SVN-Service” start= auto depend= Tcpip
binpath 指定svnserve 的路径和命令
start= auto 表示服务自动启动。注意:等于号的左边无空格,而右边必须有一个空格
Displayname、start、depend
在此命令中-r(–root)项目版本仓库的根目录,注意这里最好是根目录,比如我这里并没有把目录定为changqign,而是他的上级目录

查看服务是否添加成功,可以选择windows 控制面板–》》管理工具–》》服务 会发现列表中有SVN-service服务

sc delete SVN-Service

创建服务期间出现了服务创建错误的提示信息,比如:
1075 :原因是因为我把depend后面的Tcpip复制错成Tcpi
1072 : 提示我已经把服务标记为删除,我是打开着服务的GUI界面,关掉之后就不再提示该错误了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值