提交Subversion的相对外部

时间:2010-05-27 13:50:51

标签: svn tortoisesvn svn-externals

我们的Subversion存储库有几个子目录,包含共享文件以及每个项目的子目录。使用相对svn:externals属性设置项目,以将共享目录拉出存储库并将其设置为子目录。

因此,例如,我们的存储看起来像这样:

client
shared
portable
app1
app2

app1的{​​{1}}

../shared shared
../portable portable

因此,在结帐时,svn:externalsportable可用作shared的子目录。

TortoiseSVN有一个很好的功能,即在app1上进行提交会自动检测app1子目录,意识到它们都属于同一个存储库,并且 将所有更改作为同一提交的一部分提交。但是,我无法弄清楚如何从命令行客户端获取相同的行为。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

此功能尚未实施。以下摘自SVN ver. 1.5 book

  

也许最令人失望的是,   通过工作创建的工作副本   外部定义支持仍然是   与主要工作断开连接   copy(在其版本化目录上   svn:externals属性是   实际设定)。还有Subversion   真正只在不相交的情况下运作   工作副本。所以,例如,如果   你想提交你所做的改变   在一个或多个外部制造   工作副本,你必须运行svn   明确地提交对那些工作   复制 - 在主要上提交   工作副本不会递归到任何   外部的。

我还检查了SVN 1.6 release notes,但只有两项改进 已经制作了与svn:externals相关的内容。它们是:支持svn:externals中的文件,并支持外部定义中常用的shell引用规则。

也许,这不是一个值得实现的功能(这也是我的看法)。通常,svn:externals用于将相对稳定的头/文件包含到某些依赖于它们的项目/应用程序中。通常它们引用某些修订的标签或路径。这是一个很大的问题,没有特别的答案,在这种情况下svn客户端应该做什么。

答案 1 :(得分:0)

事实证明,这有一个非常简单的解决方案,至少使用Subversion 1.6.12:在命令行上明确指定路径。

例如,如果我运行

cd app1
svn ci file_in_repository.cpp shared portable

然后Subversion将在一个修订版本中提交app1sharedportable,正如我所希望的那样。显然,命令行客户端默认情况下不处理外部,但如果明确给出它们,则可以轻松处理单个提交。

答案 2 :(得分:0)

只是要指出,上面的解决方案 - 单独引用每个外部项目 - 仅在外部引用是绝对的时才有效。