关于 GitHub Push
用于安全推送代码到 GitHub 的 Claude Code 技能,先扫描凭据和敏感文件,再执行提交与推送。它还可在缺少 README.md 时生成文档,并处理仓库信息与可选的拉取请求。
主要功能
- 01推送前扫描密钥和凭据
- 02检查待提交文件中的敏感内容
- 03缺少时生成 README.md
- 04生成提交信息并推送到 GitHub
- 05可选创建拉取请求并设置仓库信息
适用场景
- 01推送前检查代码库是否包含凭据
- 02为缺少说明文件的项目生成 README.md
- 03提交并推送经过安全检查的更改
- 04按需创建拉取请求并更新仓库资料
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alfredang/ skills --skill github-push安装后在 Claude Code 中输入/github-push确认已加载。
附带文件examples.mdscripts/scan-secrets.sh
详细介绍
GitHub 推送
命令
/github-push 或 github-push
导航
Git 与安全
关键词
github push,git push,机密检测,API 密钥扫描,凭据扫描,安全检查,推送到 github,提交并推送,机密扫描器,README 生成器,安全推送,安全推送,推送前钩子,泄漏检测,API 密钥泄露,密码泄露
描述
通过自动扫描已暴露的机密、API 密钥和凭据,安全地将代码推送到 GitHub。如果缺少 README.md,则自动生成;配置仓库描述、线上站点 URL 和主题,并启用 GitHub Discussions。
执行
此技能通过订阅计划的 Claude Code运行。请勿使用按量付费的 API 密钥。所有 AI 操作都应通过已激活订阅的 Claude Code CLI 环境执行。
响应
我会帮助你安全地推送到 GitHub!
工作流包括:
| 步骤 | 描述 |
|---|---|
| 机密扫描 | 检测已暴露的 API 密钥、密码和凭据 |
| 文件审查 | 检查不应提交的敏感文件 |
| README 生成 | 如果缺少 README.md,则通过 /create_github_readme 技能自动生成 |
| Git 提交 | 暂存并使用 AI 生成的消息提交 |
| 推送 | 推送到远程仓库 |
| 创建 PR | 可选创建拉取请求 |
| 仓库简介 | 自动调用 /github-about 设置描述、线上站点 URL 和主题 |
说明
执行 /github_push 时,请遵循以下工作流:
阶段 1:机密检测(必须)
在执行任何 Git 操作之前,扫描代码库以查找已暴露的机密。这是一项阻断性要求——如果发现机密,请勿继续。
1.1 扫描已暂存文件
git diff --cached --name-only
1.2 机密模式检测
扫描所有已暂存文件,查找以下模式:
AWS 凭据
AKIA[0-9A-Z]{16}
aws_access_key_id\s*=\s*['"][A-Za-z0-9/+=]+['"]
aws_secret_access_key\s*=\s*['"][A-Za-z0-9/+=]+['"]
API 密钥(通用)
api[_-]?key\s*[:=]\s*['"][A-Za-z0-9_\-]{20,}['"]
apikey\s*[:=]\s*['"][A-Za-z0-9_\-]{20,}['"]
api[_-]?secret\s*[:=]\s*['"][A-Za-z0-9_\-]{20,}['"]
私钥
-----BEGIN (RSA|DSA|EC|OPENSSH|PGP) PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
数据库连接字符串
postgres(ql)?://[^\s'"]+
mysql://[^\s'"]+
mongodb(\+srv)?://[^\s'"]+
redis://[^\s'"]+
OAuth 和 Bearer 令牌
bearer\s+[A-Za-z0-9\-_.~+/]+=*
oauth[_-]?token\s*[:=]\s*['"][A-Za-z0-9_\-]+['"]
access[_-]?token\s*[:=]\s*['"][A-Za-z0-9_\-]+['"]
refresh[_-]?token\s*[:=]\s*['"][A-Za-z0-9_\-]+['"]
云服务提供商机密
# Google Cloud
AIza[0-9A-Za-z\-_]{35}
# Azure
[a-zA-Z0-9+/]{86}==
# Heroku
[hH]eroku.*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}
# Stripe
sk_live_[0-9a-zA-Z]{24}
rk_live_[0-9a-zA-Z]{24}
pk_live_[0-9a-zA-Z]{24}
# Twilio
SK[0-9a-fA-F]{32}
# SendGrid
SG\.[a-zA-Z0-9_-]{22}\.[a-zA-Z0-9_-]{43}
# Slack
xox[baprs]-[0-9]{10,13}-[0-9]{10,13}[a-zA-Z0-9-]*
# GitHub
gh[pousr]_[A-Za-z0-9_]{36,}
# OpenAI
sk-[A-Za-z0-9]{48}
# Anthropic
sk-ant-[A-Za-z0-9\-_]{90,}
通用机密
password\s*[:=]\s*['"][^'"]{8,}['"]
secret\s*[:=]\s*['"][^'"]{8,}['"]
credential\s*[:=]\s*['"][^'"]{8,}['"]
private[_-]?key\s*[:=]\s*['"][^'"]+['"]
JWT 令牌
eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*
1.3 检查敏感文件
绝不应提交的文件:
.env、.env.*(环境文件)*.pem、*.key、*.p12、*.pfx(证书/密钥)credentials.json、secrets.json、config.secret.*id_rsa、id_dsa、id_ecdsa、id_ed25519(SSH 密钥)*.keystore、*.jks(Java 密钥库).htpasswd、.netrc、.npmrc(身份验证文件)wp-config.php(WordPress 配置)- 包含凭据的
database.yml - 包含 SECRET_KEY 的
settings.py
重要:切勿将机密存储在配置文件中!
切勿将机密硬编码在以下配置文件中:
config.json、config.yaml、config.tomlsettings.json、settings.py、settings.jsapp.config.js、next.config.js、vite.config.ts- 任何会提交到版本控制的文件
应将机密存储在以下位置:
.env文件(必须列入.gitignore)- Python 项目的
uv机密文件(uv支持加载.env) - 平台机密管理器(Vercel、Railway、Fly.io 环境变量)
- 云机密管理器(AWS Secrets Manager、GCP Secret Manager、Azure Key Vault)
确认 .gitignore 包含:
grep -E "^\.env|^\.env\.|\.pem$|\.key$|credentials|secrets" .gitignore
1.4 机密检测结果
如果发现机密:
- 停止——不要继续推送
- 列出所有检测到的机密及其文件和行号
- 提供补救步骤:
- 从文件中移除机密
- 将机密移至
.env文件(确保.env已列入.gitignore) - 对于 Python/uv 项目,使用
.env和uv run,它会自动加载环境变量 - 使用
process.env.SECRET_NAME(Node.js)或os.environ["SECRET_NAME"](Python) - 切勿将机密存储在配置文件中(如 config.json、settings.py 等)
- 将敏感文件添加到 .gitignore
- 如果已提交,指导如何重写历史记录
发现机密时的输出示例:
SECURITY ALERT: Secrets detected in staged files!
File: src/config.js:15
Type: API Key
Pattern: api_key = "sk-abc123..."
File: .env:3
Type: Database URL
Pattern: DATABASE_URL=postgres://user:password@...
BLOCKED: Cannot push until secrets are removed.
Remediation:
1. Remove secrets from config files (NEVER store secrets in config files!)
2. Move secrets to .env file (ensure .env is in .gitignore)
3. For Python/uv: use .env file - uv run auto-loads environment variables
4. Access via: process.env.API_KEY (Node.js) or os.environ["API_KEY"] (Python)
5. Run: git reset HEAD <file> to unstage
如果未发现机密:
Security scan complete: No secrets detected.
Proceeding with push...
第 2 阶段:生成 README
检查项目根目录中是否存在 README.md:
ls README.md 2>/dev/null
如果不存在 README.md:
- 调用
/create_github_readme技能,生成一份专业的 README - 该 README 技能会自动截取屏幕截图、添加徽章、技术栈、架构图等内容
- 技能完成后,将生成的
README.md(以及创建的screenshot.png)加入暂存区
如果 README.md 已存在:
- 跳过此阶段,除非用户明确要求重新生成 README
第 3 阶段:Git 操作
3.1 检查状态
git status
git diff --cached --stat
3.2 将文件加入暂存区
如果有文件需要加入暂存区:
git add <specific-files>
重要: 切勿使用 git add -A 或 git add .,始终添加指定文件,以避免意外提交敏感文件。
3.3 生成提交消息
根据更改内容:
- 分析修改了哪些文件
- 了解更改的性质(功能、修复、重构、文档等)
- 遵循 Conventional Commits 规范,生成简洁的提交消息:
feat:新功能fix:修复错误docs:文档refactor:代码重构test:测试chore:维护
3.4 提交
git commit -m "$(cat <<'EOF'
<type>: <description>
<optional body>
Co-Authored-By: Claude <[email protected]>
EOF
)"
3.5 推送
git push origin <branch>
如果推送因上游更改而失败:
git pull --rebase origin <branch>
git push origin <branch>
第 4 阶段:拉取请求(可选)
如果用户要求创建 PR:
gh pr create --title "<title>" --body "$(cat <<'EOF'
## Summary
- Change 1
- Change 2
## Test Plan
- [ ] Test 1
- [ ] Test 2
---
Generated with [Claude Code](https://claude.ai/code)
EOF
)"
第 5 阶段:仓库简介(自动调用 /github-about)
推送后,自动运行 /github-about 技能,更新仓库的 About 部分。
/github-about 技能将:
- 描述 — 分析代码库并设置有吸引力的仓库描述(如果尚未设置)
- 在线站点 URL — 检测部署 URL(Vercel、GitHub Pages、Netlify 等)并设置主页
- 主题 — 分析技术栈(语言、框架、平台)并添加相关主题
只需调用 /github-about——它会自动处理身份验证、检测和更新。
5.4 启用 Discussions
/github-about 完成后,如果尚未启用 Discussions,也请启用:
gh repo view --json hasDiscussionsEnabled
如果未启用 Discussions:
gh repo edit --enable-discussions
功能
- 扫描 20 多种类型的暴露密钥和凭据
- 检测不应提交的敏感文件
- 通过
/create_github_readme技能自动生成专业的 README.md - 使用 AI 生成提交消息
- 通过安全检查推送到 GitHub
- 创建附带说明的拉取请求
- 自动调用
/github-about设置仓库描述、在线站点 URL 和主题 - 自动启用 GitHub Discussions
- 支持所有 Git 工作流(功能分支、main)
检测到的安全模式
| 类别 | 示例 |
|---|---|
| 云凭据 | AWS、GCP、Azure、Heroku |
| API 密钥 | OpenAI、Anthropic、Stripe、Twilio、SendGrid |
| 身份验证令牌 | OAuth、Bearer、JWT、会话令牌 |
| 数据库 URL | PostgreSQL、MySQL、MongoDB、Redis |
| 私钥 | RSA、DSA、EC、SSH、PGP |
| 平台令牌 | GitHub、Slack、Discord webhook |
| 通用机密信息 | 代码中的密码、凭据、机密信息 |
后续步骤
运行 /github_push 后:
- 在 GitHub 上确认推送成功
- 检查 Actions 中的 CI/CD 状态
- 检查生成的 README
- 在 GitHub 上确认仓库描述、主题和在线站点 URL
- 检查 Discussions 是否已启用并设置好类别
- 如果已创建 PR,分享 PR 链接
- 留意 GitHub 发出的安全警报