引言

版本控制是开发中不可或缺的一部分,他允许多人同时协作,通过记录每一次代码的变更,帮助开发者理解何时、为什么以及谁做了修改。这不仅有助于错误追踪和功能回溯,还使得团队能够并行工作,通过分支管理实现功能的增加和问题的修复。此外,也允许开发者在出现问题时回滚到之前的状态,确保项目的稳定发展。

1. 分支命名策略

主要分支命名

  • mainmaster:项目的主分支,存放正式发布的版本。
  • develop:开发分支,用于日常开发阶段验证新功能,此分支不会推送至生产环境;且由于脏代码的堆积,偶尔需要重建下。

功能性分支命名

以一种结构化的方法命名,如<类型>/<版本>/<描述>,例如:fix/v1.0.0/authentication。这里的版本可根据实际情况决定,可以是 v1.0.0,也可以是 v1.0v11.0.0 等。

  • feature/<版本>/<功能>:用于开发新功能的分支,例如:feature/v1.0.0/authentication
  • fix/<版本>/<问题描述>:修复特定版本中的错误,例如:fix/v1.0.0/login

其他类型名:docsrefactortest 等。

这样命名的好处是,面对 SourceTree 这样的图形化客户端时,可以清晰的看清项目的版本迭代记录。

注:由于不同的规范和风格,这里的分隔符也常使用下划线,例如:feature_v1.0.0_authentication

特定目的或临时性分支命名

  • release/<版本>:用于准备发布的版本,允许进行最后的调整,例如:release/v1.0.0
  • hotfix/<版本>/<问题描述>:用于紧急修复生产环境中的问题,例如:hotfix/v1.0.0/payment

个人或团队工作分支命名

  • <用户>/<类型>/<版本>/<描述>:个人工作分支,明确指出负责人和工作内容,例如:john/fix/v1.0.0/login-issue
  • team/<团队>/<类型>/<版本>/<描述>:团队工作分支,有助于区分不同团队的工作,例如:team/account/feature/v1.0.0/add-nickname

分支命名策略的重要性

  1. 清晰性:良好的命名策略可以快速告诉其他人这个分支的目的和内容。
  2. 组织性:有助于在大型项目中管理和维护众多的分支。
  3. 自动化:一些自动化工具和 CI/CD 流程可以根据分支命名模式自动执行特定任务。

案例项目:https://github.com/mazeyqian/mazey/actions

2. 代码提交规范

一个良好的提交信息能够让其他人快速理解这次提交的目的,以及它对项目产生的影响。以下是一个推荐的代码提交规范格式:

<type>(<scope>): <subject>
  • <type>:提交类型,用于说明 Commit 的类别,比如是修复 Bug(fix)、添加新功能(feature)还是文档变更(docs)等;
  • <scope>:影响范围,可选项,用于指明本次提交影响的范围或模块,例如:loginuserModeldocs 等;
  • <subject>:简短描述,具体说明本次提交的主要内容,应简洁明了。

类型(type)

常见的提交类型包括:

  • feat:新增功能(feature);
  • fix:修补 Bug;
  • docs:文档变更;
  • style: 格式(不影响代码运行的变动);
  • refactor:重构(即不是新增功能,也不是修改 Bug 的代码变动);
  • test:增加测试;
  • chore:构建过程或辅助工具的变动。

主题(subject)

主题是对 Commit 目的的简短描述,不超过 50 个字符,建议使用现在时态和小写字母,并且不以句号结尾,例如:

  • feat(login): add captcha to login form
  • fix(userModel): correct age calculation logic
  • docs(readme): update installation instructions

案例项目:https://github.com/mazeyqian/mazey

3. Merge Request(MR)的实践

Merge Request(MR)或 Pull Request(PR)是代码审查和合并的重要环节。它不仅涉及代码的合并,还可以帮助团队成员之间进行沟通、提供反馈和确保代码质量。

清晰明确的标题

  • 明确模块或功能:如果可能,指明 MR 影响的具体模块或功能,使得标题更加具体,例如:feat(user): 添加用户登录功能fix(database): 解决并发访问时的数据不一致问题
  • 关联 Issue:如果 MR 与特定的 Issue 相关,可以在标题中直接提及该 Issue,例如使用 Close #1 表示此次 MR 旨在解决编号为 1 的 Issue。这不仅能够提供更多上下文信息,还可以在某些平台上自动关闭相关的 Issue。
  • 使用标签:在标题中使用标签(例如:featfixdocs 等)来标明 MR 的类型,这有助于快速了解 MR 的性质。

案例项目:https://github.com/tzfqh/gmdtable

详细的描述

