手册

包含一个公共子项目

有时您可能希望在您的工作副本中包含另一个项目,也许是一些库代码。至少有 4 种处理这种情况的方法。

使用 svn:externals

为项目中的文件夹设置 svn:externals 属性。此属性由一行或多行组成;每行都有一个子文件夹的名称,您希望将其用作公共代码的检出文件夹,以及您希望检出到那里的仓库 URL。有关完整详细信息,请参阅名为“外部项”的章节

提交新文件夹。现在,当您更新时,Subversion 会将该项目的副本从其仓库拉取到您的工作副本中。如果需要,将自动创建子文件夹。每次您更新主工作副本时,您还将收到所有外部项目的最新版本。

如果外部项目位于同一仓库中,那么当您提交主项目时,您在那里所做的任何更改都将包含在提交列表中。

如果外部项目位于不同的仓库中,那么当您提交主项目时,您对外部项目所做的任何更改都将显示或指示出来,但您必须单独提交这些外部更改。

在描述的三种方法中,这是唯一一个不需要在客户端进行设置的方法。一旦在文件夹属性中指定了外部项,所有客户端在更新时都将获得填充的文件夹。

使用嵌套的工作副本

在您的项目中创建一个新文件夹来包含公共代码,但不要将其添加到 Subversion。

选择 TortoiseSVN检出 为新文件夹,并将公共代码的副本检出到其中。现在您有了一个嵌套在主工作副本中的单独工作副本。

这两个工作副本是独立的。当您提交对父级的更改时,将忽略对嵌套 WC 的更改。同样,当您更新父级时,嵌套 WC 也不会更新。

使用相对位置

如果您在多个项目中使用相同的公共核心代码,并且您不想为您使用的每个项目保留它的多个工作副本,您可以将其检出到与使用它的所有其他项目相关的单独位置。例如

C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common
        

并使用相对路径引用公共代码,例如 ..\..\Common\DSPcore

如果您的项目分散在不相关的位置,您可以使用此方法的一种变体,即将公共代码放在一个位置,并使用驱动器盘符替换将该位置映射到您可以硬编码到项目中的内容,例如,将公共代码检出到 D:\Documents\FrameworkC:\Documents and Settings\{login}\My Documents\framework,然后使用

SUBST X: "D:\Documents\framework"
        

来创建源代码中使用的驱动器映射。然后您的代码可以使用绝对位置。

#include "X:\superio\superio.h"
        

此方法仅适用于全 PC 环境,您需要记录所需的驱动器映射,以便您的团队知道这些神秘文件在哪里。此方法严格用于封闭的开发环境,不建议在一般用途中使用。

将项目添加到仓库

也许最简单的方法是将项目简单地添加到您自己的项目工作副本的子文件夹中。但是,这种方法有一个缺点,即您必须手动更新和升级这个外部项目。

为了帮助升级,TortoiseSVN 在资源管理器右键拖动上下文菜单中提供了一个命令。只需右键拖动您解压缩新版本外部库的文件夹到您的工作副本中的文件夹,然后选择 上下文菜单SVN Vendorbranch here。然后,这会将新文件复制到目标文件夹,同时自动添加新文件并删除新版本中不再存在的文件。

TortoiseSVN 主页