“svn:externals”有什么好处?

时间:2010-07-31 09:45:00

标签: svn externals svn-externals

如果我没有遇到this page,我就不会知道svn:externals。所以,我设置了我的工作文件夹。然后

mkdir lib/vendor
svn add --parents lib/vendor
svn ps svn:externals 'symfony http://svn.symfony-project.com/branches/1.4/' lib/vendor/
svn ci -m "add externals"
svn update

“svn update”列出了整个symfony文件夹并且非常慢。我以为这会是一次性的痛苦。但是,每次输入“svn up”时,SVN都会检查外部存储库。我必须使用--ignore-externals使“svn update”足够快。

我想知道svn:externals有什么好处,如果它太慢了。我宁愿将symfony复制到我自己的存储库,这肯定是一个更快的解决方案。

3 个答案:

答案 0 :(得分:5)

SVN外部也与项目组织有很大关系。外部可以是完全不同的SVN repos,这意味着您可以设置不同类型的安全性,保护,访问,预提交挂钩,提交后挂钩等...很难对不同的文件夹内部进行不同级别的访问。单个SVN仓库(没有VisualSVN之类的帮助),并且很难(并且可能是不明智的)尝试为单个SVN仓库内的不同文件夹执行不同的备份或安全方法。外部允许我们通过一个svn up将几个不同的存储库拼接在一起,从而为我们提供更多的自由。

Subversion Externals用例:

  1. 一个常见的用例是外部包含一个库或一些其他不可变代码。如果你有一个.dll,你绝对可以将它放入你的SVN仓库并将其视为你的代码库的一部分,但是你已经掩盖了.dll应该被视为只读的事实而不是由您或您的团队开发。

  2. 另一个用例(您已发现)是允许您的库保留在删除存储库中 - 可能是由活动的开源项目维护的存储库。在这种情况下,您可以始终指向外部的特定版本,而不必担心自己存储它。

  3. 最后,外部可以拉入主干,分支或标签,这意味着您可以使用它们将由您自己的模块的不同标记版本组成的项目拼接在一起。这将更类似于Rational ClearCase或任何其他大型版本控制系统。您可以通过为代码库的每个模块或组件维护SVN repo,创建每个模式/组件的标记,然后使用主存储库的externals属性引用标记来实现此目的 - 这只是为了将它们拉到一起进入一个工作项目。

答案 1 :(得分:3)

您使用外部的方式适用于想要处理某些代码的主要修订版的人员,例如,如果您在内部项目中共同开发各种库和应用程序。通常,你不应该没有充分理由这样做,因为外部代码修改可能会破坏你的代码 - 如果你无权修复外部代码,那么使用它会变得有点麻烦。

您可以将外部存储库的特定版本提取到您自己的repo的所谓供应商分支中,或者将修订参数开关添加到您的外部定义中,如下所述:

http://thinkinging.com/2008/10/21/set-the-revision-of-your-svnexternals-or-else/

答案 2 :(得分:2)

svn:externals机制的行为与宣传的一样。问题是你正在使用一个公共的subversion存储库(通过互联网访问)我认为是一个本地存储库。因此,您发现更新内部存储库与外部存储库的时间存在显着差异。

复制到您的存储库当然是一个可行的解决方案。如何执行此操作已明确记录在Subversion book