[英]Is it normal that SVN external files are not committed?
我是Subversion的新手,最近学会了如何使用svn:externals
自动导入属于其他存储库的文件。 现在,当我提交trunk文件夹并创建标记以拍摄项目的快照时,定义为外部的文件/文件夹将不会添加到标记文件夹中。
例如,我有这个文件夹结构
Z:\\回购\\ repoA
Z:\\回购\\ repoB
Z:\\项目\\ workB
我在Z:\\Projects\\workB
svn:externals
设置为file:///Z:/repos/repoA/trunk/lib trunk/lib
以便repoA
的lib文件夹自动添加到当前工作目录中, Z:\\Projects\\workB\\trunk
。 实际上,当我执行SVN Update
,会在trunk文件夹下创建lib文件夹。
在Z:\\Projects\\workB\\trunk
上编辑了一些文件并执行SVN Commit...
,我从上下文菜单中选择了TortoiseSVN -> Branch/Tag
。 在To Path
字段中,键入tags/1.0.1
并按下OK。 1.0.1标记已成功创建。
在Z:\\Projects\\workB\\tags
上执行SVN Update
后,出现了一个名为1.0.1的文件夹,但没有外部文件。
这是正常的吗? 我预计导入的文件也会存在,因为它们位于工作目录的trunk文件夹中。
我在Assembla创建了两个公共存储库,供任何人测试。
第二个存储库具有外部定义,该定义从第一个存储库中下拉lib
文件夹。 当我从第二个存储库创建当前主干文件的标记时,它不会将外部文件添加到标记文件夹。 另外,当我签出标签文件夹时,它不会将外部文件添加到本地工作副本。
设置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
你的期望是正确的。 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 - 将始终与subversion中的lib的修订版本2进行故障排除
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.