分支策略[关闭]

     2023-03-15     179

关键词:

【中文标题】分支策略[关闭]【英文标题】:Branching Strategies [closed] 【发布时间】:2010-09-07 06:59:40 【问题描述】:

我工作的公司开始对他们当前的分支模型产生问题,我想知道社区已经接触了哪些不同类型的分支策略?

有没有适合不同情况的好方法?贵公司用什么?它们的优缺点是什么??

【问题讨论】:

阅读经典:oreilly.com/catalog/practicalperforce/chapter/ch07.pdf 【参考方案1】:

这是我过去成功使用的方法:

/trunk - 最前沿。代码的下一个主要版本。在任何给定时间可能会或可能不会工作。

/branches/1.0、1.1等代码的稳定维护分支。用于修复错误,稳定新版本。如果是维护分支,它应该编译(如果适用)并在任何给定时间准备好进行质量检查/发货。如果是稳定分支,它应该编译并且功能完整。不应该添加任何新功能,不应该重构,也不应该清理代码。您可以添加前缀来表示稳定分支与维​​护分支。

/branches/cool_feature。用于可能会或可能不会进入主干(或维护分支)的高度实验性或破坏性工作。不保证代码编译、工作或其他行为正常。在合并到主线分支之前应尽可能持续最短时间。

/tags/1.0.1、1.0.2、1.1.3a 等。用于标记打包和发布的版本。永远不会改变。制作任意数量的标签,但它们是不可变的。

【讨论】:

在您的分支/cool_feature 文件夹中,您是分支整个主干还是仅分支某些子文件夹? 通常是整个后备箱。很少有一项功能只涉及一个目录。如果你没有运行 svn 1.5,我也强烈推荐 svnmerge.py。使整个分支/合并过程变得更好。 你展示了一个非常好的模型。我的公司执行的一项政策(我认为这是相当普遍的)是主干应始终构建并通过所有测试。所以你在你的模型下说它“可能有效,也可能无效”。有不同程度的稳定性,我认为执行主干应该始终构建和自动化测试应该始终通过的规则通常是一个很好的规则。 如果您使用分支来“稳定新版本”,那么您如何(持续)构建和(自动)测试它?对我来说,trunk 最重要的是它是每次提交后(持续)构建和(自动)测试的版本。我认为应该在主干中稳定发布,并为未来和过去的版本使用分支,而主干应该用于当前版本。如果可以(持续)构建和(自动)测试所有分支,那么根本不需要主干。我说的对吗?【参考方案2】:

我们的存储库如下所示:

/trunk
/branches
/sandbox
/vendor
/ccnet

/trunk 是您的标准、前沿开发。我们使用 CI,因此必须始终构建并通过测试。

/branches 这是我们进行“批准”的大型更改的地方,即我们知道可以将其放入主干但可能需要一些工作并且会破坏 CI 的地方。还有我们在维护版本上工作的地方,它们有自己的 CI 项目。

/sandbox 每个开发者都有自己的沙箱,外加一个共享沙箱。这适用于您在不进行实际工作时执行的“让我们将 LINQ 提供程序添加到我们的产品”类型的任务。它最终可能会进入主干,也可能不会,但它在那里并且在版本控制之下。这里没有 CI。

/vendor 标准供应商分支,用于我们编译的项目,但它不是我们维护的代码。

/ccnet 这是我们的CI标签,这里只有CI服务器可以写入。后见之明会告诉我们将其重命名为更通用的名称,例如 CI、BUILDS 等。

【讨论】:

【参考方案3】:
    主动开发的一个分支(/main 或 master,取决于行话) 每个维护版本都有一个分支 -> 它只会收到非常小的修复,而所有主要开发都转到 /main 每个新任务都有一个分支:创建一个新分支来处理 Bugzilla/Jira/Rally 上的每个新条目。经常提交,使用 inch pebble checkins 自行记录更改,并仅在完成并经过良好测试后将其合并回其“父”分支。

