大厂的 Git 代码管理规范

大厂的 Git 代码管理规范是怎样的?

以下文章来源于码农参上 ,作者Dr Hydra

分支命名

master 分支

master 为主分支,也是用于部署生产环境的分支,需要确保 master 分支稳定性。master 分支一般由 release 以及 hotfix 分支合并,任何时间都不能直接修改代码。

develop 分支

develop 为开发环境分支,始终保持最新完成以及 bug 修复后的代码,用于前后端联调。一般开发新功能时,feature 分支都是基于 develop 分支创建的。

feature 分支

开发新功能时,以 develop 为基础创建 feature 分支。

分支命名时以 feature/ 开头,后面可以加上开发的功能模块, 命名示例:feature/user_module、feature/cart_module。

test 分支

test 为测试环境分支,外部用户无法访问,专门给测试人员使用,版本相对稳定。

release 分支

release 为预上线分支(预发布分支),UAT 测试阶段使用。一般由 test 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。

hotfix 分支

线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 hotfix 分支。修复完成后,需要合并到 master 分支和 develop 分支。

分支命名以hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。

分支与环境对应关系

在系统开发过程中常用的环境:

  • DEV 环境(Development environment):用于开发者调试使用。
  • FAT 环境(Feature Acceptance Test environment):功能验收测试环境,用于测试环境下的软件测试者测试使用。
  • UAT 环境 (User Acceptance Test environment):用户验收测试环境,用于生产环境下的软件测试者测试使用。
  • PRO 环境(Production environment):生产环境。

对应关系:

分支 功能 环境 可访问
master 主分支,稳定版本 PRO
develop 开发分支,最新版本 DEV
feature 开发分支,实现新特性
test 测试分支,功能测试 FAT
release 预上线分支,发布新版本 UAT
hotfix 紧急修复分支,修复线上bug

分支合并流程规范

业界常见的两大主分支(master、develop)、三个辅助分支(feature、release、hotfix)的生命周期:

图片

以上生命周期仅作参考,不同开发团队可能有不同的规范,可自行灵活定义。

例如我们团队在开发时,至少需要保证以下流程:

  • develop 分支和 hotfix 分支,必须从 master 分支检出。
  • 由 develop 分支合并到 test 分支。
  • 功能测试无误后,由 test 分支合并到 release 分支。
  • UAT 测试通过后,由 release 分支合并到 master 分支。
  • 对于工作量小的功能开发(工时小于 1 天),可以直接在 devolop 分支进行开发,否则由 develop 分支检出 feature 分支进行开发,开发完后合并到develop 分支。

Git Commit Message 规范

Git Commit Message 规范指提交代码时编写的规范注释,编写良好的 Commit Message 可以达到 3 个重要的目的:

  • 加快代码 review 的流程。
  • 帮助我们编写良好的版本发布日志。
  • 让之后的维护者了解代码里出现特定变化和 feature 被添加的原因。

Angular Git Commit Guidelines

业界应用的比较广泛的是 Angular Git Commit Guidelines:

[type]([scope]): [subject]
[BLANK LINE]
[body]
[BLANK LINE]
[footer]
  • type:提交类型。
  • scope:可选项,本次 commit 波及的范围。
  • subject:简明扼要地阐述下本次 commit 的主旨,在Angular Git Commit Guidelines中强调了三点。使用祈使句,首字母不要大写,结尾无需添加标点。
  • body:同样使用祈使句,在主体内容中我们需要把本次 commit 详细地描述一下,比如此次变更的动机。
  • footer:描述下与之关联的 issue 或 break change。

简易版

项目中实际可以采用简易版规范:

[type]([scope]):[subject]

type 规范

Angular Git Commit Guidelines中推荐的 type 类型如下:

  • feat:新增功能。
  • fix:修复 bug。
  • docs:仅文档更改。
  • style:不影响代码含义的更改(空白、格式设置、缺失分号等)。
  • refactor:既不修复 bug 也不添加特性的代码更改。
  • perf:改进性能的代码更改。
  • test:添加缺少的测试或更正现有测试。
  • chore:对构建过程或辅助工具和库(如文档)的更改。

除此之外,还有一些常用的类型:

  • delete:删除功能或文件。
  • modify:修改功能。
  • build:改变构建流程,新增依赖库、工具等(例如 webpack、gulp、npm 修改)。
  • test:测试用例的新增、修改。
  • ci:自动化流程配置修改。
  • revert:回滚到上一个版本。

单次提交注意事项

  • 提交问题必须为同一类别。
  • 提交问题不要超过 3 个。
  • 提交的 commit 发现不符合规范,git commit --amend -m "新的提交信息"git reset --hard HEAD 重新提交一次。

配置 .gitignore 文件

.gitignore是一份用于忽略不必提交的文件的列表,项目中可以根据实际需求统一.gitignore文件,减少不必要的文件提交和冲突,净化代码库环境。

通用文件示例:

target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
# Log file
*.log
/logs*
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
*.cmd

其他

此外,还有一些其他建议:

  • master 分支的每一次更新,都建议打 tag 添加标签,通常为对应版本号,便于管理。
  • feature 分支、hotfix 分支在合并后可以删除,避免分支过多,管理混乱。
  • 每次 pull 代码前,提交本地代码到本地库中,否则可能会出现合并代码出错,导致代码丢失。

Views: 40

使用chrony完成集群时间同步

在RHEL 8+中,你可以使用Chrony来在集群中进行时间同步。

集群时间同步配置步骤

已知集群的ip和主机映射配置文件/etc/hosts的内容如下所示:

192.168.10.102 niit01
192.168.10.103 niit02
192.168.10.104 niit03

以下是步骤:

