4

我们的 Subversion 存储库有几个包含共享文件的子目录以及每个项目的子目录。项目设置有相关svn:externals属性,以从存储库中拉入共享目录并将它们设置为子目录。

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

客户
共享
便携的
应用程序1
应用程序2

app1作为它的svn:externals

../shared 共享
../便携便携

这样在结帐时,portable可以shared用作app1.

TortoiseSVN 有一个非常棒的特性,即进行提交app1会自动检测externals子目录,意识到它们都是同一个存储库的一部分,并将所有更改作为同一个提交的一部分提交。但是,我不知道如何从命令行客户端获得相同的行为。有什么建议么?

4

3 回答 3

2

此功能尚未实现。以下内容来自SVN 版本。1.5 本书

也许最令人失望的是,通过外部定义支持创建的工作副本仍然与主工作副本断开连接(在其版本化目录上实际设置了 svn:externals 属性)。而且 Subversion 仍然只在不相交的工作副本上运行。因此,例如,如果您想提交您在一个或多个外部工作副本中所做的更改,您必须在这些工作副本上显式运行 svn commit——在主工作副本上提交不会递归到任何外部工作副本.

我还检查了SVN 1.6 发行说明,只有两个与 svn:externals 相关的改进。它们是:支持 svn:externals 中的文件和支持外部定义中的常用 shell 引用规则。

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

于 2010-07-02T20:47:51.573 回答
0

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

例如,如果我运行

cd app1
svn ci file_in_repository.cpp shared portable

然后 Subversion 将按照我的意愿在一个修订版中提交app1,shared和所有内容。portable显然,命令行客户端默认情况下不会处理外部,但如果明确给出它们,则使用它们处理单个提交没有困难。

于 2011-02-17T16:16:27.243 回答
0

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

于 2013-04-09T17:45:17.943 回答