“svn:externals”的好处是什么?

4

如果我没有遇到这个页面,我就不会知道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个回答

6
SVN外部依赖项也与项目组织有很大关系。外部依赖项可以是完全不同的SVN仓库,这意味着您可以设置不同类型的安全性、保护、访问、预提交挂钩、后提交挂钩等等。在单个SVN仓库中为不同文件夹设置不同级别的访问权限(没有类似VisualSVN这样的帮助),非常困难,尝试为单个SVN仓库中的不同文件夹进行不同的备份或安全方法也非常困难(可能是不明智的)。外部依赖项通过允许我们使用单个svn up将几个不同的存储库拼接在一起,使我们拥有更多的自由度。

Subversion外部依赖项用例:

  1. 常见的用例是将外部库或其他不可变代码放入外部。如果您有一个.dll文件,您可以将其放到SVN存储库中,并将其视为代码库的一部分,但这掩盖了.dll应该被视为只读并且不是由您或您的团队开发的事实。

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

  3. 最后,外部可以拉取主干,分支或标记,这意味着您可以使用它们来将由不同标记版本组成的项目拼接在一起,从而更接近像Rational ClearCase或任何其他大型版本控制系统之类的东西。您可以通过为代码库的每个模块或组件维护一个SVN存储库,创建每种模式/组件的标记,然后引用这些标记来使用主存储库的外部属性将它们汇集到一个工作项目中。


4
你使用外部代码库的方式适用于那些想要在某些代码的主干版本上工作的人,例如如果你正在一个内部项目中,其中各种库和应用程序都是共同开发的。通常情况下,如果没有充分的理由,你不应该这样做,因为外部代码库的修订可能会破坏你的代码 - 如果你没有权利修复外部代码库,那么与之一起工作会变得有点麻烦。
你可以将外部代码库的特定修订版本获取到自己仓库的所谓供应商分支中,或者像这里解释的那样,在你的externals定义中添加一个修订参数开关: http://thinkinging.com/2008/10/21/set-the-revision-of-your-svnexternals-or-else/

2
svn:externals机制表现如广告所述。问题在于,您正在使用公共的Subversion存储库(通过互联网访问)内部仓库。因此,您会看到更新内部仓库与外部引用仓库的时间存在显着差异。
将其复制到您的仓库是可行的解决方案。如何操作已在《Subversion书籍》中有明确说明。请参考Subversion book

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接