Apache Subversion是一个功能强大的版本控制系统(version control system)。设计初衷是希望成为更好的CVS。

Apache Subversion有很多“代名词“,简写SVN。这些代名词实质上就是不同的第三方提供的build。如 Windows下的build有

CollabNet (supported and certified by CollabNet; requires registration)
SlikSVN (32- and 64-bit client MSI; maintained by Bert Huijben, SharpSvn project)
TortoiseSVN (optionally installs 32- and 64-bit command line tools and svnserve; supported and maintained by the TortoiseSVN project)
VisualSVN (32- and 64-bit client and server; supported and maintained by VisualSVN)
WANdisco (32- and 64-bit client and server; supported and certified by WANdisco)
Win32Svn (32-bit client, server and bindings, MSI and ZIPs; maintained by David Darj)

Apache Subversion 是一个CS结构,Apache并没有提供图形界面的客户端,而只维护了一个基于命令行的客户端,如果需要图形界面的客户段则可以下载由第三方提供的客户端工具。

Apache Subversion 官方下载页面

本文选用了TortoiseSVN(GPL license)。TortoiseSVN1.9.2-64-bit

一般版本控制系统有几个基本概念:Repository, working copy,versioning models。

Respository:版本控制系统的核心,存放系统数据,通常这些数据以文件系统树形式存放。其实就是一个文件服务器。

working copy:字面上就是一个对VCS管理的文件数据的某个特定版本进行本地复制。

Versioning models:一个版本控制系统的主要目的就是跟踪不同版本,以及另一个重要目的就是团队协作共享和编辑文件。为完成这个目的,不同的版本控制系统采用的策略是不一样的。在解决“文件共享存在的问题”时使用的策略不一样。

  1. 策略一:资源竞争的解决方案(lock-modify-unlock)
  2. 策略二:复制-修改-合并的解决方案(copy-modify-merge)

Subversion主要采用的就是策略二,clearcase也是采用这种策略,策略二更适合更多人的团队合作。

Subversion的working copy里有一个特定的管理员子目录(.svn目录)。这里面的文件帮助subversion认识版本化的文件变更信息。任何工作目录里的文件有两样重要信息被记录:

  1. 工作文件是基于哪个版本。(文件的工作版本)
  2. 文件的最近的修改时间戳

通过这两个信息就可以将文件状态按分为四种。(本地文件是否修改,本地文件是否过时)

  1. 未修改,未过时(与repository里同一版本)
  2. 未修改,已过时(比repository里的版本早,已有新版本)
  3. 修改,未过时。(本地更新已合并到repository里,并版本相同)
  4. 修改,已过时。(repository里已有更新,而本地更新还未合并到repository,已过时)。

了解上述基本概念后就是简单的实践:

实践步骤:
1. 创建一个repository
2. 向repository中添加或导入数据(使用svn import 或者 svn add命令)
3. 创建一个working copy
4. 更新文件

一、Tortoise快速入门 (官方文档)

Windows安装TortoiseSVN非常方便快速。安装完后右键菜单上就会出现相应的项。

第一步创建一个Repository.

先创建一个空文件夹(如F:\versions),进入文件夹,点击右键选择TortoiseSVN->Create repository here.

则会生成一个Respository。文件结构如下图:

conf/
This directory is a container for configuration files.

db/
This directory contains the data store for all of your versioned data.

format
This file describes the repositorys internal organizational scheme. (As it turns out, the db/ subdirectory sometimes also contains a format file which describes only the contents of that subdirectory and which is not to be confused with this file.)

hooks/
This directory contains hook script templates and hook scripts, if any have been installed.

locks/
Subversion uses this directory to house repository lock files, used for managing concurrent access to the repository.

README.txt
This is a brief text file containing merely a notice to readers that the directory they are looking in is a Subversion repository.

第二步、然后将已有的project导入respository。

1. 选中已有的project文件夹
2. 点击右键打开上下文菜单-->tortoiseSVN->Import...
3. 输入url: 如本地F:///reopository/trunk
4.添加备注“导入并初始化project”
5.点击OK

第三步、创建working copy

新建一个空文件夹->进入上下文菜单->SVN check out...-->选择project url

working copy生成的文件夹图标将会有一个绿色的勾。

第四步,users正常工作

在这个working copy的目录中,上下文菜单会多出很多功能供使用。

这里就可以修改文件,添加新文件,更新文件,回滚,合并等等

发表评论