当前位置: 首页 > article >正文

【Git流程最佳实践】 开发较大功能时应使用project branch

目录

  • 背景和失败经验
    • 名词定义
    • 曾经使用project branch犯的错
  • 建立project branch的必要性
  • 正确的使用project branch的方法

背景和失败经验

我们曾经使用过project branch,但是后来放弃了

名词定义

特性branch(特性分支): 在开发跨越新特性的时候会从主branch(master/trunk/develop)创建而来的一个git branch。经常会以 feature/<特性名> 命名
在这里插入图片描述

project branch(子项目分支): 在开发较大功能的时候会由几个程序员组成一个子项目小组。此时可以为这个子项目建立一个较大的开发branch。这个branch可以跨越sprint。改子项目开发人员的提交先提交到该project branch上,到一定时间点,把由project branch合并(merge)到主分支上。project branch可以以feature/<子项目名>-<创建日期>命名
在这里插入图片描述

conflict(代码冲突): 在branch代码merge到另外一个分支的时候,发生了该branch跟原branch修改了同一行代码的情况。git无法自动完成合并,需要开发人员手动解决。
revert(回滚): 取消最近的N个代码改动,恢复到某个之前的版本。

在写这个题目之前我曾经认为是理所应当的。但是自从我们的项目组在使用独立开发分支之后出现了一些问题后,我们开始考虑不使用独立分支。但是带来的问题更多,至此我才真的理解了独立开发分支的重要性。果然是最透彻的领悟还是得靠犯错获得。

曾经使用project branch犯的错

以下是我们放弃project branch的理由。但是这些理由其实是错误的使用了branch而造成的。所以我会写上当时觉得project branch不好的地方,并且写上真正的原因。

  • project branch让代码变得混乱,我们在不同的project branch上有不同版本的组件。真正的原因:过多的开发branch导致代码管理混乱,比如大量长期未同步的branch使得全局代码构成复杂

在这里插入图片描述

  • 每次合并project branch的时候出现了很多conflicts。解决起来很困难。有时候解决冲突的过程中甚至带来了新的bug,比如不小心删除了正确的代码。真正的原因:长时间未同步branch导致合并时冲突过多,增加解决冲突成本。而且正确的同步方向是从主分支同步到开发分支
    在这里插入图片描述

其实这些并不是project branch本身的问题。

建立project branch的必要性

以下是建立project branch的必要性以及正确使用方法。

  • 合并前检查conflict:可以通过pull request的方式在合并前预先查看是否存在冲突。
    在这里插入图片描述

  • 评估测试窗口:在合并前事先通知测试团队,并确保他们有足够的测试窗口。
    在这里插入图片描述

  • 极大地减少revert难度:如果一个branch只包含了一个feature,将进一步减少涉及其他功能并存导致的强耦合问题。
    在这里插入图片描述

  • 在project branch上执行自动化测试:使用持续集成工具在project branch上进行sanity测试,确保合并之前功能可靠性。
    在这里插入图片描述

  • 公共的主branch的用户比你想象的多:其实使用主branch的人不只是某些engineers,别的engineers有可能也会用到。
    在这里插入图片描述

甚至测试人员和产品经理也会用到。
在这里插入图片描述

总结
使用project branchh可以最大化地减少发布风险,提升代码跟踪性和测试效率,实现更高效的团队合作。

正确的使用project branch的方法

  • 每日同步:保持每日从主branch同步代码,避免太大冲突

  • 保持年轻:该project branch不要保留太久(不能超过3个sprint

  • 压缩合并: 使用 squash & merge 来合并代码
    在这里插入图片描述

  • 保持干净:合并完后删除project branch,防止后续代码提交

原文地址:https://blog.csdn.net/nsrainbow/article/details/146421463
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/600003.html

相关文章:

  • WordPress二次开发中常用到的一些变量和函数
  • [C++面试] 你了解transform吗?
  • 嵌入式驱动开发方向的基础强化学习计划
  • fuctioncall使用经验
  • QA:备份产品的存储架构采用集中式和分布式的优劣?
  • ai-by-hand-excel: 用 Excel 手搓各种 AI 算法和模型
  • 大型语言模型(LLM)推理框架的全面分析与选型指南(2025年版)
  • 【深度学习】Self-Attention机制详解:Transformer的核心引擎
  • LeetCode 942 增减字符串匹配
  • UE4学习笔记 FPS游戏制作15修正可以换枪中可以继续换枪和开火的Bug
  • 【Rust】一文掌握 Rust 的详细用法(Rust 备忘清单)
  • Leetcode 刷题笔记 图论part05
  • Cocos Creator Shader入门实战(六):使用setProperty动态设置材质属性,以及材质常用接口
  • 解决了使用ElementUI日期选择器时,选择“2024第1周”这一特殊时间段所触发的change事件返回时间的特殊情况处理问题。
  • L2-005 集合相似度
  • Android第六次面试总结(Java设计模式篇一)
  • 【JS_hook】爬虫调试技巧
  • 块与块参照的一些知识——CAD c#二次开发
  • html5-3D立方体动画项目开发实践
  • vue中props是什么