9

我们有几个 subversion 存储库:一个用于公共代码,一个用于每个顶级项目。顶级项目有一个 svn:external 链接到公共存储库的主干。

在我们构建项目的发布之前,我们创建顶级项目的一个分支,并在公共存储库中创建一个并行分支。

我们如何自动确保分支顶级项目中的 svn:external 属性指向公共目录中的并行分支 - 目前它将指向公共存储库中的“主干”。我们目前不得不在分支项目中手动编辑它。

谢谢

4

1 回答 1

8

如果我理解你,你想确保这一点foobar共享同一个分支。foo是您的主项目,并且svn:externals在某处指向bar. 当您分支时foo,您要确保bar使用相同的分支。确保这一点的唯一方法是在存储库的根目录而不是在项目的根目录创建存储库tagsbranches就像大多数站点一样)。

然后你可以使用相对外部引用来指向foo包含svn:external后面的目录bar。此外,如果您使用相同的标签标记 foo 和 bar,则 foo 和 bar 将保持它们的关系:

$ svn propset svn:externals ../../bar common

如果您的分支位于存储库的根目录,那么该common目录将指向与foo它所在的相同的分支bar

最大的问题snv:externals是,如果您不小心,您将指向您正在链接的目录的一个不断变化的版本。假设有人这样做:

$ svn propset svn:externals /projects/bar/trunk common

在我的foo项目中。我发布并复制foo到标签。但是,common当有人更新时,我标记的目录将被修改bar/trunk。这使得重建几乎不可能foo

当我使用 时svn:externals,我始终确保链接到 的标记版本bar或特定修订版,如果我链接到特定修订版,我还将我的 URL 与该修订版挂钩,以防有人决定删除目录我正在链接到我的svn:externals财产。

Subversion 中没有任何内容会自动更新您的svn:externals属性,但您可以使用 svn:externals 搜索目录树上的所有内容

$svn propget -v -R svn:externals .

我发现这svn:externals通常会带来比它价值更大的痛苦。

相反,我只是将bar源的构建对象或压缩副本存储在我的发布存储库中,并且作为我的构建过程的一部分,我将对象或压缩源从我的发布存储库中复制出来。

我使用 Maven 站点存储库(如 Nexus 或 Artifactory)作为我的发布存储库,即使我没有在做 Maven 项目,甚至没有在基于 Java 的项目中工作。本地 Maven 存储库提供了上传和下载依赖包所需的所有工具,此外,Maven 具有发布存储库的概念——代码永远不会更改——以及你计划发布代码的快照存储库,但是它可能会改变。如果您怀疑这bar可能会因为您需要的东西而改变,这将很有帮助foo

于 2010-11-22T22:59:08.123 回答