无需修改引擎仓库,实现游戏与引擎仓库目录结构融合方案
无侵入式SVN仓库目录融合方案
针对需求:将engine仓库(路径/Engine/Modules)与game仓库融合为/Engine/Modules/Game的超集结构,同时保证引擎仓库无游戏引用、游戏仓库承载所有元信息,以下是几种可行的非常规实现方案:
方案一:反向Externals挂载
- 操作逻辑:完全在game仓库内配置依赖,反向拉取引擎模块,避免修改engine仓库
- 步骤:
- 在game仓库根目录创建
Engine/Modules目录(可添加.svnignore忽略空目录,不影响externals挂载) - 给game仓库添加externals规则:将
Engine/Modules指向engine仓库的/Engine/Modules完整URL - 在game仓库的
Engine/Modules目录下创建Game子目录,存放所有游戏代码及externals等元信息
- 在game仓库根目录创建
- 效果:检出game仓库时,会自动拉取engine的所有模块内容,同时合并Game目录,形成
/Engine/Modules/[引擎模块]+Game的完整结构;engine仓库无任何外部引用,所有依赖配置都在game侧维护。
方案二:稀疏检出+自动同步脚本
- 操作逻辑:利用SVN稀疏检出特性拆分仓库内容,配合脚本自动同步引擎新增目录
- 步骤:
- 本地创建
Engine根目录,稀疏检出engine仓库的/Engine/Modules至本地Engine/Modules(仅拉取目录结构:svn co --depth immediates [engine-url]/Engine/Modules Engine/Modules) - 完整检出game仓库的
/Engine/Modules/Game至本地Engine/Modules/Game - 编写脚本(如Shell/Python),定期执行
svn update --set-depth infinity Engine/Modules/*,自动拉取引擎新增的子目录
- 本地创建
- 优势:无需修改任何仓库的配置,引擎仓库完全独立;脚本自动化处理引擎新增目录,避免手动维护externals的繁琐;游戏元信息全部在game仓库中管理。
方案三:多仓库工作区映射
- 操作逻辑:让本地同一目录下的不同子目录关联不同SVN仓库,实现目录融合
- 步骤:
- 本地创建
Engine/Modules目录,执行svn checkout [engine-url]/Engine/Modules .关联engine仓库 - 在
Engine/Modules下创建Game目录,执行svn switch --relocate [engine-url]/Engine/Modules/Game [game-url]/Engine/Modules/Game,将该目录关联到game仓库 - 后续
Game目录的提交、更新操作都指向game仓库,其余目录操作指向engine仓库
- 本地创建
- 注意:需确保两个仓库的路径映射无冲突,游戏仓库的externals等元信息直接在
Game目录下配置即可,engine仓库完全无感知。
内容的提问来源于stack exchange,提问作者Jay Lemmon
相关产品推荐
相关产品推荐

