本地工具脱敏发布到 GitHub Public (Sanitized Public Release)
目标
把一个含密钥配置文件(如 setting.json)的本地小工具发布为 GitHub 公开仓库,且不泄露任何真实密钥与本地路径。
适用场景
- 个人小工具(配置文件内含 API key、token、密码)
- 首次
git init发布;或已有仓库需检查历史是否泄密(后者需额外处理历史,见下)
前置
ghCLI 已登录(gh auth status)- git 身份已配置(
user.name/user.email)
步骤
盘点敏感物:找出所有配置文件、
.env、日志;grep 真实密钥与本地路径grep -rn "<真实key>" --include='*' . | grep -v node_modules- 完善
.gitignore:确保setting.json、node_modules/、*.log等已忽略 - 补示例配置:新建
setting.example.json(占位 keysk-xxx),README 指引cp setting.example.json setting.json - 泛化本地路径:README、页面 footer 里的
~/Desktop/xxx等绝对路径改为通用写法(如npm start) - 补开源元信息:MIT
LICENSE;package.json删private: true、加"license": "MIT" - 暂存后复核:
git add -A后,git status --short+git diff --cached --name-only确认敏感文件未进入暂存区 - 创建并推送:
gh repo create <name> --public --source=. --push 发布后验证:
gh repo view <owner>/<repo> --json visibility,url gh api repos/<owner>/<repo>/git/trees/master?recursive=1 --jq '.tree[].path'核对远端文件树不含敏感文件
验证方法
- 本地 grep 无真实 key 残留
git ls-files/ 远端 tree 无setting.json、node_modulesgh repo view显示PUBLIC且 URL 可访问
常见失败点
- 历史泄露:本流程只保证"新提交干净";若仓库此前已把密钥推上去,必须旋转密钥(改 key),光删文件没用,git 历史永远可查
- 示例文件被误忽略:
.gitignore写setting.*.json会把setting.example.json一起忽略,应精确写setting.json - 锁文件含敏感元信息:
package-lock.json根条目可能带 private 字段,改package.json后可顺手检查
相关概念
本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/General