我是Subversion的新手,最近学习了如何使用svn:externals
自动导入属于其他存储库的文件。现在,当我提交中继文件夹并创建标签以拍摄项目快照时,定义为外部对象的文件/文件夹将不会添加到标签文件夹中。
例如,我有此文件夹结构
我已将svn:externals
上的Z:\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
并按OK。 1.0.1标签已成功创建。
在SVN Update
上执行Z:\Projects\workB\tags
后,出现了一个名为1.0.1的文件夹,但没有外部文件。
这正常吗?我希望导入的文件也在那里,因为它们位于工作目录的主干文件夹中。
我在Assembla创建了两个公共(public)存储库,供任何人进行测试。
第二个存储库具有外部定义,该定义从第一个存储库中拉下
lib
文件夹。当我从第二个存储库创建当前主干文件的标记时,它不会将外部文件添加到标记文件夹中。另外,当我 checkout 标签文件夹时,它不会将外部文件添加到本地工作副本中。 最佳答案
设置externals属性时,它不会将文件从外部存储库复制到您的工作存储库。相反,它只是为将来从何处获取这些文件创建一个“注释”。
因此,在创建标签时,svn不会去复制外部链接的实际文件。相反,它只是复制“注释”。如果您要执行tags/1.0.1
目录的 check out (如果已经在本地 check out ,则进行更新),那么您会注意到,即使这些文件在工作存储库中不存在,它也会正确拉下相关的外部文件。
编辑:
啊,我终于明白了问题所在。您将外部设备设置在根目录中,而不是在中继目录中。
查看svn的最佳方法是它只是一个文件系统,主干,标记和分支的整个概念只是概念性概念,每个目录与下一个目录没有什么不同。
因此,当您将中继线复制到标签目录时,外部属性不会被传输,因为它们不属于中继线目录(它们仅表示将外部项放入中继线)。要解决此问题,您应该从根目录中删除外部属性,然后将其添加到主干。下次创建标签时,应传输外部属性。
以下命令:
svn propget svn:externals file:///Z:/Projects/workB/trunk
应该输出:
file:///Z:/repos/repoA/trunk/lib lib
关于svn - SVN外部文件未提交是否正常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12912573/