6

我对 Subversion 还很陌生,最近学习了如何使用svn:externals. 现在,当我提交主干文件夹并创建一个标签来拍摄项目的快照时,定义为外部的文件/文件夹将不会添加到标签文件夹中。

例如,我有这个文件夹结构

Z:\repos\repoA

Z:\repos\repoB

Z:\项目\workB

我已设置svn:externalsZ:\Projects\workB使file:///Z:/repos/repoA/trunk/lib trunk/lib.librepoA文件夹自动添加到当前工作目录中Z:\Projects\workB\trunk。实际上,当我执行时SVN Update,会在主干文件夹下创建 lib 文件夹。

在编辑了一些文件并执行SVN Commit...之后Z:\Projects\workB\trunk,我TortoiseSVN -> Branch/Tag从上下文菜单中进行了选择。在该To Path字段中,键入tags/1.0.1并按 OK。1.0.1 标签已成功创建。

在我执行后SVN UpdateZ:\Projects\workB\tags出现了一个名为 1.0.1 的文件夹,但没有外部文件。

这是正常的吗?我预计导入的文件也会在那里,因为它们位于工作目录的主干文件夹中。


我在 Assembla 创建了两个公共存储库,供任何人测试。

lib第二个存储库具有外部定义,它从第一个存储库中拉下文件夹。当我从第二个存储库创建当前主干文件的标签时,它不会将外部文件添加到标签文件夹中。此外,当我签出标签文件夹时,它不会将外部文件添加到本地工作副本中。

4

2 回答 2

4

当您设置 externals 属性时,它不会将文件从外部存储库复制到您的工作存储库。相反,它只是创建一个关于将来从哪里获取这些文件的“注释”。

因此,当您创建标签时,svn 不会费心复制外部链接的实际文件。相反,它只是复制“注释”。如果您要检出您的tags/1.0.1目录(或者如果它已经在本地检出,则进行更新),那么您会注意到即使这些文件在工作存储库中不存在,它也会正确拉下相关的外部文件。

编辑:

啊,我终于看到问题了。您将外部设置在根目录而不是主干目录中。

查看 svn 的最佳方式是它只是一个文件系统,主干、标签和分支的整个想法只是概念性的想法,每个目录与下一个目录没有什么不同。

因此,当您将主干复制到标签目录时,外部属性不会被转移,因为它们不是主干目录的一部分(他们只说将外部项目放在主干中)。要解决您应该从根目录中删除外部属性并将它们添加到主干。下次创建标签时,应传输外部属性。

以下命令:

svn propget svn:externals file:///Z:/Projects/workB/trunk

应该输出:

file:///Z:/repos/repoA/trunk/lib lib 
于 2012-10-16T18:00:07.647 回答
2

你的期望是正确的。svn 副本必须创建源对象的 100% 副本,即 - 外部定义(和内容)必须出现在标签中

  1. 查看svn ls -v -R file:///Z:/repos/repoB/tags/1.0.1
  2. 为了更容易检查和排除故障,我建议转移到公开可用的 repo-set - 进行测试,您可以使用两个或更多 SVN-repos 在 Assembla 自由空间上创建

与问题说明无关:按照惯例,标签用作代码冻结点(以后从任何时候您都可以获得完全相同的代码),但这意味着您还必须将所有外部对象锁定到创建标签的状态。repos/repoA/trunk/lib 是 HEAD 修订版,随着时间的推移而变化,标签 1.0.1 的相应修订版(链接标签 rev - lib rev)将丢失。阅读有关 PEG 修订的信息

编辑

在主干中测试了带有扩展名的 Assembla 存储库。测试失败:

>svn co https://subversion.assembla.com/svn/subversion-troubleshoot-b/trunk .
A    core_mod.txt
Checked out revision 4

只是,我还必须检查 /lib 文件夹

编辑2

对于 subversion-troubleshoot-b repo:修复应用于定义,创建正确编写的标签 ( 1.0.1 ),外部绑定到 PEG-revision

查看中继和标签结帐之间的差异

z:\>svn co https://subversion.assembla.com/svn/subversion-troubleshoot-b/
...

Fetching external item into 'subversion-troubleshoot-b\trunk\lib':
A    subversion-troubleshoot-b\trunk\lib\lib01.txt
Checked out external at revision 4.

Fetching external item into 'subversion-troubleshoot-b\tags\1.0.1\lib':
A    subversion-troubleshoot-b\tags\1.0.1\lib\lib01.txt
Checked out external at revision 2.

Checked out revision 7.

如果您稍后在链接的 repo 中更改 lib-trunk 将获得文件夹的最新内容,1.0.1-将始终使用 subversion-troubleshoot 中的 lib 修订版 2

于 2012-10-16T16:13:54.407 回答