解析svn status S - 找到定义了错误的svn:externals属性的位置

时间:2014-03-17 12:40:26

标签: svn version-control svn-externals

我如何到达

经过艰苦地合并了2个应该是相同代码库的不同文件夹(不同的人在不同的位置工作),我试图通过将其中一个文件夹设置为svn:external来无缝地整合代码库。另一个。

这没有用,因为外部人员不能与他们的链接在同一个回购中。我我在发现这个问题后试图解决svn产生的错误(没有任何东西被锁定,这似乎表明我做了)。{/ 1>}我跑了svn cleanup

我想要什么

在建立此项时,我忘记了svn:externals属性的设置位置:该文件夹的svn statusS(表示其内容位于不同的存储库位置它的本地位置可能会推断),svn info显示它仍然映射到其对应方。我怎样才能完全解决这个问题?

我尝试了什么

svn属性的难点在于可以从任何地方设置它们。我已经从相关文件夹中尝试了svn propedit svn:externals .,并且我还在其所有祖先上尝试了svn propedit svn:externals {relative-path-to-the-folder},但没有骰子。

1 个答案:

答案 0 :(得分:2)

您可以使用-R命令的svn propget参数来遍历整个目录树:(注意:pgpropget的别名)

$ svn pg -R svn:externals .

这将列出设置svn:externals的所有目录。请注意,您也可以使用URL执行此操作:

$ svn pr -R svn:externals http://repo/svn/trunk/proj

您可以使用proplist命令执行相同的操作,并获取所有属性及其值。但是,这可能比您意识到的要多得多 - 特别是如果您因为二进制文件类型而设置了很多svn:mimetype

$ svn pl -R -l .

这对于svn:mergeinfosvn:ignores以及可能存在问题的其他类型的属性非常有用。

svn:externals是一个强大的工具,但是像任何强大的工具一样,你最终可能会造成很大的伤害。例如,假设我有这个集合:

 $ svn ps svn:externals http://repo.corp.local/svn/trunk/util util .

我们现在说我现在标记了我的目录。我的util目录仍将指向trunk并不断更改,这意味着我的标记正在发生变化。如果我创建了一个我的项目的分支,util目录将指向主干,它可能最终包含与我的分支不兼容的代码。

有两种方法可以解决这个问题:

  • 始终在外部目录中使用某些修订或标记:

像这样:

 $ svn -r$rev ps svn:externals http://repo/svn/trunk/utls@$rev util .

将外部与特定修订绑定,或者:

$ svn ps svn:externals http://repo/svn/tags/$tag/util util .

将外部链接到特定标记。我喜欢这个,因为标签通常更有意义(虽然标签可以更改,但它们通常应该是不变的。)

  • 或者,使用相对URL:

像这样:

$ svn ps ../util util .

假设您的主干,标签和分支目录结构是主要级别,这将确保util目录指向与项目相同的分支,主干或标记。分支项目时,还需要分支util。标记项目时,您还需要标记util