手册

第 3 章。版本库

目录

版本库创建
使用命令行客户端创建版本库
使用 TortoiseSVN 创建版本库
本地访问版本库
访问网络共享上的版本库
版本库布局
版本库备份
服务器端钩子脚本
检出链接
访问版本库

无论您使用哪种协议访问版本库,您始终需要创建至少一个版本库。这可以使用 Subversion 命令行客户端或 TortoiseSVN 完成。

如果您尚未创建 Subversion 版本库,现在是时候创建了。

版本库创建

使用命令行客户端创建版本库

  1. 创建一个名为 SVN 的空文件夹(例如 D:\SVN\),它将用作所有版本库的根目录。

  2. D:\SVN\ 内部创建另一个文件夹 MyNewRepository

  3. 打开命令提示符(或 DOS 窗口),切换到 D:\SVN\ 并输入

    svnadmin create --fs-type fsfs MyNewRepository
              

现在您有了一个新的版本库,位于 D:\SVN\MyNewRepository

使用 TortoiseSVN 创建版本库

图 3.1. 未版本控制文件夹的 TortoiseSVN 菜单

The TortoiseSVN menu for unversioned folders

  1. 打开 Windows 资源管理器

  2. 创建一个新文件夹并将其命名为例如 SVNRepository

  3. 右键单击 新创建的文件夹,然后选择 TortoiseSVN在此处创建版本库...

    然后会在新文件夹内创建一个版本库。 不要自己编辑这些文件!!!。如果您收到任何错误,请确保文件夹为空且未被写保护。

    您还会被询问是否要在版本库中创建目录结构。在名为“版本库布局”的章节中查找有关布局选项的信息。

    TortoiseSVN 将在创建版本库时设置自定义文件夹图标,以便您可以更轻松地识别本地版本库。如果您使用官方命令行客户端创建版本库,则不会分配此文件夹图标。

提示

我们还建议您完全不要使用 file:// 访问,除非用于本地测试目的。对于除单开发者使用之外的所有情况,使用服务器更安全、更可靠。

本地访问版本库

要访问您的本地版本库,您需要该文件夹的路径。请记住,Subversion 期望所有版本库路径都采用 file:///C:/SVNRepository/ 格式。请注意始终使用正斜杠。

要访问位于网络共享上的版本库,您可以使用驱动器映射,也可以使用 UNC 路径。对于 UNC 路径,格式为 file://ServerName/path/to/repos/。请注意,这里只有 2 个前导斜杠。

在 SVN 1.2 之前,UNC 路径必须以更晦涩的形式 file:///\ServerName/path/to/repos 给出。仍然支持这种形式,但不推荐使用。

访问网络共享上的版本库

虽然理论上可以将 FSFS 版本库放在网络共享上,并让多个用户使用 file:// 协议访问它,但这绝对是 推荐的。事实上,我们 强烈 不鼓励这样做,并且由于各种原因不支持这种用法

  • 首先,您正在授予每个用户对版本库的直接写入访问权限,因此任何用户都可能意外删除整个版本库或以其他方式使其无法使用。

  • 其次,并非所有网络文件共享协议都支持 Subversion 所需的锁定,因此您可能会发现您的版本库被损坏。它可能不会立即发生,但总有一天两个用户会尝试同时访问版本库。

  • 第三,文件权限必须设置得恰到好处。您可能勉强可以在原生 Windows 共享上使用它,但 SAMBA 特别困难。

  • 如果一个人安装了较新版本的客户端,该客户端升级了版本库格式,那么其他所有人将无法访问该版本库,直到他们也升级到新客户端版本。

file:// 访问仅适用于本地、单用户访问,特别是测试和调试。当您想要共享版本库时,您 真的 需要设置一个合适的服务器,而且它远没有您想象的那么困难。阅读名为“访问版本库”的章节,了解有关选择和设置服务器的指南。

版本库布局

在将数据导入版本库之前,您应该首先考虑如何组织数据。如果您使用推荐的布局之一,那么以后会容易得多。

有一些标准的、推荐的方式来组织版本库。大多数人创建一个 trunk 目录来保存开发的主线,一个 branches 目录来包含分支副本,以及一个 tags 目录来包含标签副本。如果版本库仅包含一个项目,那么人们通常会创建这些顶级目录

/trunk
/branches
/tags
    

由于这种布局非常常用,因此当您使用 TortoiseSVN 创建新版本库时,它也会提供为您创建目录结构。

如果一个版本库包含多个项目,人们通常按分支索引其布局

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc
    

...或按项目

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags
    

如果项目不密切相关且每个项目都单独检出,则按项目索引是有意义的。对于您可能想要一次检出所有项目的相关项目,或者项目都绑定在一个发行包中的情况,按分支索引通常更好。这样,您只有一个 trunk 要检出,并且子项目之间的关系更容易看到。

如果您采用顶级 /trunk /tags /branches 方法,那么没有什么规定您必须为每个分支和标签复制整个 trunk,在某些方面,这种结构提供了最大的灵活性。

对于不相关的项目,您可能更喜欢使用单独的版本库。当您提交更改时,更改的是整个版本库的版本号,而不是项目的版本号。让 2 个不相关的项目共享一个版本库可能意味着版本号中存在很大的差距。Subversion 和 TortoiseSVN 项目出现在同一主机地址,但它们是完全独立的版本库,允许独立开发,并且不会混淆构建编号。

当然,您可以自由忽略这些常用布局。您可以创建任何类型的变体,无论哪种最适合您或您的团队。请记住,无论您选择什么,都不是永久性的承诺。您可以随时重新组织您的版本库。由于分支和标签是普通目录,TortoiseSVN 可以随意移动或重命名它们。

从一种布局切换到另一种布局只是发出了一系列服务器端移动;如果您不喜欢版本库中的组织方式,只需调整目录即可。

因此,如果您尚未在版本库中创建基本文件夹结构,则应立即执行此操作。有两种方法可以实现此目的。如果您只想创建一个 /trunk /tags /branches 结构,您可以使用版本库浏览器创建这三个文件夹(分三个单独的提交)。如果您想创建更深层次的层次结构,那么最好先在磁盘上创建文件夹结构,然后在一个提交中导入它,如下所示

  1. 在您的硬盘驱动器上创建一个新的空文件夹

  2. 在该文件夹内创建您想要的顶级文件夹结构 - 暂时不要放入任何文件!

  3. 通过右键单击包含此文件夹结构的文件夹并选择 TortoiseSVN导入...,将此结构导入到版本库中。在导入对话框中,输入您的版本库的 URL,然后单击“确定”。这会将您的临时文件夹导入到版本库根目录,以创建基本的版本库布局。

请注意,您要导入的文件夹的名称不会出现在版本库中,只会出现其内容。例如,创建以下文件夹结构

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags
      

C:\Temp\New 导入到版本库根目录,然后它将如下所示

/trunk
/branches
/tags
      

TortoiseSVN 首页