SuperAPI AI 工具集

commitpush

编程与开发

查看项目

更新于 10-16 02:04

技能介绍

Commit and Push 是一个安全的提交与推送工作流,在暂存之前先筛查密钥和敏感文件,检测子模块以进行有针对性的提交,并处理包括推送失败恢复在内的完整提交-推送周期。

用途

该技能用于在将改动提交并推送到 Git 仓库时,提供一套带安全筛查的标准化流程,降低误提交密钥、凭据或敏感文件的风险,并妥善处理子模块仓库的提交范围问题。

主要能力

阶段一:安全筛查

安全筛查在任何暂存操作之前运行,用于发现若被提交会带来风险的文件和内容。

检测目标包括:

  • 密钥和凭据(API 密钥、令牌、密码、私钥)
  • 含敏感值的环境与配置文件(.env、.env.*、凭据文件)
  • 证书与密钥文件(.pem、.key、.p12、.pfx、.jks)
  • 云服务商凭据文件(AWS、GCP、Azure 配置)
  • 数据库连接字符串与转储文件
  • 大型二进制文件与构建产物

筛查过程:

  • 将 git status 输出与已知敏感文件模式进行比对(参见 sensitive-patterns.md)
  • 扫描 git diff 内容中的内联密钥——高熵字符串、API 密钥前缀、硬编码密码、连接字符串
  • 将标记的文件或内容呈现给用户,并建议排除、继续或中止
  • 对于不明确的情况(例如可能包含也可能不包含真实凭据的配置文件),在继续之前提交给用户澄清

阶段二:子模块检测

带有子模块的仓库(桥接仓库)需要用户明确指示提交范围。

检测方式:git submodule status --recursive 识别子模块及其变更状态(+ 前缀表示未提交的更改)。

当存在有变更的子模块且范围未指定时:

  • 将变更的子模块列表和父仓库呈现给用户
  • 用户选择本次提交周期要包含哪些
  • 选定的子模块先提交并推送(深度优先),然后父仓库暂存更新后的子模块引用

当不存在子模块或范围已指定时:跳过此阶段。

阶段三:变更分析

对已暂存和未暂存的变更进行分析,为生成提交信息提供依据。

输入:

  • git status——变更、已暂存和未跟踪文件的概览
  • git diff 和 git diff --staged——详细的变更内容
  • git log --oneline -5——近期提交风格,用于保持一致

提交信息生成:

  • 当仓库遵循约定式提交格式时使用该格式(从近期历史中检测)
  • 信息侧重于“为什么”而非“做了什么”
  • 当变更局限于某处时包含范围(例如 fix(auth): ...)
  • 提交信息仅包含变更描述——不包含共同作者署名

阶段四:暂存、提交、推送

  • 暂存:通过阶段一筛查的文件使用 git add 并指定明确文件路径进行暂存——不使用 git add . 或 git add -A 这类笼统命令。
  • 提交:使用阶段三生成的信息创建提交。
  • 推送:git push 将变更发送到远程。当不存在上游跟踪时使用 git push -u origin <branch>。

阶段五:推送失败恢复

  • 推送被拒(非快进):尝试 git fetch + git rebase,然后重试推送。
  • 强制推送:需要用户明确授权。使用 --force-with-lease(而非 --force)。
  • 冲突或无法解决的错误:向用户报告完整上下文以便手动解决。

使用方式

该技能以工作流形式运行,依次执行安全筛查、子模块检测、变更分析、暂存提交推送以及推送失败恢复。可接受可选的用户提供上下文:要提交的特定文件、提交信息覆盖、范围指令(例如“仅父仓库”“仅子模块 X”)。

参考文件

  • sensitive-patterns.md:在阶段一阅读——敏感文件模式和内联密钥指标的完整列表。

适用场景

适用于需要将改动提交并推送到 Git 仓库的场景,尤其是涉及敏感文件筛查、子模块仓库以及需要处理推送失败恢复的情况。

限制

资料未提供关于平台支持、收费、价格、具体效果或性能的说明。