我已经在一个项目上工作了一段时间,它已经分为几个不同的版本。所有版本都有一些通用的代码库,每个版本都有独特的特定功能,每个版本都需要单独支持。
您会推荐哪种SVN结构?现在我正在为每个项目使用一个单独的存储库,但缺点是它对于大量产品来说是不切实际的。使用带分支的单个存储库的缺点是它会向每个分支添加修订号,无论是否提交了任何内容,无论从哪个分支开始。
在这种情况下,您/您将使用哪种设置?
答案 0 :(得分:5)
绝大多数是相同的存储库。由于存在通用功能,因此通常会将代码从一个项目移动到另一个项目。在存储库中移动文件会保留其历史记录,而不是在存储库中移动它们。
我不明白为什么对分支跳过数字进行修改会有问题。
供参考:在工作中,整个软件工程部门的所有项目(60个编码器)都在同一个svn存储库中。
答案 1 :(得分:1)
首先要做的第一件事是确保组件结构(将程序结构化为松散耦合的库的方式)反映了您的要求。
当您在一个或多个单独的库中使用公共代码时,事情会变得容易得多,而其他代码也是如此(但与公共代码明显分开)。然后,您可以像处理单独的产品一样处理公共代码,将不同的“版本”(如您所说)作为单独的程序处理,每个程序使用公共库的特定修订版。
说这两种方法(单独的存储库或一个大的单一存储库)可能有效。如果您的不同“版本”必须真正分开,因为它们适用于具有不同支持协议的不同客户,恕我直言的单独存储库将更好地工作(每个产品一个,公共库一个),因为您可以更轻松地避免不必要的一面不同版本之间的影响。另一方面,如果情况不同,将所有内容放在一个存储库中可以为您节省大量的管理工作,例如,当您经常需要将代码从公共库移动到其他组件之一时,反之亦然
例如,在我们公司,我们有一个销售给其他公司的软件产品库,一个用于我们的内部软件。显然,我们在这两种类型的软件之间有非常不同的支持需求。当我们需要在内部代码中重用我们产品中的库时,我们编写了一些简单的脚本来检查库的特定修订并将其复制到内部代码的构建环境中。我们尽量避免从内部软件开发到产品开发的过多影响,但是当内部要求明显属于公共库时,我们将其添加到那里,与我们的产品一起测试,当它工作时,我们更新我们的脚本以获得新版本。
答案 2 :(得分:1)
一个存储库。沿途的分支和标签。一旦你习惯它,它确实没有问题。
有一些良好的发布管理实践,并将有助于此(例如跟踪哪个版本/分支具有哪些功能等)
答案 3 :(得分:0)
如果它们都是相同代码库的不同菌株,那么我会将它们放在分支中(在单个存储库中)
我通常只为不同的程序使用新的存储库。
答案 4 :(得分:0)
我使用GIT因为它更好地处理分支和合并:)但对于SVN,它将取决于有多少项目以及它们如何相关。如果代码都是同一个程序的一部分,我会做不同的分支。
如果它们是孤立的项目,那么您需要使用不同的存储库。
答案 5 :(得分:0)
一种方法是为每个项目设置公共核心功能和存储库的存储库,这取决于将进行自定义的核心。您可以让您的子项目使用svn:externals definition提取核心文件。
这假设核心功能足够模块化以支持这种隔离。
答案 6 :(得分:0)
我个人建议使用 DVCS (不是为了阻止你使用subversion),并为每个项目都有一个单独的存储库。
如果有共同历史,那么这些存储库可以相关。 如果您之前从未使用过DVCS ,我建议使用 Mercurial ,因为它非常容易学习,并且在Windows和Linux上同样运行良好。
答案 7 :(得分:0)
除了那些推荐分支而不是多个存储库的人之外,不受影响的分支机构的修订版数量增加并不是真正的缺点。
答案 8 :(得分:0)
我会选择一个包含多个分支的存储库。我认为你不应该担心修改号码 - 给你的分支机构好名字&使用标签从外部引用不同的部署。 (例如 - 为分支A的构建3创建一个标记)这样,在处理SVN时,你只需要担心修订号。