如何更新Subversion外部

时间:2010-11-22 22:08:35

标签: svn branch svn-externals

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

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

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

由于

1 个答案:

答案 0 :(得分:7)

如果我了解您,您需要确保foobar共享同一个分支。 foo是您的主项目,并且在svn:externals指向bar的位置foo。分支bar时,您需要确保tags使用相同的分支。确保这一点的唯一方法是使用存储库根目录下的branchesfoo目录创建存储库,而不是在项目的根目录(就像大多数站点一样)。

然后,您可以使用相对外部引用从包含svn:external的{​​{1}}目录指向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的标记版本或特定版本,如果我链接到特定版本,我也会挂断如果有人决定删除我链接到svn:externals属性的目录,则为该修订版的URL。

Subversion中没有任何内容会自动更新您的svn:externals属性,但您可以使用

在目录树中搜索所有svn:externals
$svn propget -v -R svn:externals .

我发现svn:externals通常最终会带来更大的痛苦。

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

我使用像Nexus或Artifactory这样的Maven站点存储库作为我的发布存储库,即使我没有在Maven项目中工作,甚至在基于Java的项目中工作。本地Maven存储库提供了上传和下载依赖包所需的所有工具,而且Maven具有发布存储库的概念 - 代码永远不会更改 - 以及快照存储库,您计划发布代码,但它可能会更改。如果您怀疑barfoo所需的内容而发生变化,这会很有帮助。