看看这个http://codicesoftware.blogspot.com/2010/03/branching-strategies.html 以获得更好的解释

【讨论】:

【参考方案4】:

第一件事:KISS(保持简单愚蠢!)

/分支机构 /RB-1.0 (*1) /RB-1.1 (*1) /RB-2.0 (*1) /标签 /REL-1.0(或任何您的版本,例如 1.0.0.123 *2) /REL-1.1 /REL-2.0 /树干 当前开发具有很酷的新功能;-)

*1) 保持版本可维护 - 例如如有必要和/或需要,可以合并到主干的服务包、修补程序、错误修正) *2) major.minor.build.revision

经验法则:

    Tags 文件夹不需要签出 发布分支中只有少量编码(使合并更简单) - 没有代码清理等。 永远不要在标签文件夹中编码 切勿将具体的版本信息放入源文件中。使用占位符或 0.0.0.0,构建机制将替换为您正在构建的版本号 永远不要将第三方库放入源代码管理中(也没有人会将 STL、MFC 等库添加到 SVN ;-)) 仅提交可编译的代码 更喜欢使用环境变量而不是硬编码路径(绝对路径和相对路径)

--hfrmobile

【讨论】:

【参考方案5】:

当一个版本准备好进行最终 QA 时,我们会进行分支。如果在 QA 过程中发现任何问题,则会在分支中修复错误,验证然后合并到主干。一旦分支通过了 QA,我们将其标记为发布。该版本的任何修补程序也会对分支进行、验证、合并到主干,然后标记为单独的版本。

文件夹结构如下所示(1 个 QA 行、2 个修补程序版本和主干):

/分支

/REL-1.0

/标签

/REL-1.0

/REL-1.0.1

/REL-1.0.2

/主干

【讨论】:

【参考方案6】:

我们使用狂野、狂野、西方风格的 git-branch。我们有一些分支具有按惯例定义的众所周知的名称,但在我们的例子中,标签实际上对我们更重要,以满足我们的公司流程政策要求。

我在下面看到您使用 Subversion,所以我认为您可能应该查看Subversion Book 中有关分支的部分。具体来说,请查看Branch Maintenance 和Common Branch Patterns 中的“存储库布局”部分。

【讨论】:

【参考方案7】:

我在这里没有看到的替代方案是“变革分支”哲学。

如果您的后备箱不是“狂野西部”,如果后备箱是“当前版本”怎么办?当一次只发布一个版本的应用程序时,这很有效 - 例如网站。当需要新功能或错误修复时,会创建一个分支来保存该更改。这通常允许将修复程序迁移到单独发布,并防止您的牛仔编码员意外添加您不打算发布的功能。 (通常是后门——“仅用于开发/测试”)

Ben Collins 的建议对于确定哪种风格适合您的情况非常有用。

【讨论】:

我们曾经有这个模型,但是从分支不断合并回来的变化变得非常复杂。现在我们使用树干作为前沿,分支用于稳定和维护。这样就不需要合并树了。【参考方案8】:

Gnat 写了 this excellent break down 关于分支策略的各种建议。

没有一种分支策略,它适用于:

您的团队规模 您的产品和生命周期 您使用的技术(网络、嵌入式、Windows 应用程序) 您的源代码控制,例如Git、TFS、汞

Jeff Atwood 的post 打破了很多可能性。另一个要补充的是促销的概念(来自 Ryan Duffield 的链接)。在此设置中,您有一个 dev 分支、test bracnh 和 release 分支。你提升你的代码,直到它到达发布分支并被部署。

【讨论】:

【参考方案9】:

我们目前有一个用于持续维护的分支,一个用于“新计划”的分支,这意味着“将来某个时候会出现的东西;我们不确定什么时候”。我们偶尔也会进行两个维护分支:一个为当前生产中的内容提供修复,一个仍处于 QA 阶段。

