"svn:externals"有什么好处?

Mor*_*eng 3 svn externals 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
Run Code Online (Sandbox Code Playgroud)

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

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

dls*_*dls 5

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

Subversion Externals用例:

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

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

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