对 MR 进行详细说明的部分,应该包含所有必要的信息,以便理解这次提交的背景、目的和具体实现。

  • 背景和目的:首先简要说明为什么需要这次改动,他解决了什么问题或带来了哪些新功能。
  • 完成的任务清单:提供一个清单,列出了此次 MR 完成了哪些具体任务。这有助于跟踪 MR 的进度和范围。
  • 变更说明:详细描述代码变更的内容,包括新增、修改或删除了哪些功能或模块。
  • 测试和验证:说明已经进行了哪些测试或验证步骤来确保代码的质量和功能的正确性。
  • 额外信息:如有必要,可以添加如何配置新功能、影响的用户或系统部分、未来规划等额外信息。

例如:

Title: feat(login): 添加验证码功能 (Close #1)

Description:

实现了在用户登录流程中添加验证码功能,旨在增强系统安全性。

已完成的任务:

- 设计并实现验证码生成逻辑
- 在登录表单中集成验证码输入字段
- 实现验证码验证逻辑
- 更新相关文档和测试用例 此次改动通过了所有单元测试,并在本地环境中进行了手动测试验证,确保新加入的验证码功能正常工作。 关联 Issue:#1

4. 打标签

打标签(Tagging)是一种标记特定版本的方法,他允许在项目的历史中快速定位到某个点。

打轻量标签

轻量标签(Lightweight Tag)是指向某个提交对象的引用,他就像一个不会改变的分支。创建轻量标签不会存储额外的信息(如标签创建者、邮箱、创建日期等)。如果只是为了快速记住某个提交点,可以使用轻量标签。

git tag <tagname> <commit-hash>
  • <tagname>:想要创建的标签名称;
  • <commit-hash>:(可选)想要标记的提交的哈希值。如果省略,Git 会在当前提交上创建标签。

示例:

git tag v1.0.0 abc1234

打注释标签

注释标签(Annotated Tag)会存储额外的信息,比如创建者的名字、电子邮件地址、日期和标签信息。

git tag -a <tagname> -m "<tagmessage>" <commit-hash>
  • -a:表示创建一个注释标签;
  • <tagname>:想要创建的标签名称;
  • -m:后面跟随的是这个标签的信息;
  • <tagmessage>:标签信息,简短描述这个标签;
  • <commit-hash>:(可选)你想要标记的提交的哈希值。

示例:

git tag -a v1.0.1 -m "Release version 1.0.1 with minor bug fixes" abc1234

推送标签到远程仓库

默认情况下,git push 命令不会将标签推送到远程仓库,需要显式地推送标签。

推送特定标签:

git push origin <tagname>

示例:

git push origin v1.0.0

推送所有本地标签:

git push origin --tags

5. 遇到问题使用 git revert 回滚

git revert 是用于撤销之前提交的变更的命令,git revert 的操作是通过创建一个新的提交来实现的,这个新提交是对旧提交的直接反转,即他会引入与旧提交相反的变更。这样做的好处是它不会改变项目历史。

命令语法

git revert <commit-hash>

这里 <commit-hash> 是你想要撤销的提交的哈希值。

操作流程

  • 找到你想要撤销的提交的哈希值,可以通过 git log 查看提交历史;
  • 执行 git revert 命令并指定相应的哈希值;
  • Git 会创建一个新的提交,这个提交会撤销指定提交所做的所有变更;
  • 如果有冲突,解决完冲突才能完成 revert 操作。

使用场景

git revert 是在不打乱项目历史的情况下撤销变更的安全方式。例如,如果一个已经发布到生产环境中的提交引入了一个严重错误,使用 git revert 可以快速地撤销这个提交带来的影响,同时保留了完整的项目历史。

git reset 的区别

git reset 也可以用来撤销变更,但他通过移动分支指针到旧的提交来实现,这会改变项目历史。

总结

版本控制是软件开发的核心,促进团队协作与项目管理。通过制定明确的分支命名策略(例如:maindevelopfeature/<版本>/<功能> 等),遵循一致的代码提交规范,如指明提交类型和简短描述,增强了历史记录的可读性,可以清晰地组织和理解项目的结构与进展。

版权声明

本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者后除和本文原始地址:https://blog.mazey.net/4581.html

(完)

Git 版本控制:构建高效协作和开发流程的最佳实践的更多相关文章

  1. 5 个 Git 工作流,改善你的开发流程

    原文地址:5 Git workflows you can use to deliver better code and improve your development process 原文作者:Vi ...

  2. Typescript 开发环境的最佳实践

    Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...

  3. Unity动态构建mesh绘制多边形算法流程分析和实践

    前言 先说一下,写这篇博文的动机,原文的博主代码写的十分潇洒,以至于代码说明和注释都没有,最近恰逢看到,所以以此博文来分析其中的算法和流程 参考博文:https://blog.csdn.net/lin ...

  4. SpringBoot快速开发REST服务最佳实践

    一.为什么选择SpringBoot Spring Boot是由Pivotal团队提供的全新框架,被很多业内资深人士认为是可能改变游戏规则的新项目.早期我们搭建一个SSH或者Spring Web应用,需 ...

  5. Unity游戏开发技术的最佳实践

    活动详情   作为全球规模最大的Unity开发者聚会,历年的Unite大会都成为开发者们获取Unity最新技术知识,交流开发经验,把握行业发展脉搏,体验全球前沿科技与高品质Made with Unit ...

  6. 使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

    前言 在今年声网主办的「RTE2022 编程挑战赛」中,数支队伍经过一个多月的努力开发,很多优秀的作品最终突出重围,斩获大奖.本文由RTE2022编程挑战赛获奖者之一李新春撰写,他主要围绕获奖作品「P ...

  7. 【转】Python开发指南:最佳实践精选

    总体原则 价值 “为别人开发你也想要使用的工具.” ——Kenneth Reitz "简洁总是胜过可用." ——Pieter Hintjens "满足90%的使用场景.忽 ...

  8. python自动化测试开发利器ulipad最佳实践(可写python测试代码也可编写selenium、Appium等)...

    介绍 UliPad是一个国人开发的python轻量级编辑器,导向和灵活的编程器.它如类浏览器,代码自动完成许多功能,如:HTML查看器,目录浏览器,向导等. 下载与安装 下载地址:https://py ...

  9. 弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践

    CODING 中提供了内置云主机用来执行持续集成(CI)中的构建计划,能够胜任大部分构建任务.但如果碰上了大型项目的构建,或者需要在本地服务器生成构建成果,单个计算资源就显得有点捉急了.针对这一部分需 ...

  10. Express 开发与部署最佳实践 -- 待续

    链接 nginx 代理缓存  压缩 等 全部采用异步 使用try catch  处理同步异常  promise 处理异步 异常,  而不是使用 domains  或者 uncaughtExceptio ...

随机推荐

  1. 业务开发做到零 bug 有多难?

    大家好,我是树哥,好久不见啦. 作为一个工作了 10 多年的开发,写业务代码总是写了不少的.但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的.不然每天都是浑浑噩噩地过,多没意思啊. 大概 ...

  2. FreeRTOS教程7 事件组

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  3. 常用命令---less---more

    常用命令---less---more 常用选项 less 和 more 都是 Linux 和类 Unix 系统中的文本阅读工具,主要用于分页查看文件内容.虽然两者都能让用户逐屏查看大文件,但 less ...

  4. 大模型时代的PDF解析工具

    去年(2023年)是大模型爆发元年.但是大模型具有两个缺点:缺失私有领域知识和幻觉.缺失私有领域知识是指大模型训练时并没有企业私有数据/知识,所以无法正确回答相关问题.并且在这种情况下,大模型会一本正 ...

  5. docker安装es-header及相关问题解决

    安装es-header docker pull mobz/elasticsearch-head:5 docker run --restart=always --name elasticsearch-h ...

  6. 论文阅读小结(B/S和C/S结构)

    论文阅读小结 一.B/S 和 C/S 软件体系结构选择 1) C/S . B/S 结构概述 C/S 结构,即 Client/Server (客户机 / 服务器 ), C/S 结构软件分为客户机和服务器 ...

  7. #期望,树的直径#51nod 1803 森林直径

    题目 有一棵 \(n\) 个结点的树,按顺序给出树边 \((fa[i],i)\), \(Q\) 次询问查询如果只选取第 \([l,r]\) 条树边,问森林的直径 \(fa[i]\) 的生成方式为 \( ...

  8. #排列组合#C 模拟比赛

    分析 由于每个选手的得分独立,考虑按照选手的最高得分降序排序 如果当前枚举到选手\(i\),首先记录\(o_i\)表示在选手\(i\)之前最小得分不低于选手\(i\)的最高得分 (必选,等于必选当且仅 ...

  9. OpenHarmony创新赛 | 您有一份创新激励奖待领取 请查收!

      2023开源和信息消费大赛 开放原子开源大赛OpenHarmony创新赛 (以下简称"OpenHarmony创新赛") 正如火如荼的进行当中 赛程也即将进入到提交作品的关键阶段 ...

  10. 爱奇艺携手HMS Core,为用户打造更流畅的沉浸式观影体验

    本文分享于HMS Core开发者论坛<[开发者说]爱奇艺携手HMS Core,为用户打造更流畅.更沉浸的观影体验>采访稿整理. 爱奇艺是国内领先的视频播放平台,通过接入HMS Core H ...