Open Core 模式:开源版与企业版的双仓库管理实践

本文以我正在做的 AI 知识库项目为例,介绍企业中如何同时维护一个开源版本和一个闭源企业版本。

什么是 Open Core 模式

Open Core 是一种成熟的商业模式:核心功能开源,高级功能闭源收费。

知名案例:

  • GitLab:社区版开源,企业版闭源
  • Metabase:基础版开源,Pro 版收费
  • Sentry:可自部署开源版,也有云端付费版
markdown 复制代码
开源版(Community Edition)     企业版(Enterprise Edition)
├── 基础知识库功能               ├── 开源版全部功能  ← 包含开源版
├── 单用户                      ├── 多租户隔离
├── 手动上传文档                 ├── 异步队列处理
└── 基础对话                    ├── RBAC 权限体系
                                ├── 数据统计分析
                                ├── SSO 单点登录
                                └── 私有化部署支持

仓库结构设计

两个独立仓库

仓库 可见性 内容
github.com/你/ai-knowledge Public 开源版
github.com/你/ai-knowledge-enterprise Private 企业版 = 开源版 + 企业功能

本地配置两个 remote

bash 复制代码
# 查看当前 remote
git remote -v

# 开源版(已有)
git remote add origin git@github.com:你/ai-knowledge.git

# 企业版(新增)
git remote add enterprise git@github.com:你/ai-knowledge-enterprise.git

分支策略

bash 复制代码
开源仓库 (origin)              企业仓库 (enterprise)
    master                         master
    └── bugfix/xxx                 ├── feature/multi-tenant
                                   ├── feature/rbac
                                   └── feature/analytics

核心原则:企业版 master = 开源版 master + 企业专属功能

企业专属功能只在私有仓库开发,永远不合并回开源版。


日常开发工作流

场景一:修复 Bug(两边都要)

bash 复制代码
# 在开源版修复
git add .
git commit -m "fix: 修复文件上传超时问题"

# 同时推送到两个仓库
git push origin master
git push enterprise master

场景二:开发基础功能(两边都要)

bash 复制代码
git checkout -b feature/url-parsing

# 开发完成后合并
git checkout master
git merge feature/url-parsing

# 推送到两个仓库
git push origin master
git push enterprise master

场景三:开发企业专属功能(只推企业版)

bash 复制代码
# 切换到企业仓库的本地工作区
# (企业功能建议在企业仓库单独开分支)

git checkout -b feature/multi-tenant

# 开发完成后合并到企业 master
git checkout master
git merge feature/multi-tenant
git push enterprise master   # 只推企业版

# ❌ 不执行:git push origin master

一行命令同步两个仓库

.git/config 中配置 push 到多个 remote:

ini 复制代码
[remote "all"]
    url = git@github.com:你/ai-knowledge.git
    url = git@github.com:你/ai-knowledge-enterprise.git

然后:

bash 复制代码
git push all master   # 一次推送到两个仓库

License 选择

开源版:推荐 AGPL-3.0

bash 复制代码
# 在项目根目录创建 LICENSE 文件,选择 AGPL-3.0

为什么选 AGPL?

  • 个人和开源项目:免费使用
  • 企业想基于你的代码做闭源产品:必须购买商业授权
  • 有效保护 Open Core 的商业利益

对比其他 License:

License 别人可以闭源商用? 适合 Open Core?
MIT ✅ 可以 ❌ 保护力弱
Apache 2.0 ✅ 可以 ❌ 保护力弱
GPL-3.0 ❌ 不行 ⚠️ 过于严格
AGPL-3.0 ❌ 不行(网络服务也算) ✅ 最适合

企业版:不需要开源 License

csharp 复制代码
# LICENSE 文件内容
Proprietary Software License

Copyright (c) 2026 Your Name. All rights reserved.

This software is proprietary and confidential.
Unauthorized copying, distribution, or use is strictly prohibited.

