本手册旨在描述 Subversion 1.2。如果您运行的是较新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅适合您的 Subversion 版本的本书。
有些人难以通过阅读本书中提供的“自顶向下”方法来学习新技术。本节是对 Subversion 的一个非常简短的介绍,旨在为“自底向上”学习者提供学习机会。如果您喜欢通过实验来学习,以下演示将帮助您快速入门。在此过程中,我们将提供指向本书相关章节的链接。
如果您不熟悉版本控制的概念,或者不熟悉 CVS 和 Subversion 使用的“复制-修改-合并”模型,那么您应该在继续之前阅读 第 2 章,基本概念。
以下示例假设您已准备好使用 Subversion 命令行客户端 svn 和管理工具 svnadmin。它还假设您使用的是 Subversion 1.2 或更高版本(运行 svn --version 检查)。
Subversion 将所有版本控制数据存储在中央仓库中。要开始,请创建一个新的仓库
$ svnadmin create /path/to/repos $ ls /path/to/repos conf/ dav/ db/ format hooks/ locks/ README.txt
此命令将创建一个名为 /path/to/repos
的新目录,该目录包含一个 Subversion 仓库。这个新目录包含(除其他外)一组数据库文件。如果您查看内部,将不会看到您的版本控制文件。有关仓库创建和维护的更多信息,请参阅 第 5 章,仓库管理。
Subversion 没有“项目”的概念。仓库只是一个虚拟的版本控制文件系统,一棵可以容纳您所需任何内容的大树。一些管理员更喜欢在一个仓库中只存储一个项目,而另一些管理员更喜欢通过将多个项目放置到单独的目录中来在一个仓库中存储多个项目。每种方法的优缺点在 名为“选择仓库布局”的部分 中讨论。无论哪种方式,仓库只管理文件和目录,因此由人类来解释特定的目录作为“项目”。因此,虽然您可能会在本书中看到关于项目的引用,但请记住,我们始终只讨论仓库中的某个目录(或目录集合)。
在此示例中,我们假设您已经拥有某种项目(一个文件和目录的集合),您希望将其导入到新创建的 Subversion 仓库中。首先,将它们组织到一个名为 myproject
(或任何您想要的名称)的单个目录中。由于以后会变得清晰的原因(请参阅 第 4 章,分支和合并),您的项目树结构应包含三个名为 branches
、tags
和 trunk
的顶级目录。 trunk
目录应该包含您的所有数据,而 branches
和 tags
目录为空。
/tmp/myproject/branches/ /tmp/myproject/tags/ /tmp/myproject/trunk/ foo.c bar.c Makefile …
Subversion 实际上并不需要 branches
、tags
和 trunk
子目录。它们只是一种流行的约定,您很可能以后会想要使用。
准备好数据树后,使用 svn import 命令将其导入仓库(请参阅 名为“svn import”的部分)
$ svn import /tmp/myproject file:///path/to/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 不知道它。(实际上,您甚至可以删除该目录。)为了开始操作仓库数据,您需要创建一个新的“工作副本”数据,这是一种私有工作空间。让 Subversion “检出”仓库中 myproject/trunk
目录的工作副本
$ svn checkout file:///path/to/repos/myproject/trunk myproject A myproject/foo.c A myproject/bar.c A myproject/Makefile … Checked out revision 1.
现在,您在名为 myproject
的新目录中拥有仓库一部分的个人副本。您可以编辑工作副本中的文件,然后将这些更改提交回仓库。
进入您的工作副本并编辑文件的內容。
运行 svn diff 以查看更改的统一 diff 输出。
运行 svn commit 将文件的新版本提交到仓库。
运行 svn update 以将您的工作副本“更新”到仓库的最新版本。
有关您可以对工作副本执行的所有操作的完整指南,请阅读 第 3 章,导览。
此时,您可以选择通过网络向其他人提供仓库。请参阅 第 6 章,服务器配置,了解可用的不同类型的服务器进程以及如何配置它们。