我们的Subversion存储库有几个子目录,包含共享文件以及每个项目的子目录。使用相对svn:externals
属性设置项目,以将共享目录拉出存储库并将其设置为子目录。
因此,例如,我们的存储看起来像这样:
client shared portable app1 app2
和app1
的{{1}}
../shared shared ../portable portable
因此,在结帐时,svn:externals
和portable
可用作shared
的子目录。
TortoiseSVN有一个很好的功能,即在app1
上进行提交会自动检测app1
子目录,意识到它们都属于同一个存储库,并且
将所有更改作为同一提交的一部分提交。但是,我无法弄清楚如何从命令行客户端获取相同的行为。有什么建议吗?
答案 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将在一个修订版本中提交app1
,shared
和portable
,正如我所希望的那样。显然,命令行客户端默认情况下不处理外部,但如果明确给出它们,则可以轻松处理单个提交。
答案 2 :(得分:0)
只是要指出,上面的解决方案 - 单独引用每个外部项目 - 仅在外部引用是绝对的时才有效。