# GIT Push

把项目推送到 GitHub，三种模式自动判断：**首次推送**（大文件扫描 → 生成 .gitignore → git init → gh 建仓 →...

- Repository: https://github.com/yunshu0909/yunshu_skillshub (788 stars)
- Category: Git and review
- License: MIT
- Last updated: 2026-10-11
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add yunshu0909/yunshu_skillshub --skill git-push -g -a claude-code -y`
Codex: `npx skills add yunshu0909/yunshu_skillshub --skill git-push -g -a codex -y`
Cursor: `npx skills add yunshu0909/yunshu_skillshub --skill git-push -g -a cursor -y`
Gemini CLI: `npx skills add yunshu0909/yunshu_skillshub --skill git-push -g -a gemini-cli -y`

## Description

把项目推送到 GitHub，三种模式自动判断：**首次推送**（大文件扫描 → 生成 .gitignore → git init → gh 建仓 → 推送）、**日常更新**（commit + push）、**版本发布**（打 tag + 建 Release，可附下载文件）。核心原则是安全第一：推之前必扫大文件和敏感文件，宁可多问一句也不把不该推的东西推上去。当用户说"推到GitHub""推送到GitHub""git push""上传到GitHub""提交并推送""发版本""打release""打tag""/git-push"时触发。不适用于：规划哪些功能进哪个版本号（用 issue-pool, , 本 skill 只负责把已经定好的版本号打成 tag）、复杂 git 操作如 rebase/cherry-pick/解冲突/改历史/回滚（直接用 git 命令，本 skill 不覆盖）、代码写完前的自测和验收。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 一键推送 GitHub

## 功能说明

把当前项目一键推送到 GitHub，覆盖完整生命周期：

- **首次推送**, 新项目从零到 GitHub
- **日常更新**, 改了文件，推一下（commit + push）
- **版本发布**, 打 tag + 创建 Release，可附带下载文件

核心原则：**安全第一**。宁可多问一句，不能把不该推的东西推上去。

---

## 工作流程

### 第0步：环境检查 + 模式判断

依次检查前置条件，任一不满足就终止并给出指引：

**1. git 是否安装**
- ❌ → 提示：`brew install git`，终止
- ✅ → 继续

**2. gh CLI 是否安装**
- ❌ → 提示：`brew install gh`，终止
- ✅ → 继续

**3. gh 是否已登录 GitHub**
- 执行 `gh auth status` 检查
- ❌ 未登录 → 提示：`gh auth login`，终止
- ✅ 已登录 → 记录账号名，告诉用户"当前登录账号：[xxx]"，继续

**4. git 用户信息是否配置**
- 执行 `git config user.name` 和 `git config user.email` 检查
- ❌ 未配置 → 提示用户设置：
  ```
  git config --global user.name "你的名字"
  git config --global user.email "你的邮箱"
  ```
  终止
- ✅ 已配置 → 继续

**5. 当前目录是否已是 git 仓库 → 决定走哪条路**

```
不是 git 仓库 → 【首次推送】从第1步开始
是 git 仓库，无 remote → "本地有 git 但没关联远程"
    → 先执行第1步的大文件扫描（确保安全）
    → 再跳到第2步关联远程
是 git 仓库，有 remote → 【已有仓库】进入模式选择：
    ├── "推日常更新" → 跳到第3B步（日常更新）
    ├── "发新版本"   → 检查是否有未提交的变更
    │   ├── 有变更 → 先走第3B步，再走第4步
    │   └── 无变更 → 直接跳到第4步（只打 tag + Release）
    └── "重新来"
        → ⚠️ 警告："这将删除所有 Git 历史记录（包括所有提交、分支、tag），不可恢复。"
        → 用户二次确认后删除 .git，从第1步开始
```

---

### 第1步：项目扫描 + .gitignore 生成

> **⚠️ 铁律：.gitignore 必须在第一次 `git add` 之前就位。绝不能先提交再排除, , Git 历史里的大文件删不干净，会导致仓库臃肿、推送失败。**

#### 1.1 扫描目录大小

用 `du -sh` 扫描所有顶级目录和文件，按大小排序。

**大文件分级处理：**

| 大小 | 处理方式 |
|------|----------|
| **>10MB** | 列出，逐个问用户"要推吗？" |
| **>50MB** | 额外警告"较大，推送会比较慢" |
| **单文件 >100MB** | **必须排除**，GitHub 硬限制，推不上去 |

**展示格式**（示例）：

```
扫描发现以下内容超过 10MB：

  1. 109MB  slides/   （PPT + 大图片）
  2.  12MB  assets/   （视频文件）

⚠️ 其中 slides/ 超过 50MB，推送会很慢。
❌ 其中 recording.mp4 (150MB) 超过 GitHub 100MB 单文件限制，必须排除。

要排除哪些？（输入序号，或 "全部排除" / "全部保留"）
```

#### 1.2 敏感内容扫描（仅公开仓库）

如果用户选了公开仓库，额外扫描：

- `.env` / `.env.*`, 环境变量/密钥
- `*secret*` / `*credential*` / `*token*`, 密钥文件
- `*.pem` / `*.key`, 证书文件
- `memory/` / `MEMORY.md`, AI 工具记忆文件
- 任何看起来像私人内容的文件

列出建议排除项，让用户逐项确认。

#### 1.3 生成或更新 .gitignore

**如果不存在 .gitignore**：基于扫描结果生成新文件。

The rest: https://github.com/yunshu0909/yunshu_skillshub/blob/HEAD/coding/git-push/SKILL.md
