我应该为每个网站使用一个SVN代码库还是在单个代码库中为每个网站创建子目录?

4

我目前正在为我们的本地开发Web服务器设置SVN,并想知道是否应该为服务器上的每个网站创建一个仓库,还是创建一个包含每个站点子目录的单个仓库?

谢谢你的帮助。


1
这个主题已经有很多问题了,包括https://dev59.com/yUbRa4cB1Zd3GeqPyTt9。 - anon
3个回答

4
一般来说,我建议采用一个仓库对应一个项目的模式。
这种模式的潜在问题是需要多个检出和共享代码等。在 svn 中,使用 svn:externals 关键字非常简单,它允许你将另一个仓库中的目录拉入到你的任何给定目录中。
采用多个仓库的好处是多方面的:
- 特别是在大型检出时,SVN 会变得很慢。所有正常命令在大型检出中都需要明显更长的时间。 - 如果你开始与其他开发人员共享工作,则维护成本可能会增加,因为你可能需要将他们锁定在某些“项目目录”之外,同时让他们访问其他目录。 - 如果你曾经出售你的一部分工作,买家可能会要求源历史记录。拆分大型 SVN 仓库是一项非常繁琐的工作,在某些情况下可能无法实现。 - 简单性。多个仓库可以为您提供非常清晰的指导,以便您如何拆分代码。如果使用得当,则可以产生更干净的分离,并因此可以作为代码封装的扩展。
至于 Dave 提到的服务器成本,非常有可能将服务器设置为这样的方式:登录并在正确的目录中运行 svnadmin create 就足以创建一个新的仓库。
个人经验:
作为 WowAce.com 的创始人,我也被称为 Kaelten。直到最近,我们在 web 上运行了最大的共享 SVN 仓库之一。它有超过 82k 个修订版本,并且在其历史的不同点上代表了超过 1.5k 个项目,总共超过 300 万行代码。
这样大小的仓库会占用大量磁盘空间,因为所有修订号都跨越所有项目进行共享。最终,我们不得不想出一种系统来拆分它,将巨大的多 GB 仓库切成可用的小仓库。
最终,使它能够正常工作并分裂起来比设置一个新的系统要花费我更多的工作。WowAce.com 和 CurseForge.com 仍然代表着 WoW 和其他一些游戏的插件仓库的最大选择之一,除了现在它们都以良好的方式分割开来。

3
如果这些网站之间有依赖关系,那么建议使用一个代码仓库,这样更容易回滚到稳定版本等操作。
如果这些网站是完全独立的,可以选择不同的代码仓库。如果您这么做,我不认为会有性能问题。

1
而安全方面呢?多个代码库是否允许不同的登录和提交权限? - ZJR
在多个项目中使用单个存储库是否存在任何缺点? - Camsoft
1
我想ZJR说得有道理。如果你打算为每个网站设置不同的开发人员组,并想要强制登录凭据,那么多个代表是正确的选择。除了这个安全问题外,我没有看到维护一个单一代表对所有网站有任何大的不利影响。如果你想在某个时候提取它们,那么有脚本可以做到,所以没有问题。 - rui
1
您可以使用基于路径的身份验证来管理单个存储库的安全性:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html - Davide Gualano

2

在我看来,svn/repo下的一个存储库非常适合我。我会创建一个单独的svn目录结构,其中至少包括每个网站下的trunk目录,位于svn/repo/下。

例如:

svn/repo
  /website1/trunk
  /website2/trunk
  /website3/trunk
  /website3/branches (if needed)
  /website3/tags (if needed)

根据我的经验:

  • DRY(不要重复自己) - 多个存储库只会创建更多繁琐的重复系统管理工作
  • KISS(保持简单) - 一个存储库是最简单的解决方案,而不需要牺牲功能
  • 你用不着它 - 无论我是独自工作还是与10位开发人员一起工作,一个存储库总是有效的,而多个存储库则会带来麻烦

+1 for "You ain't gonna need it"。访问单个URL的存储库并检出所需内容比跟踪多个存储库要容易得多。我在工作中有4个SVN服务器和2个VSS服务器,这是毫无意义的混乱。 - Matt Garrison

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