利用 git hooks 实现一个 github workflow 文件的快速生成

Git hooks 是强大的脚本,它们在 Git 仓库中特定事件发生时自动触发。通过巧妙地使用这些钩子,你可以大大提高工作效率,确保代码质量,并自动化许多重复性任务。让我们深入探讨一下你可以用 Git hooks 做些什么。

自动化分支管理

我们先来看一个实际的例子。以下是一个 post-checkout hook 脚本,它在切换分支时执行一些有用的操作:

bash 复制代码
#!/bin/bash

set -e

CURRENT_BRANCH=$(git symbolic-ref --short HEAD)
PREV_BRANCH_FILE=".git/custom/previous_branch"
FEATURE_BUILD_FILE=".github/workflows/Feature_build.yml"
TEMPLATE_PATH="/path/to/your/template/Feature_build.yml"

# 定义颜色代码
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log() {
    local color="$1"
    local message="$2"
    echo -e "${color}[$(date +'%Y-%m-%d %H:%M:%S')] $message${NC}"
}

update_previous_branch() {
    mkdir -p "$(dirname "$PREV_BRANCH_FILE")"
    echo "$CURRENT_BRANCH" > "$PREV_BRANCH_FILE"
}

create_feature_build_file() {
    if [[ ! -f "$FEATURE_BUILD_FILE" ]]; then
        log "$YELLOW" "Creating $FEATURE_BUILD_FILE"
        mkdir -p "$(dirname "$FEATURE_BUILD_FILE")"
        cp "$TEMPLATE_PATH" "$FEATURE_BUILD_FILE"
        sed -i '' "s/branches:.*/branches: ['$CURRENT_BRANCH']/" "$FEATURE_BUILD_FILE"
        log "$GREEN" "Successfully created and updated $FEATURE_BUILD_FILE"
    else
        log "$BLUE" "$FEATURE_BUILD_FILE already exists"
    fi
}

main() {
    PREV_BRANCH=$(cat "$PREV_BRANCH_FILE" 2>/dev/null || echo "")

    if [[ "$CURRENT_BRANCH" != "$PREV_BRANCH" ]]; then
        log "$YELLOW" "Branch switched from $PREV_BRANCH to $CURRENT_BRANCH"
        update_previous_branch

        if [[ "$CURRENT_BRANCH" == feature* ]]; then
            log "$GREEN" "Switched to a feature branch: $CURRENT_BRANCH"
            create_feature_build_file
        else
            log "$BLUE" "Current branch is not a feature branch"
        fi
    else
        log "$BLUE" "No branch switch detected"
    fi
}

main

脚本功能详解

这个脚本作为一个 post-checkout hook,在每次切换分支时自动执行,从本地复制一个yml模板文件到当前分支的文件夹下面。应该不同的分支针对了不同的工作流文件,所以直接修改为了git切换分支的时候自动创建文件。

相关推荐
ControlRookie1 小时前
SyncBridge:一个 CODESYS 工程与 AI 之间工程师级的同步工具
git·ai编程·codesys·工业软件·controlrookie
最强小杰7 小时前
Claude Opus 4.8 调用一直报 529 怎么办?同样请求换旧模型却正常——附 429/529 双桶退避代码
ai·github
鬼手点金9 小时前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
来自于狂人10 小时前
GitHub 开源趋势日报 | 2026年10月7日用 AI Agent 逆向工程一切
人工智能·开源·github
逛逛GitHub11 小时前
盘点 20 个 9 月份 GitHub 上顶顶顶的开源项目。
github
网络毒刘11 小时前
开源 Aider 工作流实战:Git 提交驱动的 AI 结对,与 Cursor 何时互补
git·ai编程·cursor·aider
miofly11 小时前
Google 发布 EmbeddingGemma 2:7.4 亿参数的多模态嵌入模型
开源·github
wflynn13 小时前
GitHub 今日推荐|lightcraft:纯 Rust 重写的 RAW 照片开发工具
rust·开源·github·lightroom·art·photography
wflynn13 小时前
GitHub 日榜趋势速报 | 2026-10-07
开源·github
孟陬13 小时前
#教程 dw, dm, dy, d18m 是何意?万物可 Badge | 定制漂亮精致小徽章,打造眼前一亮 README
npm·github