本手册旨在介绍 Subversion 1.1。如果您正在运行较新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的版本。
有些人难以通过阅读本书提供的“自上而下”的方式来理解一项新技术。本节是对 Subversion 的简短介绍,旨在为“自下而上”学习者提供机会。如果您是喜欢通过实验学习的人之一,以下演示将帮助您快速入门。在此过程中,我们将提供本书相关章节的链接。
如果您不熟悉版本控制的概念或 CVS 和 Subversion 使用的“复制-修改-合并”模型,那么您应该在继续之前阅读 第 2 章,基本概念。
以下示例假设您已准备就绪 svn,Subversion 命令行客户端,以及 svnadmin,管理工具。它还假设您的 svn 客户端已针对 Berkeley DB 编译。要验证这一点,请运行 svn --version 并确保ra_local模块可用。没有此模块,客户端无法访问file://URL。
Subversion 将所有版本控制的数据存储在中央存储库中。首先,创建一个新的存储库
$ svnadmin create /path/to/repos $ ls /path/to/repos conf/ dav/ db/ format hooks/ locks/ README.txt
此命令创建一个新的目录/path/to/repos其中包含 Subversion 存储库。确保此目录位于本地磁盘上,而不是网络共享。此新目录主要包含 Berkeley DB 数据库文件集合。如果您查看内部,您将看不到版本控制的文件。有关存储库创建和维护的更多信息,请参阅 第 5 章,存储库管理。
接下来,创建一个文件和目录树,导入到存储库中。出于稍后将变得清晰的原因(参见 第 4 章,分支和合并),您的结构应包含三个名为branches, tags,以及trunk:
/tmp/project/branches/ /tmp/project/tags/ /tmp/project/trunk/ foo.c bar.c Makefile …
的顶级目录。准备好数据树后,使用 svn import 命令将数据导入到存储库中(参见 名为“svn import”的部分)
$ svn import /tmp/project file:///path/to/repos -m "initial import" Adding /tmp/project/branches Adding /tmp/project/tags Adding /tmp/project/trunk Adding /tmp/project/trunk/foo.c Adding /tmp/project/trunk/bar.c Adding /tmp/project/trunk/Makefile … Committed revision 1. $
现在存储库包含此数据树。请注意,原始/tmp/project目录保持不变;Subversion 不知道它。(实际上,您甚至可以删除该目录。)为了开始操作存储库数据,您需要创建一个新的“工作副本”数据,这是一种私人的工作区。要求 Subversion “签出”存储库的trunk目录
$ svn checkout file:///path/to/repos/trunk project A project/foo.c A project/bar.c A project/Makefile … Checked out revision 1.
的工作副本现在您拥有存储库一部分的个人副本,位于名为project
的新目录中。您可以编辑工作副本中的文件,然后将这些更改提交回存储库。
进入您的工作副本并编辑文件的内容。
运行 svn diff 以查看更改的统一 diff 输出。
运行 svn commit 将文件的新版本提交到存储库。
运行 svn update 使您的工作副本“更新”到存储库。
有关您可以对工作副本进行的所有操作的完整指南,请阅读 第 3 章,导览。