SuperAPI AI 工具集

git-push

编程与开发

查看项目

更新于 10-16 02:58

技能介绍

用途

git-push 用于把当前项目推送到 GitHub,覆盖完整生命周期,包括首次推送、日常更新和版本发布三种模式。官方说明的核心原则是安全第一:宁可多问一句,不能把不该推的东西推上去。

主要能力

三种推送模式

  • 首次推送:新项目从零到 GitHub。
  • 日常更新:改了文件后 commit + push。
  • 版本发布:打 tag + 创建 Release,可附带下载文件。

环境检查与模式判断

依次检查 git 是否安装、gh CLI 是否安装、gh 是否已登录 GitHub、git 用户信息是否配置。任一不满足即终止并给出指引(如 git 未安装提示 brew install git,gh 未安装提示 brew install gh,未登录提示 gh auth login)。随后根据当前目录是否为 git 仓库、是否已关联远程仓库,决定进入首次推送、已有仓库模式选择(推日常更新 / 发新版本 / 重新来)。选择“重新来”会警告将删除所有 Git 历史记录(包括所有提交、分支、tag)且不可恢复,需二次确认后删除 .git 并重新开始。

项目扫描与 .gitignore 生成

铁律是 .gitignore 必须在第一次 git add 之前就位,避免大文件进入 Git 历史导致仓库臃肿或推送失败。用 du -sh 扫描所有顶级目录和文件并按大小排序,大文件分级处理:>10MB 逐个询问是否推送;>50MB 额外警告推送较慢;单文件 >100MB 必须排除(GitHub 硬限制)。若选择公开仓库,额外扫描 .env / .env.、secret / credential / token、.pem / *.key、memory/ / MEMORY.md 等敏感内容,列出建议排除项让用户逐项确认。生成或更新 .gitignore 时,已存在则合并新增排除项并展示差异,不覆盖用户已有规则。

用户决策

确认仓库名(默认当前目录名)、描述、公开或私有。选择公开会二次确认 .gitignore 是否已排除敏感内容。通过 gh repo view 检查同名仓库,若已存在可选择换名、使用已有仓库或删掉重建(删掉重建需二次确认)。

推送

首次推送流程:git init + git branch -m main,git add -A,提交,若仓库不存在则用 gh repo create 创建远程仓库(或对已有仓库执行 git remote add origin),最后 git push -u origin main。 日常更新流程:git status 扫描变更,检查新增大文件(>10MB 询问、单文件 >100MB 必须排除并加入 .gitignore),git add -A,按变更内容自动生成提交信息,git push。日常更新不询问 Release、不询问仓库名、不重新扫描全项目。 推送失败时按错误类型处理,包括 rejected / non-fast-forward(默认 git pull --rebase 后重试,仍失败则询问是否强制覆盖远程并警告后果)、超时卡住、认证失败、单文件超限等。

版本发布(可选)

触发时机:首次推送后主动询问一次是否需要打版本;日常更新后不主动问;用户主动说发版本、打 release、打 tag 时执行。流程包括:读取当前已有 tag 并建议下一个版本号(无 tag 建议 v0.1.0,已有则默认 minor +1,用户可自定义),自动读取上个 tag 以来的 commit 生成变更摘要让用户确认或修改,询问是否附带下载文件,随后执行 git tag、git push origin、gh release create,如有附件则 gh release upload。tag 已存在时提示换一个版本号。

完成输出

输出仓库 URL、可见性、文件数、仓库大小、排除项列表以及 Release 版本号和 URL(或未创建)。

使用方式

使用前需满足前置条件:安装 git、安装 gh CLI、gh 已登录 GitHub、git 用户信息已配置。随后可直接用自然语言触发,例如“帮我推到 GitHub”“推一下”“打个 release”。技能会根据当前目录状态自动判断模式,并在关键步骤(如排除大文件、公开仓库二次确认、删除 .git、强制覆盖远程)要求用户确认。每一步可中断,用户随时可以说“停”或“回到上一步”。

适用场景

  • 新项目首次推送到 GitHub。
  • 已有仓库的日常 commit 与 push。
  • 为项目打 tag 并创建 GitHub Release,可附带安装包、压缩包等下载文件。
  • 需要在大文件、敏感内容进入 Git 历史前进行拦截和审查的场景。

限制

  • 依赖 git 与 gh CLI,以及 GitHub 登录状态;缺失时无法执行并会终止。
  • 受 GitHub 平台限制:单文件超过 100MB 必须排除。
  • .gitignore 的生成依据目录扫描结果,具体扫描输出取决于实际项目内容。
  • 版本号建议规则、提交信息生成规则均按文档描述执行,具体结果随项目变更内容而定。
  • 删除 .git、强制覆盖远程等破坏性操作不可恢复,仅在用户二次确认后执行。