Git 提交规范

【提交人】:
【版本号】:
【提交类型】:
【问题描述】:
【修改内容】:
【修改文件】:
build:涉及构建相关的改动(如升级 npm 包、修改 webpack 配置等)
chore:构建过程或辅助工具的变更
ci:持续集成相关的改动
docs:文档相关的变更
feat:新增特性或功能
fix:bug 修复
perf:性能相关改动
refactor:重构相关(非 bug、非新功能)
revert:回滚 commit
style:代码风格的调整,如格式化、空格等
test:测试相关,包括新增测试或者更改已有测试

1、提交频率

尽量保持提交频率较小,每个提交应该只包含一个逻辑上的更改或修复。

2、提交信息格式

每个提交应该包含一个简明扼要的提交信息。

3、分支管理

使用合理的分支管理策略,例如:
1、主分支(通常是 master 或 main)用于部署稳定的版本。
2、开发分支(例如 dev)用于进行功能开发和集成测试。
3、修复分支(例如 bugfix/xxx)用于解决问题和修复 bug。
4、在进行功能开发时,可以从开发分支创建特性分支(例如 feature/xxx),完成后再合并到开发分支。

自动化校验

通过使用 Git hooks 达成目的。

想使用相关的 Git Hooks,可以在目录 .git/hooks 创建对应的文件,文件名为 prepare-commit-msg 及 commit-msg,并赋予可执行权限。这样在我们进行 git commit 操作时,对应的脚本就会执行。

Git 的提交不会包含 .git 目录,所以对应的 hooks 的改动并不会被提交到仓库中。我们可以在仓库根目录 创建 .githooks 文件夹并将我们实现的代码放到该目录中

Husky的官网:Husky - Git hooks (typicode.github.io)

husky 工具配置代码检查工作流的作用

在工作中,我们经常需要将写好的代码提交至代码仓库
但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的
所以我们需要引入一种检查机制,若代码不规范,就不允许提交

提交前做代码检查

husky 是一个 git hooks 工具 ( git的钩子工具,可以在特定时机执行特定的命令 )

husky 配置

1、git 初始化 git init(若已有仓库则跳过这一步)
2、初始化 husky 工具配置 Husky
3、修改 .husky / pre-commit 文件

  • 删除掉或者注释掉默认配置 npm test
  • 添加 npm run lint


    image.png
暂存区 eslint 校验

问题:npm run lint 默认进行的是全量检查,耗时问题,历史问题

耗时问题:如果项目过大,校验耗时也大
历史问题:且如果拉取同事的代码,校验之后发现同事的代码有很多规范问题,我们还要替同事背这个锅,显然不合理。因为 eslint 的校验可能并不是一开始就有的,而是在工作过程中逐步建立起来的,所以可能旧的代码没有经过校验就被提交了

所以能不能改改机制,每次提交都只检查最新改动的代码?这样才符合实际工作需求,所以 lint-staged 诞生了

lint-staged
安装
npm install lint-staged -D
配置 package.json
{
    "scripts": {
        "lint-staged": "lint-staged"
    }
    "lint-staged": {
        "*.{js,ts,vue}": [
            "eslint --fix"
        ]
    }
}
修改 .husky/pre-commit 文件
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm run lint-staged
.sh 文件中第一行 #!/bin/bash -il 是什么

是执行该脚本文件的解释器的路径和选项!

在一个 shell 脚本文件的第一行加上 #!符号,称为 shebang,它告诉系统使用哪个解释器执行这个脚本。在 #!/bin/bash 的例子中,它告诉系统使用 Bash 解释器执行这个脚本。

-i 选项表示 Bash 进入交互式模式,-l 选项表示 Bash 作为登录 shell 运行,它会在 Bash 启动时执行 /etc/profile~/.bash_profile 文件,以便设置环境变量和别名等。

