最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang Git Hook自動化實現(xiàn)的示例代碼

 更新時間:2026年04月21日 08:56:14   作者:尼克  
本文主要介紹了golang Git Hook自動化實現(xiàn)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Go 語言實現(xiàn) Git Hook 自動化主要有三種主流方案,從原生 Shell 腳本到 Go 原生工具鏈,各有適用場景:

一、方案對比

方案適用場景優(yōu)點缺點
原生 Shell Hook個人/小團隊快速上手零依賴,直接生效不可版本控制,團隊難同步
Lefthook (Go 原生)Go 項目/多語言團隊并行執(zhí)行、YAML 配置、Go 生態(tài)原生 需額外安裝
pre-commit (Python)跨語言統(tǒng)一規(guī)范生態(tài)豐富、社區(qū)成熟 依賴 Python 環(huán)境
simple-pre-commit (Go)輕量 Go 項目基于 Makefile,極簡 功能較簡單

二、方案一:原生 Shell Hook(快速入門)

在項目 .git/hooks 目錄下創(chuàng)建 pre-commit 腳本:

#!/bin/sh
# .git/hooks/pre-commit
echo "?? 正在執(zhí)行代碼檢查..."
# 1. 格式化檢查
gofmt -s -w .
if [ $? -ne 0 ]; then
    echo "? gofmt 格式化失敗"
    exit 1
fi
# 2. 運行 golangci-lint
golangci-lint run --fast
if [ $? -ne 0 ]; then
    echo "? golangci-lint 檢查未通過"
    exit 1
fi
# 3. 運行測試
go test -race ./...
if [ $? -ne 0 ]; then
    echo "? 測試未通過"
    exit 1
fi
echo "? 檢查通過,允許提交"

賦予執(zhí)行權(quán)限:

chmod +x .git/hooks/pre-commit

?? 注意:.git/hooks 目錄不會被 Git 跟蹤,團隊成員需要手動復制??梢酝ㄟ^ Makefile 或 go generate 自動化安裝。

三、方案二:Lefthook(Go 項目推薦)

Lefthook 是用 Go 編寫的高性能 Git Hook 管理器,支持并行執(zhí)行和 YAML 配置。

安裝

# Go install
go install github.com/evilmartians/lefthook@latest
# 或 Homebrew
brew install lefthook

初始化配置

lefthook install

配置文件 lefthook.yml

# lefthook.yml
pre-commit:
  parallel: true           # 并行執(zhí)行,加速檢查
  commands:
    go-fmt:
      glob: "*.go"
      run: gofmt -s -w {staged_files}
    go-vet:
      glob: "*.go"
      run: go vet ./...
    golangci-lint:
      glob: "*.go"
      run: golangci-lint run --fast
    go-test:
      run: go test -race -count=1 ./...
pre-push:
  commands:
    go-test-all:
      run: go test -race -count=1 ./...
    go-build:
      run: go build -o /dev/null ./...
commit-msg:
  commands:
    commitlint:
      run: commitlint --edit {1}

常用命令

lefthook run pre-commit     # 手動觸發(fā) pre-commit
lefthook run pre-push       # 手動觸發(fā) pre-push
LEFTHOOK=0 git commit       # 跳過所有 hooks(緊急修復)

四、方案三:pre-commit(跨語言生態(tài))

pre-commit 是 Python 生態(tài)的 Hook 管理框架,Go 項目也可使用。

安裝

pip install pre-commit

配置文件 .pre-commit-config.yaml

# .pre-commit-config.yaml
repos:
  # Go 基礎(chǔ)檢查
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files
        args: ['--maxkb=500']
  # golangci-lint
  - repo: https://github.com/golangci/golangci-lint
    rev: v1.64.0
    hooks:
      - id: golangci-lint
        args: ["--fast"]
  # Go 格式化
  - repo: https://github.com/dnephin/pre-commit-golang
    rev: v0.5.1
    hooks:
      - id: go-fmt
      - id: go-vet
      - id: go-imports
      - id: go-critic
      - id: go-unit-tests

安裝與使用

pre-commit install          # 安裝 hooks
pre-commit run --all-files  # 手動全量檢查
git commit --no-verify      # 跳過 hooks

五、方案四:simple-pre-commit(極簡 Go 方案)

基于 Makefile 的輕量級方案,適合小型 Go 項目:

Makefile

.PHONY: install test lint pre-commit
install:
	go mod tidy
	go install github.com/brenner8023/simple-pre-commit@latest
	simple-pre-commit        # 自動注入 .git/hooks/pre-commit
test:
	go test -race -v ./...
lint:
	golangci-lint run --fast
pre-commit: lint test       # pre-commit 時執(zhí)行的檢查

工作流程

  • 新成員克隆倉庫后執(zhí)行 make install
  • simple-pre-commit 自動將 make pre-commit 注入到 .git/hooks/pre-commit
  • 每次 git commit 自動觸發(fā) make pre-commit

六、團隊同步最佳實踐

無論選擇哪種方案,核心問題都是 如何讓團隊成員自動安裝 Hook

方式 1:Makefile 入口

.PHONY: setup
setup:
	go mod tidy
	lefthook install          # 或 pre-commit install
	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

方式 2:Go 工具鏈(go:generate)

// tools.go
//go:build tools
// +build tools
package tools
import (
    _ "github.com/evilmartians/lefthook"  // go:generate lefthook install
)
go generate ./...

方式 3:README 強制引導

## 開發(fā)環(huán)境初始化
make setup    # 必須執(zhí)行,安裝 git hooks 和依賴工具

到此這篇關(guān)于golang Git Hook自動化實現(xiàn)的示例代碼的文章就介紹到這了,更多相關(guān)golang Git Hook自動化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

肥西县| 牟定县| 叙永县| 张家口市| 龙岩市| 遂溪县| 罗定市| 西充县| 上林县| 隆安县| 方城县| 峡江县| 定陶县| 克山县| 门源| 商都县| 河曲县| 伊吾县| 阳春市| 新泰市| 包头市| 密云县| 琼海市| 砀山县| 白沙| 永靖县| 玉溪市| 梁山县| 怀仁县| 广元市| 容城县| 易门县| 繁昌县| 富平县| 土默特左旗| 西华县| 桃园县| 宜城市| 临泽县| 惠州市| 西畴县|