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

时间:2012-10-16 10:24:10

标签: 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时,会在trunk文件夹下创建lib文件夹。

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文件夹。当我从第二个存储库创建当前主干文件的标记时,它不会将外部文件添加到标记文件夹。另外,当我签出标签文件夹时,它不会将外部文件添加到本地工作副本。

2 个答案:

答案 0 :(得分:4)

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

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

编辑:

啊,我终于看到了这个问题。您可以在根目录中而不是在trunk目录中设置外部。

查看svn的最佳方式是它只是一个文件系统,trunk,tags和branches的整个概念只是概念性的想法,每个目录与下一个目录没有什么不同。

因此,当您将trunk复制到tags目录时,外部属性不会被传输,因为它们不是trunk目录的一部分(它们只表示将外部项目放在trunk中)。要解决此问题,应从根目录中删除外部属性并将其添加到trunk。下次创建标记时,应传输外部属性。

以下命令:

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

应输出:

file:///Z:/repos/repoA/trunk/lib lib 

答案 1 :(得分:2)

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

  1. 检查svn ls -v -R file:///Z:/repos/repoB/tags/1.0.1
  2. 为了更容易检查和麻烦,我建议转移到公开的repo-set - 进行测试,你可以创建具有两个或更多SVN-repos的Assembla免费空间
  3. 与问题说明无关:按照惯例,标记用作代码冻结点(以后可以从任何一点获得完全相同的代码),但这意味着,您还必须将所有外部锁定到创建标记的状态。 repos / repoA / trunk / lib是HEAD修订版,随着时间的推移发生变化,标记1.0.1的相应修订版(链接标记rev-lib rev)将丢失。阅读PEG修订版

    修改

    经过测试的Assembla repo扩展在trunk中。测试失败:

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

    只有,我还要检查/ lib文件夹

    <强> EDIT2

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

    查看主干和代码结帐之间的差异

    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.
    

    如果您稍后将更改链接仓库中的lib - trunk将获取文件夹的最新内容,1.0.1 - 将始终在libversion的版本2中进行subversion-troubleshoot