所以 #!/bin/bash -il 的作用是告诉系统使用 Bash 解释器以交互式登录方式执行这个脚本,并在执行前加载 /etc/profile~/.bash_profile 文件,以便设置正确的环境变量和别名等。

交互式登录方式是什么

Bash 中,有两种运行方式:登录 shell 和 非登录 shell

登录 shell 是指当你第一次登录系统时,系统会为你分配一个 shell 进程,这个 shell 进程就是登录 shell,它会读取 /etc/profile~/.bash_profile 文件,以便设置环境变量和别名等。

非登录 shell 是指在已经登录的 shell 环境中再次打开一个 shell 环境,这个 shell 进程就是非登录 shell,它不会读取 /etc/profile~/.bash_profile 文件,而是读取 ~/.bashrc 文件。

交互式是指在 shell 环境中可以接收用户输入,并根据用户输入执行命令。非交互式则是指在 shell 环境中执行一条或多条命令,不需要用户输入。

所以 -i 选项表示以交互式方式运行 Bash,可以让用户和脚本进行交互。而 -l 选项表示以登录 shell 方式运行 Bash,可以让脚本获取正确的环境变量和别名等。

~/.bash_profile中的~是什么

Linux类 Unix 系统中,~ 表示当前用户的 home 目录,例如 /home/username/Users/username~/.bash_profile 就是当前用户的 Bash 配置文件,它通常包含了一些用户自定义的环境变量、别名、函数等。

Linux 中,~ 实际上是一个 shell 内置的变量,它表示当前用户的 home 目录,可以通过 echo $HOME 命令来查看。

Bash 中,~ 还可以用来表示其他用户的 home 目录,例如 ~username 就表示 username 用户的 home 目录。

.sh 文件中第一行可以不写 #!/bin/bash -il 吗?如果可以不写,默认是什么?

可以。第一行通常是指定解释器的路径和选项。如果你不指定解释器,系统会使用默认的解释器来执行脚本。在 Linux 系统中,通常默认的解释器是 /bin/sh

因此,如果你不写 #!/bin/bash -il 这样的解释器路径和选项,那么默认情况下脚本会使用 /bin/sh 解释器来执行。这种情况下,脚本文件中的 Bash 特定的语法和命令可能无法被正确解释执行,因为 /bin/sh 解释器不支持 Bash 特有的语法和命令。

因此,如果你想使用 Bash 解释器来执行脚本,最好在脚本文件的第一行指定解释器路径和选项,例如:

#!/bin/bash

这样可以确保脚本会在 Bash 环境下运行,从而避免可能的语法和命令兼容性问题。

常用的几种 shell

Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件。
常见的 Shellsh、bash、csh、tcsh、ash,zsh 等。

sh
sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。
sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

bash
bash shell 是 Linux 的默认 shell,bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。
尽管如此,bash 和 sh 还是有一些不同之处:
一方面,bash 扩展了一些命令和参数;
另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

csh
sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh。

tcsh
tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash
一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境

Linux 系统中查询安装了哪些命令行解释器
cat /etc/shells
Linux 系统中查询当前使用的命令行解释器
echo $SHELL
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • Git 规范Git 作为现在最流行的分布式管理工具,基本上是每个团队的必备。 Git Commit格式校验准备co...
    天明丶胡金斌阅读 284评论 0 0
  • git的规范和相关科普知识 git commit 的规范要求(参考Angular团队) message格式如下: ...
    达文西_Huong阅读 745评论 0 0
  • 目的 commit message应该清晰明了,说明本次提交的目的 commit message格式 type(必...
    IT小妞儿阅读 2,848评论 0 2
  • 提交代码的时候,能够根据自定义的提交信息、代码规范进行自动校验,避免多人协作开发时提交代码信息不准确或者代码格式的...
    郁南阅读 1,154评论 0 1
  • Husky 是一款管理 git hooks 的工具,有助于我们在项目开发中的git规范和团队协作。 安装husky...
    Q小予o0阅读 1,011评论 0 0