2010-07-31 99 views
3

如果我没有遇到this page,我不会去了解svn:externals。所以,我设置了我的工作文件夹。然后“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

你使用外部的方式是为那些想要在某些代码的头部修订上工作的人,例如,如果你在一个内部项目中共同开发各种类型的库和应用程序。通常情况下,你不应该没有理由这么做,因为外部代码修订可能会破坏你的代码 - 如果你没有权利修复外部代码,那么使用它就变得有点麻烦。

您可以获取外部存储库的具体修改到自己的回购所谓的卖主分支或版本参数开关添加到您的外部定义,就像这里解释,例如:

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

2

svn:externals机制的行为与广告一样。问题是你正在使用一个公共的Subversion版本库(通过互联网访问),我认为它是一个本地版本库。因此,您看到更新内部存储库与外部引用存储库的时间差异很大。

复制到您的存储库当然是一个可行的解决方案。如何做到这一点明确记录在Subversion book

5

SVN外部项目也与项目组织有很大关系。外部可以是完全不同的SVN回购,这意味着你可以设置不同类型的安全,保护,访问,预先提交的钩子,提交后的钩子等......对于不同的文件夹进行不同级别的访问是很困难的一个单独的SVN回购(没有像VisualSVN之类的帮助),并且对单个SVN回购中的不同文件夹尝试做不同的备份或安全方法是非常困难的(也可能是不明智的)。外部通过允许我们用单一的svn up将几个不同的储存库缝合在一起,允许我们更多的自由。

颠覆的外部对象的用例:

  1. 的常见使用是用于外部以包含一个库或一些其它片的不可变的代码。如果你有一个.dll文件,你完全可以将它放到你的SVN仓库中,并把它作为你的代码库的一部分,但是你已经掩盖了这样一个事实,即.dll应该被视为只读,而不是由您或您的团队开发。

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

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