git使用规范

Git规范(公司使用gitlab)

版本规范

前端项目使用语义化版本进行发布:

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。


分支模型

master分支

master分支表示一个稳定的发布版本.

  • 场景: 前端应用会跟随工作版本迭代, 在dev分支测试稳定后, 会合并到master分支, 并使用tag标记应用版本和对应的工作版本
  • tag规范: v{version}@{SSA_version}, 例如 v0.1.0@SSA_1.1
  • 权限: 由项目负责人进行审核合并, 普通开发者应当没有权限

dev分支

开发者主要工作的分支, 最新的特性或bug修复都会提交到这个分支. 开发者如果在该分支进行了提交,在push到远程之前应该先pull一下, 并尽量使用rebase模式,保证分支的简洁

  • 命名规范: dev
  • tag规范: 在dev分支中也可能会经历发布过程(发布到测试环境), 例如bug修复版本. 这里同样使用tag来标记这些发布. 例如v0.1.1
  • 提交规范:如果是在开发分支上进行开发,在推送到远程之前,应该使用git rebase形式更新本地分支。

feature分支

涉及多人协作或者大功能的开发, 应该从dev分支checkout出独立的feature分支, 避免干扰dev分支

  • 场景:

    • 涉及多人协作: 团队多个成员在同一个项目下负责开发不同的功能, 这时候每个成员在自己的feature分支独立开发
    • 大功能开发: 大功能开发跨越周期比较长, 需要多次迭代才会稳定. 这时候应该在独立的分支上开发. 方便跟踪历史记录, 也免于干扰dev分支的迭代和发布
  • 命名规范

    • feature-name: name是功能名称
    • feature-SSA_version: 这也是团队常见的模式, 当无法使用一个功能名称来描述时, 可以使用SSA版本号作为’功能’
  • 合并时机

    1. 当feature分支迭代稳定, 并通过测试后, 合并到dev分支. 合并到dev后, feature分支的生命周期就结束了(应当删除掉). 后续bug修复和功能优化直接在dev开发
    2. 当多个feature分支需要合并对外发布临时版本时. 合并到preview分支 . ⚠️这种情况不应该合并到dev分支, 因为feature分支可能还不稳定或未完成. 比如为了联调某些功能.
  • 合并方式

    • 不要使用fast-forward. 这样可以在分支图上查看到分支历史

preview分支

临时的预览分支, preview分支用于临时合并feature分支, 这其中可能会修复某些bug或者冲突. 可以选择性地将这些提交cherrypick回feature分支. 当预览结束后就可以销毁preview分支

release分支

release分支主要是临时创建修改某个发布版本的bug修复分支

  • 命名规范
    • release-{SSA_version} 外部人员只会关注SSA版本
  • 如何修复
    • 如果对应bug可以在dev分支直接被修复, 可以先提交到dev分支(或者已经修复了), 然后再cherrypick到release分支
    • 如果bug在新版本无法复现. 比如新版本升级了依赖. 那么在release分支直接修复即可
  • 发布
    • bug修复测试通过后,可以直接发布到生产环境,并且重新打包一个tag标记

提交信息规范

一个好的提交信息, 会帮助你提高项目的整体质量.

  • why
    • 格式统一的提交信息可以帮助自动化生成changelog
    • 版本库不只是存放代码的仓库, 也记录项目的开发记录. 这些记录应该可以帮助后来者快速地学习和回顾代码. 也应该方便其他协作者review你的代码
  • 原则: 半年后, 你能看懂你的commit做了什么东西
  • 方式: 使用git commit(打开编辑器)而不是git commit -m
  • 必要信息
    • 为什么进行这次提交?
      • 提交改变了什么, 让其他reviewer更容易审核代码和忽略无关的改变
    • 如何解决的问题?
      • 问题是什么导致的?
      • 简短说明使用什么方式, 策略, 修复了问题.
    • 变化可能影响哪些地方
      • 说明变动功能的细节。 一个提交不应该做超过2个功能的变动

提交格式

我们采用基于angular的提交规范, 简化和扩展了不同点。

<type>(<scope>): <subject><body><footer>
header

如果提交时feature或者fix(已发布的版本), 这些提交信息应该出现在CHANGELOG

  • type: 说明commit的类别. 可以配合emoji使用, 让阅读者更快地区分提交的类型,允许以下类型:
    • Feat: 新功能/新特性
    • Fix: 修复了bug,贴上issues或禅道bug号
    • Docs: 文档
    • Style: 优化项目结构或者代码格式
    • Test: 增加测试
    • Chore: 构建过程, 辅助工具升级. 如升级依赖, 升级构建工具
    • Perf: 性能优化
    • Revert: revert之前的commit
      • git revert 命令用于撤销之前的一个提交, 并在为这个撤销操作生成一个提交
    • Refactor: 代码重构
    • Build或Release: 构建或发布版本
    • CI: 持续集成
    • Safe: 修复安全问题
  • scope: 可选. 说明提交影响的范围. 例如样式, 后端接口, 逻辑层等等
  • subject: 提交目的的简短描述, 动词开头, 不超过80个字符. 不要为了提交而提交
