📜  完美的 git commit - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:25:08.793000             🧑  作者: Mango

完美的 Git Commit - Shell/Bash

在程序员的日常工作中,Git 做为版本控制工具的应用是司空见惯的。Git commit 是每个程序员都不可避免要涉及的操作。一个好的 commit 提交规范,不仅方便了其他开发者对代码的阅读和理解,也提高了代码的可维护性。本文将介绍如何创建一个完美的 Git commit。

背景

Git commit 包括了很多元素,比如作者、时间、文件改动、提交信息等。一个好的 commit 应该体现以下元素:

  • 简短:尽量精简并对代码做出明确的描述。
  • 有意义:保证信息的精准、明确且易于理解。
  • 可读性高:代码编写者和其他开发者都能够理解含义。
  • 维护一致的风格:保持说明语言的样式和风格一致,不管是一行还是多行。
技巧

下面是一些创建完美的 Git commit 的技巧。

Commit 的头部

Git commit 的头部包含了两个主要的元素:类型和描述。类型用于描述改动所做的修改类型,常见类型包括 feat (添加新功能)、fix (修复 bug)、docs (编写文档)、style (代码样式的变化)、test (添加或修复测试)、chore (更新构建任务等)等。

根据选择的类型描述改动,一定要让描述简短又清晰明了。对于描述,也可以使用一个短语句而非单句。

# 例
feat: 实现用户管理模块
fix: 修复登录接口的安全漏洞
简明扼要的描述

除了类型,还需要提供一个详细但简明扼要的主旨描述。使用一句话来描述改动所涉及到的方面。

注意避免描述了一些不必要的细节信息,让描述更准确。

# 例
feat: 加入“确定”按钮,验证成功后跳转至服务列表页面
具体的改动内容(Commit body)

一个好的信息体就是具有详细和完整的信息,包括代码改动和相关信息,如 API 请求地址和设想的实现方法等。

这部分内容会紧接着在一行或多行增加一些备注或注释,可以用多个自成段落来呈现。在让对代码不熟悉的人理解改动方面至关重要。

# 例
feat: 加入“确定”按钮,验证成功后跳转至服务列表页面

在登录页面中加入确认按钮,成功验证后跳转至服务列表页面。

- 在用户更新服务列表时发送 GET 请求,而非 POST 请求。
- 去除了不必要的模板变量。
- 修复了类风格开发造成的 bug。
提供有用的上下文信息

在提交时提供有用的上下文,特别是在执行某个非常规操作或打补丁时,可能会更有用。这样可以让人们了解改动的原因和历史,让对代码不熟悉的人理解代码改动的上下文环境。

# 例
docs: 更新开发文档,添加样例

在开发指南中添加了服务列表 API 的样例,该样例展示了用户如何访问“/list”接口,以及该接口的预期响应。
不再担心代码开发风格的分歧

代码开发风格的分歧是每个开发者都将面临的问题。为了避免这种分歧,建议在提交时提供一些风格指南。因此,如果有些人没有遵循这些指南,并且修改了提交,别人也可以更轻松地理解(以及看到他们进行了哪些更改)。

# 例
style: 格式化登录页面组件

- 在 index.js 文件中添加分号。
- 在 login.css 文件中修改了样式类名。
- 在 Register 组件中删除了不必要的注释。
- 代码格式化和删除不必要的空格。
手动避免提交有语法错误的 Commit

对于一些 Shell/Bash 用户,Git commit 也可以使用命令行的方式,这需要一些脚本操作。一个有用的脚本,可以在 Shell/Bash 中使用,用以捕获一些错误,比如语法错误。

#!/bin/sh
# Post Commit Hook to prevent commit message containing any syntax error for Git
# Save the file to [project_path]/.git/hooks/post-commit
commit_message_file=$1
commit_message=`cat $commit_message_file`
syntax_regexp='^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: [^ ,.]+( [^,.]+)*$'

if ! echo "$commit_message" | grep -iqE "$syntax_regexp" ; then
  printf "Error: Syntax Error in commit message. \n"
  printf "Your commit message must starts with feat/fix/docs/style.\n\n"
  printf "Your commit message must have an actionable verb.\n\n"
  printf "Your commit message must not have trailing full stop/period.\n\n"
  printf "Example: feat: implement user authentication \n\n"
  printf "Rejected commit message: \"$commit_message\" \n\n"
  exit 1
else
  printf "Commit message syntax is correct! \n\n"
  exit 0
fi

将此文件保存为.git/hooks/post-commit,然后添加执行权限:

chmod +x .git/hooks/post-commit

这样可遵循语法规则,从而获得规范的提交 Message。

总结

一个好的 Git commit 缺乏类似良心代码的定义,但其含有很多代码风格、补丁和可读性的参考。如果遵循这些准则,每个人都可以创建出高质量的提交信息,提高代码开发的效率和质量。

参考