基于GitHub维护开源与闭源双版本应用的方案及合规咨询
版本同步与合规性解答
一、GitHub上实现开源与闭源版本同步的方案
双仓库方案(推荐)
这是最稳妥且易维护的方式:
- 创建两个独立仓库:一个公开的开源仓库(遵循Apache License 2.0),存放开源版本的所有代码;另一个私有闭源仓库,存放在线版的全部代码(包含开源部分+闭源专属功能)。
- 将开源仓库设为闭源仓库的上游远程:
git remote add upstream https://github.com/your-username/open-source-repo.git - 同步流程:
- 当开源仓库有更新(包括社区贡献的PR合并后),在闭源仓库执行
git fetch upstream,将开源分支的更新拉取到本地。 - 将拉取的更新合并到闭源仓库的开发分支,确保与闭源专属代码兼容。
- 闭源版本的专属功能(如注册页面)放在独立目录,通过
.gitignore在开源仓库中排除,避免同步时泄露。
- 当开源仓库有更新(包括社区贡献的PR合并后),在闭源仓库执行
单仓库方案(不推荐)
由于闭源代码需要保密,单仓库实现存在本质限制:GitHub不支持同一仓库内部分分支公开、部分分支私有。如果强行用单仓库,只能:
- 把整个仓库设为私有,然后将开源代码单独提取到公开仓库同步,本质还是双仓库的变种,反而增加维护复杂度。
- 用条件编译(如
#ifdef CLOSED_SOURCE)区分开源/闭源代码,但开源仓库仍需移除闭源代码片段,最终还是要维护两套代码,不如直接双仓库高效。
二、社区贡献代码闭源的合规性(Apache License 2.0)
完全合规,但需满足Apache License 2.0的核心要求:
- 保留贡献代码的原始版权声明和Apache License 2.0文本,不得篡改或删除。
- 若对社区贡献的代码进行了修改,需在闭源版本中注明修改内容(无需公开修改后的代码)。
- 当用户获取闭源在线版的二进制文件时,需提供对应的许可证文本,以及修改说明(如果有)。
- 建议在开源仓库的
CONTRIBUTING.md中明确说明:贡献的代码可能会被用于闭源的在线版本,让贡献者有清晰预期,避免后续纠纷。
内容的提问来源于stack exchange,提问作者Architek
相关产品推荐
相关产品推荐

