我是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
文件夹。当我从第二个存储库创建当前主干文件的标记时,它不会将外部文件添加到标记文件夹。另外,当我签出标签文件夹时,它不会将外部文件添加到本地工作副本。
答案 0 :(得分:4)
设置externals属性时,它不会将文件从外部存储库复制到工作存储库。相反,它只是创建一个“注释”,指出将来从哪里获取这些文件。
因此,当您创建标记时,svn无需复制外部链接的实际文件。相反,它只是复制“注释”。如果你要检查你的tags/1.0.1
目录(或者如果它已经在本地检出更新)那么你会注意到它会正确地拉下相关的外部,即使这些文件在工作库中不存在
查看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%的源对象副本,即 - 外部定义(和内容)必须出现在标记
中svn ls -v -R file:///Z:/repos/repoB/tags/1.0.1
与问题说明无关:按照惯例,标记用作代码冻结点(以后可以从任何一点获得完全相同的代码),但这意味着,您还必须将所有外部锁定到创建标记的状态。 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