从Subversion提交相对外部文件

4
我们的Subversion存储库有几个子目录,包含共享文件以及每个项目的子目录。项目设置了相对svn:externals属性,以从存储库中拉取共享目录并将其设置为子目录。
因此,例如,我们的存储库看起来像这样:
client
shared
portable
app1
app2
app1svn:externals如下:
../shared shared
../portable portable
因此,在检出时,portableshared可用作app1的子目录。
TortoiseSVN具有巧妙的功能,即在app1上提交时,会自动检测到外部目录,意识到它们都是同一个存储库的一部分,并将所有更改作为同一次提交的一部分提交。 但是,我无法弄清楚如何从命令行客户端获取相同的行为。有什么建议吗?

同时依赖于这个功能,而没有注意到命令行客户端没有响应。 - David M
3个回答

2
此功能尚未实现。以下内容摘自SVN ver. 1.5 book
工作副本通过外部定义支持创建,但与主要工作副本(设置svn:externals属性的版本化目录所在的副本)仍然不相连。Subversion仅在非不交工作副本上真正运行。例如,如果您想提交在其中一个或多个外部工作副本中进行的更改,则必须在这些工作副本上显式运行svn commit。在主要工作副本上提交将不会递归到任何外部副本。
我还检查了SVN 1.6 release notes,只有两个与svn:externals相关的改进:支持svn:externals中的文件和支持外部定义中的常规shell引用规则。
也许,这不是值得实现的功能(这也是我的看法)。通常,svn:externals用于将相对稳定的头文件/文件包含到某个依赖它们的项目/应用程序中。通常它们引用特定修订版的标记或路径。在这种情况下,Svn客户端应该做什么是一个没有特定答案的大问题。

0
原来这个问题有一个非常简单的解决方案,至少在Subversion 1.6.12中是这样的:在命令行上明确指定路径。
例如,如果我运行
cd app1
svn ci file_in_repository.cpp shared portable

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


0
只是想指出,上面的解决方案-逐个引用每个外部项目-只有在外部引用是绝对路径时才有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接