我们看到的主要优势是能够更快速地响应用户请求和紧急情况。我们可以对生产中的分支进行修复并发布它,而无需发布任何可能已经签入的额外内容。

主要缺点是我们最终会在分支之间进行大量合并,这增加了某些内容被遗漏或错误合并的机会。到目前为止,这还不是问题,但一定要牢记这一点。

在我们制定此政策之前,我们通常在主干中进行所有开发,并且仅在发布代码时才进行分支。然后,我们根据需要对该分支进行了修复。它更简单,但没有那么灵活。

【讨论】:

【参考方案10】:

我们在工作中遵循的理念是使后备箱保持在您可以随时推动而不会对站点造成严重损害的状态。这并不是说后备箱将永远处于完美状态。当然,其中会有错误。但关键是永远不要让它彻底坏掉。

如果您有要添加的功能,请分支。设计变更,分支。有很多次我想,“哦,我可以在后备箱里做这件事,不会花那么长时间”,然后 5 小时后,当我无法找出破坏东西的错误时,我真希望我有分支。

当您保持主干清洁时,您就有机会快速应用并推出错误修复。您不必担心您方便地分支的损坏代码。

【讨论】:

【参考方案11】:

对于 Subversion,我同意 Ryan Duffield 的评论。他引用的那一章很好地分析了使用哪种系统。

我问的原因是 Perforce 提供了一种完全不同的方法来从 SVN 或 CVS 创建分支。另外,所有的 DVCS 都给出了它自己的分支哲学。您的分支策略将取决于您使用的工具。

仅供参考,Svnmerge.py 是一个帮助在 SVN 中合并分支的工具。只要您经常(每 10-30 次)提交使用它,它就可以很好地工作,否则该工具会变得混乱。

【讨论】:

【参考方案12】:

无论选择哪种分支模式,您都应该尝试将分支保持为二叉树形式,如下所示:

   trunk - tags
     |
    next
   /  \  \
bugfix  f1  f2
        /   \  \          
       f11    f21 f22
子节点只能与直接父节点合并。 尽量只将整个分支与父分支合并。永远不要合并分支中的子文件夹。 只要您只合并并从整个分支中挑选,您就可以在需要时挑选提交。 上图中的下一个分支只是为了说明,你可能不需要。

【讨论】:

执行具有高分支分歧的任务的最佳策略[关闭]

】执行具有高分支分歧的任务的最佳策略[关闭]【英文标题】:Beststrategytoexecutetaskswithhighbranchdivergency[closed]【发布时间】:2014-02-0919:02:18【问题描述】:我几年前写了一个项目,在单个CPU内核上连续计算N个类似的任务。这N个任... 查看详情

分支和发布策略

】分支和发布策略【英文标题】:BranchingandReleasingstrategy【发布时间】:2011-02-1419:55:07【问题描述】:我发现有些人在谈论一些分支策略。所以我想我会得到一些cmets。所以项目是从主干分支出来的。称它为分支A。当工作在分支A... 查看详情

git企业中常用分支管理策略(代码片段)

Git企业中常用分支管理策略一般企业中开发一个项目的分支策略主分支master开发分支develop功能分支feature预发布分支 releasebug分支fixbug其它分支other主分支master代码库应该有一个、且仅有一个主分支。所有提供给用户使用的... 查看详情

DevOps 中的分支策略

】DevOps中的分支策略【英文标题】:BranchingstrategyinDevOps【发布时间】:2017-03-2006:42:04【问题描述】:我正在使用TFS设置DevOps流程,并且想知道分支策略。如果我有以下示例分支(图片来自Guidance:ABranchingstrategyforScrumTeams)。我已... 查看详情

Azure DevOps 中链式分支的分支策略

】AzureDevOps中链式分支的分支策略【英文标题】:BranchingstrategiesonchainedbranchinAzureDevOps【发布时间】:2020-06-1709:46:08【问题描述】:我从master创建了feature-1分支,然后从feature-1创建了feature-2分支,因为我需要来自feature-1的更新。ma... 查看详情

