• git分支管理以及不同git工作流对比


    0、 单人开发场景

    单人开发可能会出现的场景之一
    在这里插入图片描述

    如果多人协同开发我们则需要使用更加专业的工具Git(分布式版本控制)

    1、多人协同工作使用git会出现什么问题?

    代码冲突:

    问题: 当多个开发者同时修改同一文件或同一行代码时,可能会发生冲突,导致合并失败。
    解决: 定期拉取最新的代码,确保本地工作副本是最新的。解决冲突时,可以使用合并工具手动解决,或者与其他开发者协商如何合并。

    分支管理问题:

    问题: 不正确的分支管理可能导致代码混乱,不同功能或修复可能在不同的分支上进行,但合并不当可能导致问题。
    解决: 采用清晰的分支策略,例如使用 Gitflow、GitHub Flow 或 GitLab Flow。确保团队成员了解并遵循这些策略。

    不一致的编码规范:

    问题: 不同的开发者可能有不同的编码风格和规范,导致代码难以阅读和维护。
    解决: 使用代码审查工具来强制一致的编码规范。在团队中共享和讨论编码规范,并确保团队成员了解和遵循。

    优秀的git commit(上) 和 一般的git commit(下)
    在这里插入图片描述
    在这里插入图片描述

    2、目前所遇见的问题:

    现状:分支管理没有特别约束,代码提交没有强约束,review难度大,回溯问题难。

    期望:参考gitlabflow或者gitflow的分支管理,在开发过程中依靠约束提升质量。

    3、什么是git工作流?

    一套定义了在使用 Git 进行版本控制时如何组织和管理代码的规范或指南。

    而当项目处于一个多人协作的状态下,工作流程显得非常之重要。假设当两个甚至多个开发者同时再开发各自新功能时,如果在同一分支上进行协作时,这必然会产生大量的冲突。

    而工作流的做法,就是每个开发者可以各自切出一个独立分支,当各自功能实现并且测试成功后,再自行合并到master分支中,甚至无需等待其他功能实现再一起发布。

    目的:就是对git分支的进行规范和管理

    4、常见的git工作流有哪些?

    GItflow、Githubflow、GItlabflow(git工作流不是软件,而是规范)

    Gitflow:

    Gitflow 使用了一种复杂的分支模型,其中包括 master、develop、feature、release 和 hotfix 分支。

    Master分支:

    该分支主要用来存放稳定、随时可以上线的版本。

    这个分支的来源只能从别的分支合并过来,开发者不会直接commit到这个分支上。

    通常我们也会在这个分支上的提交打上版本号标签。

    Develop分支:

    这个分支主要是所有开发的基础分支。

    当要添加功能时,所有功能都是从这个分支切出去的,而功能分支实现后,也都会合并回来这个分支中。

    master和develop分支是我们最常见的分支,它们被称作长期分支,一直存活在整个工作流程中,而其它的分支大部分会因任务结束而被删除。

    Feature 分支: 功能开发在独立的 feature 分支上进行,完成后合并回 develop 分支。

    Release 分支:

    发布前的准备工作在 release 分支上进行,包括版本号的增加和文档的更新。
    当develop分支完成需求后,就可以从develop分支中开一个release分支,进行上线前最后的测试。
    测试完成后,释放release分支将会同时合并到master以及develop分支中。

    Hotfix 分支: 针对生产环境的紧急修复在 hotfix 分支上进行。

    常见的gitflow开发流程如下图所示:
    在这里插入图片描述

    GitHub Flow:

    GitHub Flow 是一种更简化的工作流,只包含 master 分支和短暂的 feature 分支。

    Master分支:只有这一个长期存在的分支
    Feature 分支: 功能开发在独立的 feature 分支上进行,完成后通过 Pull Request (PR)合并到 master 分支。
    PR其实就是code review和discuss

    常见的github flow开发流程如下图所示:
    在这里插入图片描述

    GitLab Flow:

    GitLab Flow 介于 Gitflow 和 GitHub Flow 之间,它只包含 master 和短暂的 feature 分支,但还包括 production 分支用于持续交付。

    吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。

    Gitlab flow 的最大原则叫做”上游优先”(upsteam first),即只存在一个主分支master,它是所有其他分支的”上游”。只有上游分支采纳的代码变化,才能应用到其他分支。

    对于”持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。比如,”开发环境”的分支是master,”预发环境”的分支是pre-production,”生产环境”的分支是production。

    Master分支:主线

    Feature 分支:

    功能开发在独立的 feature 分支上进行,完成后通过 Merge Request 合并到 master 分支。

    Production 分支:

    master 分支中的代码被视为处于开发阶段,而 production 分支则用于生产环境部署,确保每次合并到 production 分支的代码都是稳定和可部署的。

    常见的gitlab flow开发流程如下图所示:
    在这里插入图片描述

    对于”持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。
    比如,”开发环境”的分支是master,”预发环境”的分支是pre-production,”生产环境”的分支是production。

    5、如何选择一个合适的git工作流

    总结:不同的项目和团队需要根据情况采用不同的工作流

    gitflowgithubflowgitlabflow
    使用复杂程度复杂简单适中
    适用场景大型项目和复杂发布流程敏捷开发和持续交付对生产环境的持续交付

    6、其他规范

    commit规范:都需要写Commit message(提交说明)
    master分支必须是protected
    分支命名规范:feature-xxx,release-xxx,fixbug-xxx
    合并分支:使用merge还是rebase
    规范的提issue;例如提出issue,并且建立分支解决issue,然后关闭issue
    合理的创建tag

    参考引用

    https://www.zhihu.com/question/379545619/answer/1082534586
    https://www.ruanyifeng.com/blog/2015/12/git-workflow.html
    https://blog.csdn.net/qq_35246620/article/details/65636022
    https://www.cnblogs.com/xiaoqi/p/gitlab-flow.html
    https://zhuanlan.zhihu.com/p/342020501
    https://juejin.cn/post/6989145079667490847

  • 相关阅读:
    代码坏味道
    2.证明 非单一点 Oct.2023
    【win11】注册表修改fix 右键没有新建
    CiteSpace关键词共现图谱含义详细解析与注意事项
    Open3D 生成空间圆点云
    【高效的秘密】让k8s运维更高效-日志搜索脚本
    图书管理系统
    3.1.1手写线程池与性能分析
    C语言中的 |、||、&、&&、^、~、<<、>> 运算符
    华为数字能源,开启超充新纪元
  • 原文地址:https://blog.csdn.net/qq_40733911/article/details/134403902