检出工作副本

为了得到一个工作副本,需要进行从版本库检出的操作。

在Windows资源管理器里选择一个存放工作副本的目录。右键点击弹出右键菜单,选择TortoiseSVN → 检出…命令。然后就会看到下面的对话框:

图 4.7. 检出对话框

检出对话框

如果输入一个并不存在的目录名,那么这个名字的目录就会被创建出来。

重要

在默认设置时,检出菜单项不在TortoiseSVN 子目录而在资源管理器根目录。不在子目录中的 TortoiseSVN 命令有SVN前缀:SVN 检出…

检出深度

你可以选择要检出的深度,它允许你指定子目录递归的深度。如果你只需要大目录中的几个子条目,你可以只检出最高层目录,然后递归的更新选择的目录。

  • 全递归

检出完整的目录树,包含所有的文件或子目录。

  • 直接子节点,包含文件夹

检出目录,包含其中的文件或子文件夹,但是不递归展开子文件夹。

  • 仅文件子节点

检出指定目录,包含所有文件,但是不检出任何子文件夹。

  • 仅此项

只检出目录。不包含其中的文件或子文件夹。

  • 工作副本

保持工作副本指定的深度。此选项不用于检出对话框,但它是其它所有含有深度配置对话框的默认配置。

  • 排除

对于已经创建好的工作副本,可以使用此选项来缩减文件夹的深度。这个选项只在更新至版本对话框中可用。

为了方便地选择你想要检出地文件并强制目标工作副本只保留这些项目,单击选择项目按钮。这会打开一个新对话框。你可以选中你在工作副本中想要的所有项目,取消选中你不想要的所有项目。目标工作副本将称为所谓的稀疏检出。这种工作副本的更新将不会获取丢失的文件和文件夹,而是单单更新你的工作副本中所拥有的文件。

如果检出了一个稀疏工作副本(例如,在检出深度一栏中选择了除全递归以外的其它项),你可以方便地使用如下地方式之一来添加或删除子文件夹 。

使用更新到版本部分更新

右键检出的文件夹,然后使用TortoiseSVN → 更新到修订版本然后选择选择项目…这将打开跟初始检查一样的对话框,并允许你选中和取消选中包含在检出中的项目。这个方式很灵活,但是如果文件夹中每个项目要单独更新的话就会很慢

使用版本库浏览器部分更新

右键选中需要检出的文件夹,然后使用TortoiseSVN → 版本浏览来打开版本库浏览器。找到你想要添加到工作副本的子文件,然后使用右键菜单 → 更新项目到版本库…。

使用检查修改部分更新

在检查修改对话框中,首先shift点击检查版本库按钮。对话框会将你未检出,但是位于版本库中的文件和文件夹显示为远程加入。右键单击你需要加入工作副本的文件夹,选择右键菜单 → 更新。

当你想要检出一个很大的文件树的某些部分而且想要方便的只更新单一的工作副本时,该功能非常有用。假设有一个很大的文件树,其中包含 99 个子文件夹从 Project01Project99,你只想检出 Project03Project25Project76/SubProj。按下列步骤操作:

  • 检出父文件夹时检出深度使用“仅此项”。现在,你获得一个空的顶级文件夹。

  • 选中新文件夹,使用 TortoiseSVN → 版本库浏览器 来显示版本库的内容。

  • 右键单击 Project03 然后选择右键菜单 → 更新项目至版本…。保持默认设置并单击 确定。现在这个文件夹就位于你的工作副本中了。

Project25 重复相同的操作。

  • 定位至 Project76/SubProj 并且进行相同的操作。这次需要注意,Project76 文件夹中除了新增的 SubProj 没有其它内容。Subversion 创建了相关的文件夹并没有拿出其全部内容。

改变工作副本深度

一旦以某个深度检出了工作副本后,以后还可以修改这个深度来获得更多或更少的内容,使用 右键菜单 → 更新该项至版本。在弹出的对话框中,确认选中了 粘滞深度 复选框。

使用旧版本服务器

1.5 版之前的服务器不支持工作副本深度请求。所以不能有效的处理这种请求。不过该命令仍然可以使用,但是旧版本的服务器会发送所有的数据,让客户端来过滤掉哪些是不需要的,这就意味着大量的网络传输。如果可能,应该将服务器升级到 1.5 版以上。

如果项目含有外部项目的引用,而这些引用你希望同时检出,请选中忽略外部项目复选框。

重要

如果选中了 忽略外部项目,或者想要增加深度值,你应该使用 TortoiseSVN → 更新至版本… 替代 TortoiseSVN → 更新 来对工作副本进行更新。标准的更新操作会包含外部项目并保持深度。

强烈建议你只检出 trunk 或更低层的目录树。如果你在 URL 中指定了根路径,你的硬盘有可能被塞满,因为你将会得到整个版本库树的副本,包括项目所有的分支和标签(tag)!

关于导出

有时你可能想要建立一个没有.svn目录的本地的副本,比如建立一个源代码压缩包。要达到这个目的,请参考“导出一个Subversion工作副本”一节