5

我在这里阅读了一些谴责使用 svn:externals 的答案。我确实看到了它们是如何被滥用的,它确实使我们更加依赖 Subversion,但我真的不认为我们的团队很快就会放弃它。

无论如何,这是我的困境。我们有引用多个项目的解决方案,这些项目位于存储库自己的部分中。其中许多项目在多个解决方案之间共享,我们也不想排除共享我们的项目。我们还将几个固定版本的依赖项签入到我们的存储库中(单元测试框架、库等)。

我想配置几个只使用外部的“工作区”(就 Subversion 而言,它们只是空目录,或者可能包含单个解决方案文件)来为我们的开发人员配置解决方案。单独检查大多数项目不足以构建它们,但检查它的工作区就足以构建它,因为它的所有依赖项都会随之而来。有没有其他人实施过类似的解决方案,svn:externals 是解决这个问题的好方法吗?如果我们走这条路,你对我有什么警告?

基本上结构看起来像这样(为简洁起见,省略了主干/分支/标签):

/projects
   /project1
   /project2
/dependencies
   /xUnit
      /1.5
      /1.4
   /NHibernate
      /2.1.0
      /2.0.1
/workspaces
   /project1
      /project1 (external to ^/projects/project1)
      /xUnit (external to ^/dependencies/xUnit/1.5)
      /NHibernate (external to ^/dependencies/NHibernate/2.0.1)
   /project2
      /project2 (external to ^/projects/project2)
      /xUnit (external to ^/dependencies/xUnit/1.4)
      /NHibernate (external to ^/dependencies/NHibernate/2.1.0)
4

3 回答 3

8

SVN 外部是邪恶的;Use Piston or Braid似乎是典型的反外部阵营。海报确实有道理。

我认为更好的标准是:

  • 对可以更改的内部项目使用外部参考;和
  • 供应商分支用于您无法控制的外部存储库。

因此,svn externals 的问题似乎来自人们使用它们作为供应商分支的替代品。我看到有几个人在第三方 Rails 插件的上下文中抱怨它们。

因此,在您的情况下,假设这些项目都是“内部”的,那么我认为 svn external 是一种完全有效的方法。

于 2009-10-28T01:40:40.903 回答
4

我绝对同意前面的回答。根据我使用外部组件的经验,只要您将外部组件设置为库的特定标签而不是其主干,就可以为基础设施模块和“内部”库提供出色的解决方案。

我不明白为什么要使用完全基于外部的工作区而不是将外部直接添加到项目本身。我的方法是,您在 SVN 上创建的任何项目在签出时都必须是“可构建的”。

在我的方法中,您的存储库应如下所示:

/dependencies
     /xUnit
           /tags
                /1.5
                /1.6
           /trunk
     /NHibernate
           /tags
                /2.1.0
                /2.0.1
           /trunk
/projects
     /project1
           /tags
                /1.0
                    /sources
                    /xUnit(externals to /dependencies/xUnit/tags/1.5)
                    /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
           /trunk
                /sources
                /xUnit(externals to /dependencies/xUnit/tags/1.6)
                /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
     /project2
           /tags
                /1.0
                    /sources
                    /xUnit(externals to /dependencies/xUnit/tags/1.6)
                    /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
           /trunk
                /sources
                /xUnit(externals to /dependencies/xUnit/tags/1.6)
                /NHibernate(externals to /dependencies/NHibernate/tags/2.1.0)
于 2009-10-28T08:08:00.977 回答
0

如果您svn:externals只引用 3rd 方库,为什么不简单地使用 Maven/Ivy 存储库?这些是针对 Java 世界的,我不知道它们的 .Net 挂件,但我很确定它们存在。

我只svn:externals用来共享 Ant antlib 文件,直到它们可以从 jar 存档中加载它们。

于 2009-10-28T18:07:04.267 回答