如何维护开发代码和生产代码? [关闭]

2024-01-06

维护代码时要遵循的最佳实践和经验法则是什么?在开发分支中只拥有生产就绪的代码是一个好的做法,还是应该在开发分支中提供未经测试的最新代码?

你们如何维护开发代码和生产代码?

编辑 - 补充问题 - 您的开发团队是否遵循“尽可能尽快提交并且经常即使代码包含小错误或不完整”协议或“提交-将代码提交到 DEVELOPMENT 分支时使用“ONLY-perfect-code”协议?


2019 年更新:

如今,这个问题会在使用 Git 的环境中出现,并且已经使用了 10 年了分散式 https://stackoverflow.com/a/2563917/6309发展workflow https://stackoverflow.com/a/2705286/6309(主要合作通过 GitHub https://github.blog/2018-04-10-ten-years-of-code/) 显示了一般最佳实践:

  • master该分支是否已准备好随时部署到生产中:下一个版本,其中合并了一组选定的功能分支master.
  • dev(或集成分支,或'next') 是为下一版本选择的功能分支一起进行测试的分支
  • maintenance (or hot-fix) 分支是当前版本演变/错误修复的分支,可能合并回dev and or master https://stackoverflow.com/a/55077131/6309

那种工作流程(你不合并dev to master,但是您只将功能分支合并到dev,然后如果选择,则master,以便能够轻松删除尚未准备好下一个版本的功能分支)是在 Git 存储库本身中实现的,其中git 工作流程 https://stackoverflow.com/a/53405887/6309(一个词,此处图示 https://stackoverflow.com/a/44470240/6309).
更多信息请访问rocketraman/gitworkflow https://github.com/rocketraman/gitworkflow。这样做与基于主干的开发的历史记录在评论和讨论中亚当·迪米特鲁克 (Adam Dymitruk) 的这篇文章 http://dymitruk.com/blog/2012/02/05/branch-per-feature/.

(source: Gitworkflow: A Task-Oriented Primer https://github.com/rocketraman/gitworkflow/blob/master/docs/task-oriented-primer.adoc#topic-graduation-to-master)

注意:在分布式工作流程中,您可以随时提交并将一些 WIP(正在进行中的工作)推送到个人分支,不会出现任何问题:您将能够在将提交成为功能分支的一部分之前重新组织(git rebase)您的提交。


原始答案(2008年10月,10多年前)

这一切都取决于发布管理的顺序性质

首先,你行李箱里的东西都在吗真的是为了下一个版本? 您可能会发现当前开发的一些功能是:

  • 太复杂,还需要完善
  • 没有及时准备好
  • 有趣,但不适用于下一个版本

在这种情况下,主干应包含所有当前的开发工作,但在下一个版本之前早期定义的发布分支可以充当合并分行其中仅合并适当的代码(针对下一个版本进行验证),然后在认证阶段进行修复,最后在投入生产时冻结。

当涉及到生产代码时,您还需要管理您的补丁分支,同时记住:

  • 第一组补丁实际上可能在首次发布到生产之前开始(这意味着您知道您将进入生产,但会出现一些无法及时修复的错误,但您可以在单独的分支中启动针对这些错误的工作)
  • 其他补丁分支将有机会从明确定义的生产标签开始

当涉及到 dev 分支时,你可以拥有一个 trunk,除非你需要进行其他开发工作在平行下 like:

  • 大规模重构
  • 测试新技术库,这可能会改变您在其他类中调用事物的方式
  • 新发布周期的开始,需要纳入重要的架构更改。

现在,如果您的开发-发布周期非常连续,您可以按照其他答案的建议进行:一个主干和多个发布分支。这适用于小型项目,其中所有开发都肯定会进入下一个版本,并且可以冻结并作为可以进行补丁的发布分支的起点。这是名义上的过程,但一旦你有一个更复杂的项目......它就不再足够了。


回答 Ville M. 的评论:

  • 请记住,开发分支并不意味着“每个开发人员一个分支”(这会引发“合并疯狂”,因为每个开发人员都必须合并其他人的工作才能查看/获取他们的工作),而是每个开发一个开发分支努力。
  • 当这些工作需要合并回主干(或您定义的任何其他“主”或发布分支)时,这是开发人员的工作,not- 我再说一遍,不是 - SC 经理(他不知道如何解决任何冲突的合并)。项目负责人可以监督合并,这意味着确保它按时开始/完成。
  • whoever you choose for actually doing the merge, the most important is:
    • 拥有可以部署/测试合并结果的单元测试和/或组装环境。
    • 已定义标签before合并的开始,以便在所述合并证明其本身太复杂或太长而无法解决时能够返回到之前的状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何维护开发代码和生产代码? [关闭] 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