开源前的安全检查

开源之前必须确认没有敏感信息泄漏:

bash 复制代码
# 检查历史提交里有没有真实 API Key
git log -p | grep -iE "api_key|secret|password|sk-"

# 检查有没有把 .env 文件提交进去
git ls-files | grep .env

必须在 .gitignore 中忽略的文件

gitignore 复制代码
# 环境变量(绝对不能提交)
.env
.env.local
.env.production
*.env

# 数据库文件
*.sqlite
*.db

# 上传的文件
uploads/

# 日志
logs/
*.log

提供 .env.example 给开源用户参考

bash 复制代码
# .env.example
OPENAI_API_KEY=your-api-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
DATABASE_PATH=./data/knowledge.db
PORT=3000

版本管理规范

开源版和企业版独立版本号,互不影响。

bash 复制代码
# 开源版发布 v1.0.0
git tag v1.0.0
git push origin v1.0.0

# 企业版发布 enterprise-v1.0.0
git tag enterprise-v1.0.0
git push enterprise enterprise-v1.0.0

推荐的版本号规则(语义化版本)

复制代码
v主版本.次版本.补丁版本
v1.2.3

主版本:不兼容的重大变更
次版本:新增功能(向下兼容)
补丁版本:Bug 修复

团队协作中的注意事项

权限控制

人员 开源仓库权限 企业仓库权限
核心开发者 Write Write
社区贡献者 Fork + PR ❌ 无权限
实习生 Read ❌ 无权限

代码审查流程

  • 开源版:所有 PR 必须经过 Review,因为是公开的
  • 企业版:内部 Review,关注企业功能的安全性和多租户隔离

不要做的事

bash 复制代码
# ❌ 不要把企业功能的代码复制粘贴到开源版
# ❌ 不要在开源版的 commit message 里提到企业功能
# ❌ 不要把 .env 里的真实 key 提交到任何仓库
# ❌ 不要在开源版中留下注释暗示"企业版才有此功能的完整实现"

总结

perl 复制代码
日常开发
  ↓
修复 Bug / 基础功能  →  git push origin master && git push enterprise master
企业专属功能         →  git push enterprise master(只推企业版)
  ↓
发布开源版:git tag vX.X.X && git push origin vX.X.X
发布企业版:git tag enterprise-vX.X.X && git push enterprise enterprise-vX.X.X

Open Core 模式的本质:用开源积累用户和口碑,用企业版变现。开源版越好用,企业版才越有人付费。所以开源版不是减配版,而是真正可用的完整产品,企业版只是在此基础上叠加了企业场景才需要的功能。

相关推荐
AI精钢3 小时前
升级踩坑实录:OpenClaw 2026.4.9 后 GitHub Copilot 调用 Claude 全线 HTTP 400 的根因与修复
http·github·copilot·claude·github copilot·openclaw·ai 网关
CoovallyAIHub4 小时前
不需要Memory Bank:CMDR-IAD用2D+3D双分支重建做工业异常检测,MVTec 3D 97.3%
算法·架构·github
想七想八不如114084 小时前
【GitHub开源】一款极简跨平台 Todo 应用:微信小程序 + Windows 桌面挂件 + 实时同步
微信小程序·开源·github
HeteroCat5 小时前
数据时代的"算命先生"--from Qclaw 无不言
面试·github
逛逛GitHub5 小时前
GitHub 上 3 万星的 Linux 管理面板,AI 应用单月下载破 10 万次。
github
逛逛GitHub1 天前
面壁智能开源了支持音色设计、克隆、30语言+9 种方言的语音大模型
github
小领航1 天前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
李同学Lino1 天前
别再让Agent瞎写屎山代码了!带你用Superpowers重塑Vibe Coding体验(附保姆级教程)
github
HashTang1 天前
用自然语言驱动的开源 3D 建筑设计编辑器-Aedifex
前端·github·ai编程