B.6. 包含一个普通的子项目

有时候你希望在你的工作副本中引入另一个项目,或许是一些库代码,你不必在你的版本库复制一份,因为你会失去与原始(且维护的)代码的联系,或者你可能有多个项目共享同一份核心代码,有至少三种方法处理这个问题。

B.6.1. 使用 svn:externals

在你的项目的一个目录设置svn:externals属性,这个属性包含一到多行;每一行都有一个用作检出的子目录的名字,和一个你希望检出的版本库URL,细节请参考第 5.2.5 节 “引用的工程”

提交新的目录,然后当你更新时,Subversion会将那个项目的一个副本从它的版本库检出到工作目录,如果需要,子目录会自动创建,每当你更新你的工作副本,你会得到所有外部项目的最新版本。

如果一个外部工程位于同一版本库中,当你向主项目提交你的修改时,你对外部工程做的修改也会包含在提交列表中。

如果外部工程位于不同的版本库,当你向主项目提交你的修改时,你对外部工程做的修改会被通报,但是你必须单独的提交这些外部项目的修改。

B.6.2. 使用嵌套工作副本

在你的项目创建一个包含普通代码的新目录,但不将其添加到Subversion

在新目录下选择TortoiseSVN检出,在其中检出普通代码的副本,现在你在主要的工作副本有了一个独立的嵌套的工作副本。

两个工作副本是独立的,当你在父目录提交修改,嵌套的工作副本会被忽略,同样当你更新你的父目录,嵌套的工作副本不会被更新。

B.6.3. 使用相对位置

如果你在多个项目中使用共同的代码,而你不想为每个项目保存一份副本,你可以将其检出到一个单独的位置,与其他项目关联,例如:

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的环境,你所做的就是记录必须的磁盘映射,所以你的团队知道这些神秘文件的位置,这个方法只能用于紧密地开发环境,在普通的使用中并不推荐。