Ten*_*eno 6 svn tortoisesvn svn-externals
我是Subversion的新手,最近学会了如何使用自动导入属于其他存储库的文件svn:externals.现在,当我提交trunk文件夹并创建标记以拍摄项目的快照时,定义为外部的文件/文件夹将不会添加到标记文件夹中.
例如,我有这个文件夹结构
Z:\回购\ repoA
Z:\回购\ repoB
Z:\项目\ workB
我已经设定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并按下确定.1.0.1标记已成功创建.
我执行后SVN Update上Z:\Projects\workB\tags,一个名为1.0.1的文件夹出现,但没有外部文件.
这是正常的吗?我预计导入的文件也会存在,因为它们位于工作目录的trunk文件夹中.
我在Assembla创建了两个公共存储库,供任何人测试.
第二个存储库具有外部定义,该定义lib从第一个存储库中下拉文件夹.当我从第二个存储库创建当前主干文件的标记时,它不会将外部文件添加到标记文件夹.另外,当我签出标签文件夹时,它不会将外部文件添加到本地工作副本.
当您设置 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)