oss-publishlisted
Install: claude install-skill NovaKepler513/claude-skills
# 项目开源(oss-publish)· 把一个项目安全体面地开源到 GitHub
> **一句话**:用户说"帮我开源一个项目/把 X 发到 GitHub 上"时跑这套:**先做开源版改写与敏感审计 → 用户拍板仓库名和范围 → 全新历史规范身份发布 → 发布后从远端复查 → 按固定结构汇报**。核心思想:push 出去的东西就当永久公开(会被缓存/索引),所以一切审计在发布前做足,发布后只做验证。
---
## 〇、定位与触发
**什么时候用**:用户说"帮我开源这个/把 X 开源/发布到我 GitHub 上/做成公开仓库"。
**什么时候不用**:往私有仓库推日常提交;给已有开源仓库修 bug 发 PR(常规 git 流程)。
---
## 一、八条铁律
1. **push = 永久公开**。GitHub 会被爬虫/缓存/镜像,`git push --force` 救不回已泄漏的内容。所以敏感审计必须在**发布前**做足,发布后的复查只是验证不是补救。
2. **双版本分离**:私有版(含私有路径/内部引用/客户信息)留在用户自己的工作区;开源版**从零重写路径层和引用层**——输出路径改通用(如 `~/Downloads/...`)、内部工具名换成通用说法、去掉一切"我们/本公司"语境改为面向陌生用户。两版各自维护,私有版头部标注开源仓库地址并注明"改内容记得同步"。
3. **全新 git 历史**:开源仓库一律在干净目录 `git init` 重来,**绝不**从私有工作仓库带出历史(历史里的旧提交、旧作者邮箱、被删文件全是泄漏源)。
4. **提交身份规范**:统一用用户的**公开身份名 + GitHub noreply 邮箱**(格式 `<数字ID>+<用户名>@users.noreply.github.com`,GitHub Settings→Emails 可查),真实邮箱绝不进提交。
5. **License 必选再发布**:代码/文档默认 MIT;含设计资产/图片/数据时另议(问一句);项目里**借鉴过别人的开源**必须鸣谢并遵守对方许可。被研究/借鉴对象是 UNLICENSED 的,只能开源"你自己的方法/文字",不能带对方代码资产。
6. **发布前用户拍板**:仓库名、一句话描述、公开范围(哪些文件进/哪些不进)、License——列清楚给用户确认一次再 `gh repo create --public`。授权过的本次会话内后续修补推送不用再问。
7. **发布后以远端为准复查**:`git clone --no-local` 从 GitHub 拉回来复扫敏感词 + 核对文件清单 + 看 README 渲染,**不查本地草稿当交差**。
8. **优质开源不止于无泄漏**:README 要能让陌生人 30 秒懂(是什么/为什么/怎么装/长什么样/License)、中英描述、加 topics、无杂物文件(.DS_Store/node_modules/临时产物)、自造词首现处解释(冷读标准,参见本合集 plain-write)。
---
## 二、五步流程
### 第一步 · 备料与开源版改写
1. 确认要开源的内容清单;确认其中借鉴/依赖的第三方许可。
2. 按铁律 2 做双版本改写:路径通用化、内部引用剥离、语境改为陌生用户视角。
3. 组仓库结构:README(是什么→为什么→安装→使用示例→License)+ LICENSE + 主体内容;skill 类项目按 Claude Code 规范放