body

可选. 对本次提交的详细描述. 如果变动很简单, 可以省略

footer

可选. 只用于说明不兼容变动(break change)和关闭 Issue(如果使用gitlab上的Issuse,#1542)或禅道BUG号(#zentao203)

模板和示例
# 50-character subject line  
#  
# 100-character wrapped longer description. This should answer:  
#  
# * Why was this change necessary?  
# * How does it address the problem?  
# * Are there any side effects?  
#  
# Include a link to the ticket, if any.

参考vue, angular等开源库项目的提交

跳过CI

如果项目上配有gitlab-ci,可以在标题header上添加 [ci skip] 即可跳过本次提交CI.

Commitlint 提交验证

git commit提交信息的验证,依赖于@commitlint/cli, husky

注:如果使得 vue-cli 3 创建的项目,默认已经有yorkie,不再需要安装 husky

配置 commitlint.config.js

👍 推荐使用:
@smart/commitlint-config

module.exports = {extends: ['@smart/commitlint-config']
}

或者使用依赖@commitlint/config-conventional, 并配置扩展下面:

module.exports = {extends: ['@commitlint/config-conventional'],rules: {'type-enum': [2, 'always', ['Feat', 'New', 'Fix', 'Docs', 'Style', 'Test', 'Chore', 'Revert', 'Perf', 'Build', 'Release', 'Safe']],'type-case': [2, 'always', 'start-case'],'subject-full-stop': [0, 'never'],'subject-case': [0, 'never'],'header-max-length': [2, 'always', 80]}
}

package.json 添加上

"husky": {"hooks": {"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"}
}
// 或者
"gitHooks": {"pre-commit": "vue-cli-service lint --no-fix","commit-msg": "commitlint -E GIT_PARAMS"
},

还可以添加其他钩子,比如:"pre-commit": "npm run lintNofix"

配置好后就可以在git commit时验证通过后,才能提交!


生成更新日志

安装conventional-changelog-cli@smart/conventional-changelog-smart

使用命令,即可方便生成出CHANGLOG.md更新日志文件

conventional-changelog -n ./node_modules/@smart/conventional-changelog-smart/index.js -i CHANGELOG.md -s -r 0

BUG 处理规则

公司使用禅道管理bug,而非gitlab上的Issues

对于测试,目前会经历两个阶段

  • 冒烟测试:在对测试正式发版之前会要求对代码进行自测,及冒烟测试。
  • 正式测试阶段:正式测试阶段测试人员会在禅道进行bug提交和管理,对BUG的处理规则如下:
    • [确认]: 已大致定位原因, 需要较多时间处理的BUG, 可置为"确认"
    • [提需求]: 无规律或只出现一次的BUG, 研发没找到原因, 加上必要排查日志后, 可提需求给测试; 复现后重新打开
    • [不予解决]: 没有修改程序代码, 是由于其他原因(需求变更等)而解决的问题;
    • [解决]:修复bug并提交到git dev分支下后,修改禅道上的bug状态,并且填写解决方案。

BUG的数量可能会和个人的KPI挂钩。所以要谨慎自测


发布工作流

  • 流程
    1. 进行代码变更
    2. 提交这些变更, 进行CI让这些变更通过测试
      • 如果没通过就打tag, 一旦出现测试失败, tag就得重新打
    3. 使用npm version命令提升package.json的版本号, 更新CHANGELOG.md
    4. 打上tag, 提交
    5. 可选. 合并到release分支
  • 工具


持续集成

前端项目基于公司内部部署的gitlab-ci来进行持续部署。包含以下阶段(stage):

持续集成阶段

  • 检查:包括单元测试和代码lint。
    • 所有push到版本库的代码都会跑这个阶段. 可以在提交title中包含[ci skip]来跳过这个阶段
  • 构建: 对前端项目进行构建.
    • 只有打上版本tag的提交或release分支会跑构建任务

交付

目前前端资源是跟随后端Jar/War包一起部署的,通过将构建结果推送到一个’git发布版本库’的形式实现.

扩展

  • 如何写好 Git commit log?
  • 提交信息emoji规范
  • Commit message 和 Change log 编写指南
  • Git远程操作详解
  • git钩子定制团队代码提交流程规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 使用 uni push 2.0 推送消息

因为之前使用uni push 1.0&#xff0c;开通账号和配置厂商就不写了。只说一点&#xff0c;配置厂商很重要&#xff0c;不然收不到离线推送的消息。那么就直接开始咯&#xff01;&#xff01;&#xff01; 一、创建并关联云服务空间 1.创建云服务空间&#xff0c;右键项目【创…

Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和删除数据的问题

目录 引出手动实现ArrayList定义接口MyList<T>写ArrayList的实现类增加元素删除元素 写测试类进行测试数组插入数据? 总结 引出 1.ArrayList的结构分析&#xff0c;可迭代接口&#xff0c;是List的实现&#xff1b; 2.数组增加元素和删除元素的分析&#xff0c;何时扩容…

利用HTTP代理实现请求路由

嘿&#xff0c;大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我知道构建一个高效的分布式爬虫系统是一个相当复杂的任务。在这个过程中&#xff0c;实现请求的路由是非常关键的。今天&#xff0c;我将和大家分享一些关于如何利用HTTP代理实现请求路由的实用技巧&…

数据结构----哈夫曼树

这里写目录标题 基本概念引子基本概念各种路径长度各种带权路径长度结点的带权路径长度树的带权路径长度哈夫曼树 哈夫曼树的构造理论基础构造思想总结 哈夫曼树的实现哈夫曼编码前缀编码哈夫曼编码的思想案例代码实现 编码与解码 基本概念 引子 哈夫曼树就是寻找构造最优二叉…

Docker容器基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Docker概述1、docker是什么2、Docker的设计宗旨3、容器在内核中支持2种重要技术&#xff1a; 三、Docker的核心概念四、Docker相关命令1.安装依赖包2.设置阿里云…

无线测温产品在半导体制造项目的应用

摘 要&#xff1a;半导体被誉为“制造业的大脑”&#xff0c;在关系国家安全和国民经济命脉的主要行业和关键领域占据支配地位&#xff0c;是国民经济的重要支柱。 随着数字技术的发展和数字经济在国民经济中所占比重越来越高&#xff0c;半导体产业的重要性还会进一步提升。安…

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用

文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型&#xff0c;介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息&#xff0c;请参阅用户界面。 本教程描述了如何使用…

部署mysql到win10电脑上

中间出现了很多问题&#xff0c; 记录一下 我这边是去官网下载的 &#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL&#xff0c;因为第一次安装8.1.0版本的&#xff0c;死活运行不起来&#xff0c;直接卸载安重装了&#x…

常用的分布式计算引擎

记录一下&#xff0c;作为备忘。 常用的分布式计算引擎 多表关联的问题&#xff0c;由于NoSQL数据库主要用于海量存储和单表查询&#xff0c;一般都不支持join&#xff0c;需借助更上层的计算框架来实现多表关联&#xff0c;比如: 计算框架支持数据源执行效率Hive本地文件、…

神经网络基础-神经网络补充概念-35-为什么正则化可以减少过拟合

概念 正则化可以减少过拟合的原因在于它通过限制模型的复杂性来约束参数的取值范围&#xff0c;从而提高了模型的泛化能力。过拟合是指模型在训练集上表现很好&#xff0c;但在未见过的数据上表现不佳&#xff0c;这通常是因为模型过于复杂&#xff0c;过多地拟合了训练数据中…

自己动手写数据库系统:实现一个小型SQL解释器(中)

我们接上节内容继续完成SQL解释器的代码解析工作。下面我们实现对update语句的解析&#xff0c;其语法如下&#xff1a; UpdateCmd -> INSERT | DELETE | MODIFY | CREATE Create -> CreateTable | CreateView | CreateIndex Insert -> INSERT INTO ID LEFT_PARAS Fie…

后端项目打包上传服务器记录

后端项目打包上传服务器记录 文章目录 后端项目打包上传服务器记录1、项目打包2、jar包上传服务器 本文记录打包一个后端项目&#xff0c;上传公司服务器的过程。 1、项目打包 通过IDEA的插件进行打包&#xff1a; 打成一个jar包&#xff0c;jar包的位置在控制台可以看到。 2、…

ssm蜀都天香酒楼网站设计与实现

ssm蜀都天香酒楼的网站设计与实现028 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首…

机器学习基础(六)

贝叶斯分析 介绍 “贝叶斯”是指托马斯贝叶斯(1702–1761),他证明了一个特例,也就是现在的贝叶斯定理的特例。 贝叶斯定理(英语:Bayes theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生概率。比如,如果已知某种健康问题与寿命有关,使用贝叶斯定理则…

selenium语法进阶+常用API

目录 浏览器操作 浏览器回退&#xff0c;前进 与刷新 浏览器窗口设置大小 浏览器设置宽高 浏览器窗口最大化 浏览器控制滚动条 信息打印 打印页面的标题和当前页面的URL 定位一组元素 鼠标和键盘事件 键盘 鼠标 下拉框操作 通过索引定位&#xff08;se…

【BASH】回顾与知识点梳理(三十二)

【BASH】回顾与知识点梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号关系&#xff1a;自主式访问控制, DAC以政策规则订定特定进程读取特定文件&#xff1a;委任式访问控制, MAC 32.2 SELinux 的运作模式安…

安科瑞变电所运维平台在电力系统中应用分析

摘要&#xff1a;现代居民生活、工作对电力资源的需求量相对较多&#xff0c;给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成&#xff0c; 将变电运维安全管理以及相应的设备维护工作系统性开展&#xff0c;能够根据项目实践工作要求&#xff0c;将满足要求…

C语言暑假刷题冲刺篇——day2

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练 ✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你…

最小生成树,prim算法

Prim算法和Kruskal算法都是用于解决最小生成树问题的经典算法&#xff0c;它们在不同情况下有不同的适用性和特点。 Prim算法&#xff1a; Prim算法是一种贪心算法&#xff0c;用于构建一个无向图的最小生成树。算法从一个初始节点开始&#xff0c;逐步添加与当前树连接且具有…

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…