安装chrony到集群中

确保所有服务器上都已经安装了chrony。如果没有安装,可以使用以下命令进行安装(三台机器都需要):

sudo yum install -y chrony

在niit01服务器上

编辑Chrony配置文件。使用文本编辑器打开/etc/chrony.conf文件:

sudo vi /etc/chrony.conf

在配置文件中找到pool部分,并注释掉原有的服务器地址(如果有的话)。因为我们将使用niit01作为时间同步服务器,所以不需要从外部服务器获取时间同步。

pool niit01 iburst

在配置文件中添加以下行,以允许其他服务器从niit01同步时间:

allow 192.168.0.0/16

这将允许子网中的所有服务器从niit01同步时间。根据你的网络设置,可能需要修改子网地址。

保存并关闭配置文件/etc/chrony.conf

启动chronyd服务,并确保其在系统启动时自动启动:

sudo systemctl enable --now chronyd

niit02niit03服务器上

编辑chrony配置文件/etc/chrony.conf

sudo vi /etc/chrony.conf

在配置文件中找到pool部分,并注释掉原有的服务器地址(如果有的话)。这是因为我们将使用niit01作为时间同步服务器。

在配置文件中添加以下行,以指定从niit01同步时间:

pool niit01 iburst

这将指定niit01作为时间同步服务器,并使用iburst选项以更快地同步时间。

保存并关闭配置文件。

启动chronyd服务,并确保其在系统启动时自动启动:

sudo systemctl enable --now chronyd

现在,niit02和niit03服务器将开始从niit01服务器同步时间。你可以使用以下命令来检查时间同步状态:

image-20230918133709762

这将显示时间同步状态,包括偏差、延迟等信息。如果一切正常,你应该看到niit02niit03服务器的时间与niit01服务器同步。

如果要查看不同的授时服务器的详情, 也可以使用这个命令

image-20230918134014631

集群时间同步测试步骤

首先,在niit01服务器上修改时间。你可以使用以下命令来更改时间:

sudo timedatectl set-time 'YYYY-MM-DD HH:MM:SS'

'YYYY-MM-DD HH:MM:SS' 替换为你想要设置的时间。例如,要将时间设置为2023年7月19日下午3点30分,你可以使用以下命令:

sudo timedatectl set-time '2023-07-19 15:30:00'

确保niit01服务器上的Chrony服务正在运行。如果服务未运行,请使用以下命令启动它:

sudo systemctl start chronyd

在niit02和niit03服务器上执行以下命令,以检查它们是否能够与niit01服务器同步时间:

chronyc tracking

这将显示时间同步状态。你应该能够看到niit02和niit03服务器的时间与niit01服务器同步。

如果时间同步状态正常,你可以使用以下命令检查服务器上的当前时间:

date

确保niit02和niit03服务器上的时间与niit01服务器上的时间相同。

这样,你就可以测试niit02和niit03服务器是否能够与niit01服务器同步时间了。

集群时间同步脚本编写

由于我们接下来的项目中需要生成从指定日期开始, 例如2023年6月30日开始的连续7日数据. 需要使用一个集群时间同步脚本来更改并同步时间, 文件名为:

#!/bin/bash

# 检查参数是否为空
if [ -z "$1" ]; then
        echo "Usage:  <code>basename $0 yyyy-MM-dd HH:mm:ss"
  exit 1
fi

# 使用date命令将时间字符串转换为日期和时间
# 如果转换失败,则说明时间字符串不合法
if ! date -d "$*" >/dev/null 2>&1; then
        echo "Wrong argument for $*"
        echo "Usage:  basename $0 \"yyyy-MM-dd HH:mm:ss\""
  exit 1
fi

echo ">>>>>>>>>>>> SYNC TIME START >>>>>>>>>>>>"
sum=-1

while [ $sum -ne 0 ]; do
  echo set time for niit01 to $1 '>>>'
  ssh niit01 "sudo date -s \"$*\""
  ok1=$?
  echo sync time from niie02 to niit01 '>>>'
  ssh niit02 "(sudo timedatectl set-ntp false && sudo timedatectl set-ntp true)"
  ok2=$?
  echo sync time from niit03 to niit01 '>>>'
  ssh niit03 "(sudo timedatectl set-ntp false && sudo timedatectl set-ntp true)"
  ok3=$?
  sum=expr $ok1 + $ok2 + $ok3

  if [ $sum -eq 0 ]; then
    echo "<<<<<<<<<<<<< SYNC TIME END <<<<<<<<<<<<<"
    sleep 5
    xRun.sh date
  else
    echo "sync time failed, will try 10 senconds later"
    sleep 10
  fi
done

由于ntp同步只能用于微小的时间调整, 大幅度的时间调整前需要先关闭ntp时间同步, 调整后再开启. 开启后大约需要1秒的时间完成同步过程.

用法: 比如需要将集群的时间同步至2023-06-30 06:00:00, 可以这样

[niit@niit01 bin]$ xSyncTime.sh 2023-06-30 06:00:00
>>>>>>>>>>>> SYNC TIME START >>>>>>>>>>>>
set time for niit01 to 2023-06-30 >>>
Fri Jun 30 06:00:00 CST 2023
sync time from niie02 to niit01 >>>
sync time from niit03 to niit01 >>>
<<<<<<<<<<<<< SYNC TIME END <<<<<<<<<<<<<
===========niit01 ===========
ssh niit01 date
Fri Jun 30 06:00:06 CST 2023
===========niit02 ===========
ssh niit02 date
Fri Jun 30 06:00:06 CST 2023
===========niit03 ===========
ssh niit03 date
Fri Jun 30 06:00:06 CST 2023

Views: 211