Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 源头控制&x2013;是否每个产品都需要单独的分支机构?_Svn_Version Control_Tfs_Branch - Fatal编程技术网

Svn 源头控制&x2013;是否每个产品都需要单独的分支机构?

Svn 源头控制&x2013;是否每个产品都需要单独的分支机构?,svn,version-control,tfs,branch,Svn,Version Control,Tfs,Branch,假设您有四个产品,每个产品都有自己的发布计划。每个产品有50%的共享代码(所有产品的通用功能)和50%的产品特定代码 每个产品是否需要单独的源代码管理分支?是否应始终在四个产品分支之一开发通用功能,并在以后合并到其他产品中 典型场景:产品A下个月发布,需要核心(共享)增强功能1,产品B在四个月后发布,需要核心(共享)增强功能2(需要三个月才能完成)。将它们放在一个分支中。您希望在开发时知道产品a中的更改是否会破坏产品B。这比当您发现产品B必须重写您的公共代码库的一半时陷入合并混乱要好得多,因为您

假设您有四个产品,每个产品都有自己的发布计划。每个产品有50%的共享代码(所有产品的通用功能)和50%的产品特定代码

每个产品是否需要单独的源代码管理分支?是否应始终在四个产品分支之一开发通用功能,并在以后合并到其他产品中


典型场景:产品A下个月发布,需要核心(共享)增强功能1,产品B在四个月后发布,需要核心(共享)增强功能2(需要三个月才能完成)。

将它们放在一个分支中。您希望在开发时知道产品a中的更改是否会破坏产品B。这比当您发现产品B必须重写您的公共代码库的一半时陷入合并混乱要好得多,因为您的其他3个依赖于原样


编辑:澄清一下,我的意思是他们应该共享一个开发分支。我建议使用一个单独的生产分支来表示生产中的代码,如果您执行定期的错误修复版本,则建议使用一个维护分支。

不是对您的问题的直接回答,因为我不能100%确定是否可以给出“一刀切”的答案。但是Jeff写了一篇优秀的文章。

通用功能可以在单独的平台分支中开发,每个产品都有自己的分支用于特定于产品的开发。

我将共享代码保存在自己的产品文件夹中。然后使用在其他产品之间共享代码。处理分支和合并有点痛苦,但总比在存储库中有四个共享代码副本要好。类似这样的内容(对于发布分支和标记的发布,用/branchs/RB-1.0.0或/tags/REL-1.0.0替换主干):


更新0:注意/product_a/tags/REL-1.0.0可能使用/core/tags/REL-1.0.0,而/product_b/tags/REL-1.0.0可能使用/core/tags/REL-1.1.0,我们有一个类似的场景。我们有用于日志记录、数据访问和安全性的公共库,但这些库在多个项目中使用。我们要做的是为每个产品创建一组单独的分支,然后使用SVN外部链接到公共库。因此,公共库在所有项目的“共享”分支中维护,而所有项目本身都有独立的分支


通过这种方式,我们可以确保所有产品都是基于最新版本的公共库构建的,同时项目也能够独立维护。

我们通过将git构建为一系列分支,构建了一系列具有公共基础和大量自定义代码的网站

主分支包含核心代码,该主分支的每个分支都是核心的特定定制。在对核心进行更改时,很容易将它们下推到分支,同时保持每个自定义版本的隔离


18个站点,一个12个月以上的项目,7人的团队,它仍然处于良好的控制之下

以下是我读过的关于分支的最好文章之一:

我想我希望避免将两个项目的分支(以及因此而产生的日程安排)耦合在一起:因此,不要在一个分支中编辑公共功能并编辑多个产品,而应该是以下两种备选方案之一:

1) 独立于任何产品开发通用功能

  • 分支公共功能
  • 加上
  • 单元测试
  • 将其提交回主线
  • 建立it的产品特定分支(主线)并在产品中使用
2) 开发一个产品的通用功能

  • 建立产品分支
  • 在产品分支中,向公共库以及特定于产品的组件添加新功能
  • 单元测试和系统测试,并将其提交回主线
  • 在其他产品中使用新提交的通用功能的新主线上创建分支

    • 在树的最高点进行分支。也就是说,它应该包括所有项目的代码、共享模块……可能还包括文档/构建脚本/安装程序等。为什么?为什么不呢?到目前为止提到的所有系统(SVN、TFS、Perforce、git)中的分支都很便宜

      这种策略在使用“路径空间”分支(TFS、Perforce)的系统中尤其重要。否则,生成跨不同人员工作区一致的完整产品套件的构建将成为维护的噩梦

      一旦您将其付诸实践,您就可以在给定的分支中随意修改任意多或任意少的代码库。您可以始终进行完整构建以验证集成问题;在任何分支集之间合并任何组件的选项仍对您开放。但SDLC战略的问题完全是正交的。您可以按功能、团队、版本或以上任意组合进行分支;您可以根据自己的喜好定义正向/反向集成标准。*事实证明,每个分支恰好是一个超集,这在许多策略中都是有利的,只要您的工具能够应对挑战,就永远不会是一个缺点


      *选择一个策略是一个独立的问题,取决于很多因素。其他人建议使用一些著名的文档来帮助您做出决定。我会把最新版本的与最好的一起放在那里。

      但是如果你要发布一个产品,并检查对破坏它的共享代码的更改,该怎么办?@Ben Breen-产品a的发布分支应该使用一个发布分支作为核心。不要打断发布分支。在这段时间内,产品B、C、D中继线将使用核心中继线,直到它们准备好发布,并且将为基于LRE的产品和核心线创建一个新的发布分支
      /core/trunk
      /product_a/trunk
        /core (svn:externals 'core /core/trunk')
      /product_b/trunk
        /core (svn:externals 'core /core/trunk')
      /product_c/trunk
        /core (svn:externals 'core /core/trunk')
      /product_d/trunk
        /core (svn:externals 'core /core/trunk')