跨多Unity项目使用git子模块复用核心代码时如何单独跟踪各项目.meta文件
可行实现方案
首先明确核心原理:git子模块是独立的git仓库,父项目默认仅跟踪子模块的commit指针,不处理子模块内部的文件版本,且子模块内的.gitignore规则仅作用于子模块自身的版本管理,不影响父项目规则。
下面给出两种可落地的方案:
方案1:改用git subtree管理核心库(推荐,操作最顺畅)
git subtree会将核心库的代码直接作为父项目的普通目录纳入版本管理,完美适配你的需求:
- 核心库自身的远程仓库依然保留
**/*.meta的忽略规则,不会提交通用.meta文件 - 各个游戏项目可以正常跟踪
Assets/Scripts/Core/目录下所有生成的.meta文件,和项目其他普通资源的跟踪逻辑完全一致 - 依然可以正常向核心库远程仓库提交/拉取通用代码更新,不会把各项目的.meta文件提交到核心库
操作步骤:
- 移除现有git submodule配置:
git submodule deinit -f Assets/Scripts/Core rm -rf .git/modules/Assets/Scripts/Core git rm -f Assets/Scripts/Core - 用subtree添加核心库:
git subtree add --prefix=Assets/Scripts/Core [核心库远程地址] [分支名] --squash - 后续拉取核心库更新命令:
git subtree pull --prefix=Assets/Scripts/Core [核心库远程地址] [分支名] --squash - 向核心库提交通用代码更新命令:
git subtree push --prefix=Assets/Scripts/Core [核心库远程地址] [分支名]
方案2:保留git submodule,用脚本同步.meta文件
如果不想改动现有submodule架构,可以用本地脚本+git钩子实现.meta的单独跟踪:
- 在各个游戏项目的Assets目录下新建
CoreMeta专属目录,用于存储当前项目核心库的.meta文件,这个目录会被父项目正常跟踪 - 编写两个简单脚本:
- 备份脚本:遍历
Assets/Scripts/Core/下所有.meta文件,保持目录结构同步复制到CoreMeta目录 - 还原脚本:遍历
CoreMeta目录下所有.meta文件,同步复制回Assets/Scripts/Core/对应位置
- 备份脚本:遍历
- 给项目配置git钩子:
- 在
post-checkout、post-merge、submodule update的钩子中触发还原脚本,每次切换分支、更新子模块后自动还原对应.meta文件 - 可以配置pre-commit钩子自动触发备份脚本,提交前自动更新备份的.meta文件
这种方案完全不改动现有核心库和submodule配置,缺点是需要额外维护脚本和钩子配置。
- 在
内容的提问来源于stack exchange,提问作者Spencer Pollock
相关产品推荐
相关产品推荐

