This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

快速入门教程

旅客朋友们, 请检查你们的座椅靠背是否完好, 方向是否竖直, 杂物 桌是否已经固定. 空乘人员, 现在准备起飞….

接下来的内容是 Subversion 的快速入门教程, 在这个教程里我们将为 读者介绍最基本的 Subversion 配置与操作. 阅读后, 读者应该对 Subversion 的典型用法具备了最基本的了解.

[注意] 注意

本附录内的例子假定读者的类 Unix 系统已经安装了 svnsvnadmin, 它们分别是 Subversion 命令行客户端工具和管理工具. (本附录内的例子对 Windows 同 样适用, 不过要做一些小调整.) 我们假设读者使用的是 Subversion 1.2 或 更新的版本 (可能通过执行 svn --version 查看 Subversion 的版本).

Subversion 把所有的版本化数据都存放在一个中央仓库中. 为了开始我 们的教程, 首先创建一个新仓库:

$ cd /var/svn
$ svnadmin create repos
$ ls repos
conf/  dav/  db/  format  hooks/  locks/  README.txt
$

上面的命令在目录 /var/svn/repos 创建了一 个 Subversion 仓库, 如果目录 repos 事先不存在, svnadmin 将自动创建该目录. 这个目录含有一个数据 库文件集合 (以及其他文件), 你不会在目录中直接看到那些版本化文件. 关于仓库创建和维护的更多信息, 见 第 5 章 仓库管理.

Subversion 没有 项目 (project) 这个概念, 仓库仅 仅是一个虚拟的版本化文件系统, 它可以存放你希望的任何数据. 有些管理员 喜欢在一个仓库中只存放一个项目, 而其他管理员则喜欢在一个仓库中存放多个 项目, 我们在 “规划仓库的组织方式”一节 讨论了各种仓库组织方式的利弊. 无论采用何种组织方式, 仓库都只是在管理 文件和目录, 因此是否要将某些目录解释成 项目 完全取决于 用户. 因此, 本附录在谈到项目时, 请记住我们只是在谈论仓库里的目录 (或 目录集合).

在下面的例子里, 我们假设读者已经准备好了可以被导入到新仓库中的 项目 (文件和目录的集合). 在开始前把项目里的文件和目录都放到一个名 为 myproject (或其他你喜欢的名字) 的目录中, 由于 第 4 章 分支与合并 介绍的原因, 你的项目内包含了 3 个顶层目录: branches, tagstrunk. 目录 trunk 应该 包含了项目的所有数据, 而 branchestags 则是空目录:


/tmp/
   myproject/
      branches/
      tags/
      trunk/
         foo.c
         bar.c
         Makefile
         …

Subversion 并不要求仓库顶层目录下必须是 branches, tagstrunk 这 3 个子目录, 但这是最流行的仓库目录布局.

项目数据一旦准备好, 接下来就可以用命令 svn import (见 “往仓库中添加数据”一节) 把它们都导入到仓库中:

$ svn import /tmp/myproject file:///var/svn/repos/myproject \
      -m "initial import"
Adding         /tmp/myproject/branches
Adding         /tmp/myproject/tags
Adding         /tmp/myproject/trunk
Adding         /tmp/myproject/trunk/foo.c
Adding         /tmp/myproject/trunk/bar.c
Adding         /tmp/myproject/trunk/Makefile
…
Committed revision 1.
$ 

现在, 仓库中就已经包含了项目的初始数据. 前面已经说过, 用户无法 在仓库目录中直接看到导入的那些数据, 它们都存放在一个数据库中. 不过, 仓库的虚拟文件系统已经包含了一个名为 myproject 的顶层目录, 导入的项目数据就存放在这个目录里.

注意, 被导入的原始目录 /tmp/myproject 没有发 生任何变化, Subversion 不会对它做出任何修改. (实际上, 在导入完成后你 甚至可以把它删除.) 在开始操作仓库的数据之前, 你需要创建一个 工作副本 (working copy), 它是用户的一个私有工作空间. 下面的命令请求 Subversion 为仓库中的目录 myproject/trunk 检出 (check out) 一个工作副本:

$ svn checkout file:///var/svn/repos/myproject/trunk myproject
A    myproject/foo.c
A    myproject/bar.c
A    myproject/Makefile
…
Checked out revision 1.
$

现在你就有了一份仓库部分数据的个人拷贝, 即新创建的目录 myproject. 你可以编辑工作副本里的文件, 然后把 它们提交到仓库中.

至于用户能在工作副本中完成哪些工作, 见 第 2 章 基本用法.

到这里为止, 你可以选择把自己的仓库通过网络共享给其他人, 阅读 第 6 章 服务器配置, 查看有哪些服务器进程可供使用, 以及 如何配置它们.