分支和合并策略

】分支和合并策略【英文标题】:BranchingandMergingStrategies【发布时间】:2010-12-0402:42:40【问题描述】:我的任务是制定未来6个月的分支、合并和发布策略。复杂性在于我们将运行多个项目,所有项目都有不同的代码更改和不同的... 查看详情

跨仓库分支策略构建验证 - 如何?

】跨仓库分支策略构建验证-如何?【英文标题】:Cross-repobranchpolicybuildvalidation-howto?【发布时间】:2020-03-2712:01:42【问题描述】:因此,AzureDevOpsUI现在支持设置跨存储库策略以保护所有现有和未来存储库的默认(主)分支-很好... 查看详情

git----分支管理之分支管理策略04

  通常,合并分支时,如果可能,Git会用Fastforward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fastforward模式,Git就会在merge时生产一个新的commit,这样,从分支历史上就可以看出分支信息。下面我们实... 查看详情

git入门:创建合并分支解决冲突分支管理策略

分支创建与合并理解:相当于创建多一个与现在一模一样的平行时空在这基础上继续干活但其实并不会影响到当前时空,合并时再决定A时空并入B时空还是B时空并入A和空查看分支gitbranch;创建分支gitbranch‘分支名‘切换分支gitchec... 查看详情

git分支管理策略

Git分支管理策略 如果你严肃对待编程,就必定会使用"版本管理系统"(VersionControlSystem)。眼下最流行的"版本管理系统",非Git莫属。相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(merge... 查看详情

git学习6--分支管理策略,bug分支

1.准备合并dev分支,请注意--no-ff参数,表示禁用Fastforward:$gitmerge--no-ff-m"mergewithno-ff"devMergemadebythe‘recursive‘strategy.readme.txt|1+1filechanged,1insertion(+)合并后,我们用gitlog看看分支历史:$gitlog--graph--pretty=onelin 查看详情

svn分支管理策略个人见解

本篇目录前言SVN分支管理策略VisualSVNServerTortoiseSVN客户端Repository的创建Checkouttrunk创建新项目MyProjecttrunk更新提交更新,迭代版本创建TagV1.0基于Tag的HotfixBranchHotfixBranch改动Marge(合并)到trunk中同时创Tag_V1.1进行发布定制化分支Customize... 查看详情

git分支策略

比较成熟的一个git代码分支管理体系  gitmerge--no-ffdevelop   分享链接:https://blog.csdn.net/zhangxiao93/article/details/49991279http://www.ruanyifeng.com/blog/2012/07/git.html 查看详情

[廖雪峰]git分支管理策略

通常,合并分支时,如果可能,Git会用 Fastforward 模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制 禁用 Fastforward 模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支... 查看详情

git安装教程分支管理之分支管理策略(代码片段)

通常,合并分支时,如果可能,Git会用Fastforward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fastforward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。下面我们实战一... 查看详情

git分支管理策略

在项目中推荐的Git分支管理策略介绍:主分支Master永久分支首先,代码库应该有一个、且仅有一个主分支Master。项目的正式版本,都在这个主分支上发布。它是自动建立的,版本库初始化以后,默认就是在Master分支进行开发。功... 查看详情

如何使用 TeamCity 和 Octopus 完成这种分支和部署策略

】如何使用TeamCity和Octopus完成这种分支和部署策略【英文标题】:HowtoAccomplishThisBranchingandDeploymentStrategyUsingTeamCityandOctopus【发布时间】:2016-05-1620:26:06【问题描述】:我一直在研究并试图找出满足以下要求的最佳分支和部署策略... 查看详情

Web 应用程序分支策略的想法?

】Web应用程序分支策略的想法?【英文标题】:Ideasforbranchingstrategyforawebapplication?【发布时间】:2011-11-3019:32:47【问题描述】:我对您对我们的Web应用程序分支策略的想法很感兴趣。特别是,我想知道我是否满足了不同执行环境... 查看详情