使用Git的子模块来编写框架如何处理meta文件

因为小游戏的开发有挺多代码是作为框架重复使用的,而且后续项目多了之后,如果框架有更新,一个一个项目手动更新的话感觉太麻烦了,Git 有子模块功能,想试着将框架抽象出来放到独立的仓库,用子模块的形式引入到开发项目中。

不过因为 Creator 对每个脚本都会生成 .meta 文件,请问下如果使用子模块的话,子模块仓库要提交 meta 文件吗,会不会同一个脚本在每个项目打开后,meta 的内容都不一样呢?

creatot只会重新生成没有meta文件的meta文件

这个我知道,我是想说如果在一个公共的框架仓库内提交了框架代码和 meta 文件,然后作为 git submodule 被多个游戏项目引入,这样会不会造成游戏项目内的 meta 文件出现 uuid 冲突,毕竟这多个游戏项目中框架代码部分的 meta 文件是一样的

应该不会跟新文件冲突。跟旧文件的meta可能冲突,但是概率应该极小。

meta文件 必须要提交到 submodule 中,否则会出现大问题,特别是可能会在CC编辑器中丢失文件

比如我 这样子 做是不合理的,因为没有 .meta 文件!

如果不提交meta,为什么会丢失文件呢?

假设存在 A、B两个项目引入这个 submodule, 因为你这个submodule没有 meta 文件,所以,A、B两个项目一导入这个 submodule 都会在 submodule 下生成 meta 文件。

所以,在你引入 submodule 的时候,submodule 的这个仓库就会有内容(meta)没提交,如果你在A项目提交了A项目产生的meta文件,那么B项目一更新这次submodule 的更新就会丢失很多内容了,因为 meta 是有A项目产生,只适用于A项目,在B项目中是没有对应的meta文件的,所以B项目就会出现很多丢失

回到本质,你想用 submodule 的理由在我看来,就是想一次提交、所有项目都能立即复用,拒绝Ctrl+C/V

那么在这个前提下,只要你的 submodule 一开始就有 meta ,其他项目用的都是相同的meta 就能避免这个问题

那么 meta 内容会一样吗?

  1. 不同游戏引擎版本,同一个资源的meta可能都会不一样
    • 视乎你的框架是支持同一个版本的引擎还是多个版本的引擎,这一点需要考虑
  2. 但是对于脚本类型的资源,应该差不多
  3. meta中的 uuid 会可能重叠吗,应该不会,不清楚cc 用的uuid 是 哪个版本的uuid ,不过uuid 本身就是有唯一性(即便是不同机器产生的uuid),除非特殊操作,一般都不会重叠

我是提交meta的。子项目要保证CC版本一致,一个升级了meta就全变了。uuid冲突概率很小,即使出现了对新内容重创就可以了。

感谢!明白了~

不过还有个问题,像你 CocosCreator-Utils 这个仓库中还有 READMECHANGELOG 以及 .gitignore 之类的文件,作为 submodule 引入游戏项目时,这些文件是否也会被 Creator 生成一个对应的 .meta 文件呢?

会的,所以会有点看着怪怪的感觉

哈哈哈确实,我在想要不就框架放在一个 xxx-core 的仓库,只放框架代码和 meta 文件,然后再创建一个 xxx-template 仓库用 submodule 的方式引入 xxx-core,附带 README 等文件,作为框架的说明和使用范例

感谢~版本一致这个我之前确实也没想到,得注意了哈~

这是一个好想法,我已经尝试过了

不过已经没维护了 ╮( ̄▽ ̄)╭

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。