目标

把一个含密钥配置文件(如 setting.json)的本地小工具发布为 GitHub 公开仓库,且不泄露任何真实密钥与本地路径。

适用场景

  • 个人小工具(配置文件内含 API key、token、密码)
  • 首次 git init 发布;或已有仓库需检查历史是否泄密(后者需额外处理历史,见下)

前置

  • gh CLI 已登录(gh auth status)
  • git 身份已配置(user.name / user.email)

步骤

  1. 盘点敏感物:找出所有配置文件、.env、日志;grep 真实密钥与本地路径

    grep -rn "<真实key>" --include='*' . | grep -v node_modules
  2. 完善 .gitignore:确保 setting.json、node_modules/、*.log 等已忽略
  3. 补示例配置:新建 setting.example.json(占位 key sk-xxx),README 指引 cp setting.example.json setting.json
  4. 泛化本地路径:README、页面 footer 里的 ~/Desktop/xxx 等绝对路径改为通用写法(如 npm start)
  5. 补开源元信息:MIT LICENSE;package.json 删 private: true、加 "license": "MIT"
  6. 暂存后复核:git add -A 后,git status --short + git diff --cached --name-only 确认敏感文件未进入暂存区
  7. 创建并推送:gh repo create <name> --public --source=. --push
  8. 发布后验证:

    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_modules
  • gh 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