SVN外部文件未提交是否正常?

Ten*_*eno 6 svn tortoisesvn svn-externals

我是Subversion的新手,最近学会了如何使用自动导入属于其他存储库的文件svn:externals.现在,当我提交trunk文件夹并创建标记以拍摄项目的快照时,定义为外部的文件/文件夹将不会添加到标记文件夹中.

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

Z:\回购\ repoA

Z:\回购\ repoB

Z:\项目\ workB

我已经设定svn:externalsZ:\Projects\workB,以file:///Z:/repos/repoA/trunk/lib trunk/lib使repoA的lib文件夹被自动添加到当前的工作目录,Z:\Projects\workB\trunk.实际上,当我执行时SVN Update,lib文件夹是在trunk文件夹下创建的.

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

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

这是正常的吗?我预计导入的文件也会存在,因为它们位于工作目录的trunk文件夹中.


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

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

Dun*_*nes 4

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

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

编辑:

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

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

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

以下命令:

svn propget svn:externals file:///Z:/Projects/workB/trunk
Run Code Online (Sandbox Code Playgroud)

应该输出:

file:///Z:/repos/repoA/trunk/lib lib 
Run Code Online (Sandbox Code Playgroud)