如何使用Git向分包商隐藏核心算法代码,解决子模块方案现存问题
核心代码隐藏Git实现方案
方案1:修复现有git submodule配置(最低成本过渡)
你原来的submodule流程只需要调整两个配置即可解决现有问题:
- 主仓库删除已提交的
.gitmodules文件,并且将.gitmodules和核心子模块的目录路径一起加入主仓库的.gitignore,永远不提交到公开主仓库。这样主仓库不会记录子模块信息,分包商拉取代码时不会触发子模块拉取逻辑,也就不会报权限错误 - 内部核心开发人员本地自行添加子模块配置,执行
git submodule add <私有核心仓库地址> <子模块目录>即可,该配置只会保存在本地,不会同步给其他开发者 - 混淆后的产物直接提交到主仓库的公开目录(比如
dist/core/),分包商拉取后即可直接调用
方案2:git subtree实现(更稳定的长期方案)
subtree不需要额外的本地配置,分包商完全无感知,是该场景的最优解,操作流程如下:
内部核心开发人员初始配置
- 克隆公开主仓库到本地
- 添加核心私有仓库的远程别名:
git remote add core-private <你的核心私有仓库Git地址> - 将私有仓库挂载到本地主仓库的指定目录(示例目录为
./src/core-private,可自行修改):git subtree add --prefix=src/core-private core-private main --squash
参数说明:
--squash会将私有仓库的所有提交压缩为1个提交合并到主仓库,避免泄露私有仓库的提交历史
- 将
src/core-private路径加入主仓库的.gitignore,确保核心源码永远不会被提交到公开主仓库
日常核心开发操作
- 拉取私有仓库的最新代码到本地:
git subtree pull --prefix=src/core-private core-private main --squash - 本地修改完核心代码后,将改动推回私有仓库:
git subtree push --prefix=src/core-private core-private main - 生成minify混淆产物,将产物提交到公开主仓库的公共调用目录即可,分包商拉取主仓库就能直接拿到最新可用版本
分包商侧操作
完全不需要做任何特殊配置,正常拉取、提交主仓库代码即可,不会遇到任何权限报错,也不会出现误删子模块的提交问题
注意事项
- 核心源码目录必须全程加入主仓库
.gitignore,避免误提交泄露 - 每次核心代码修改后必须同步更新混淆产物并提交到主仓库,避免分包商用到旧版本
- 私有核心仓库严格管控访问权限,仅授权给内部核心开发人员
内容的提问来源于stack exchange,提问作者stoefln
相关产品推荐
相关产品推荐

