1. 为什么Cocos Creator项目需要一个像样的.gitignore
先交代一下背景。我是从Cocos Creator 1.x一路用到2.4.x的老用户,中间接手过不少团队项目,也帮人收拾过不少“git灾难现场”。最典型的场景就是:项目跑得好好的,一提交代码,仓库体积几百MB起步,同事拉下来直接卡死;或者协作时动不动就冲突,冲突文件还不是代码,而是library、temp里那些自动生成的临时json。这种时候,八成就是.gitignore没配好,或者压根没配。
Cocos Creator 2.4.13是官方2.x生命周期里比较稳定、也确实是不少上线项目在用的版本。它和3.x不一样,3.x的工程结构和资源管线改动很大,但2.4.x仍然是很多小团队、独立开发者和教学项目的首选。这个版本的工程生成目录里,library、temp、build、local这几个目录尤其容易让新手栽跟头。.gitignore说白了就是给Git立规矩,告诉它“哪些东西你不用管、不用追、不要提交”,把它写对,你的仓库就会很清爽,协作也能少掉一大半烦心事。
这篇博文就是围绕Cocos Creator 2.4.13项目的.gitignore文件内容展开,把每一行该写什么、为什么这么写、踩过哪些坑,一次性说透。不管你是刚用Git管理Cocos项目的新手,还是被仓库膨胀和冲突折磨过的老手,看完应该都能直接抄作业。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. .gitignore核心内容与逐行拆解
2.1 直接可用的.gitignore文件内容
下面这份是我基于Cocos Creator 2.4.13项目实际使用并调整过的.gitignore,不是网上随便抄的模板,每一条都有它存在的理由。你直接复制到项目根目录就能用:
gitignore复制# Library 资源导入后生成的缓存文件
/library
/temp
/local
# 构建输出目录
/build
# 原生工程相关(如果保留原生构建产物会很痛苦)
/native/engine
/native/template
# IDE/编辑器配置文件
/.idea
/.vscode
/*.code-workspace
*.iml
# 系统文件
.DS_Store
Thumbs.db
# 日志和临时文件
*.log
*.tmp
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# node_modules(如果项目里装了自定义插件)
/node_modules
# 用户本地设置
/profiles
/settings
# 自定义脚本编译产物
**/bin
**/obj
这里有个容易纠结的点,就是/settings和/profiles。Cocos Creator 2.4.x启动项目后,会在项目根目录生成一个settings目录,里面存的是编辑器布局、项目设置缓存等本地个性化配置,这些不该跟着仓库走。但是settings里有个project.json,涉及项目级别的配置,个别版本会把它放在这里。我的处理方式是只要settings和profiles整体忽略,确实需要共享的配置拿出来单独追踪,比如自定义构建模板、自定义插件的配置,可以单独放到assets下的工具目录里,避免混淆。
2.2 为什么这些目录必须忽略
逐个说明这些忽略项,不是走形式,是为了让新手理解“什么文件会造成问题”,这样以后遇到新目录也能自己做判断。
先看library目录,这是重灾区中的重灾区。Cocos Creator每次导入资源时,会在library目录下生成资源的导入信息、压缩后的纹理、meta文件的缓存索引等。这个目录的实际体积往往比你的assets还大几倍,而且里面的文件名通常是MD5,杂乱无章。你在编辑器里做的很多操作——比如调整资源的导入参数、重命名文件、重新导入——都会导致library里的内容变化。如果你把它提交到Git,每次改动资源都可能带来几十上百个文件的变更记录,协作时push和pull都会非常痛苦。更关键的是,library是可以在本机重新生成的:删掉后重开编辑器,引擎会自动重新导入,最多就是首次打开慢一点。所以它完全不应该进版本库。
temp目录是编辑器运行时产生的临时缓存,包含场景预览数据、脚本编译缓存等。它的变化频率非常高,尤其是你改了脚本后,编辑器会在后台触发编译和刷新,temp里的文件会不断被重写。如果你把temp提交上去,会发现Git状态永远不干净,总有文件在变,这对团队协作是灾难级的干扰。同样属于“可以本地再生”的目录,忽略它是理所当然的。
build目录是构建产物。Cocos Creator发布Web、微信小游戏、原生包时的输出都会集中在这里。构建产物动辄几十上百MB,而且还包含了各个平台的差异化代码和资源。如果把它提交进仓库,首先仓库会急剧膨胀,其次构建产物带有强烈的时间和环境信息,每次构建都会产生大量差异,根本没法做有意义的版本对比。正确做法是让每个开发者本地自行构建,产物不入库。
native/engine和native/template是2.4.x版本在生成原生工程时创建的目录。native/engine一般是你实际编译原生代码时生成的工程(Android Studio工程、Xcode工程),native/template则是引擎用的模板备份。原生构建产物体积巨大且强依赖本机环境和SDK版本,放进Git只会让仓库臃肿,还容易在团队协作时因为SDK版本差异引发无意义的冲突。需要共享的Android工程配置、Gradle脚本,应当在仓库外单独管理或通过构建流程生成,而不是直接提交整个原生目录。
2.3 为什么这些项目文件必须保留
说完了忽略的,还得反过来说说哪些不能忽略——Git仓库的“边界感”很重要。.gitignore写过了头,把该提交的也忽略了,后果同样严重。
首先是assets目录,这是游戏的全部资源和代码,必须完整追踪。场景文件(.scene)、预制体(.prefab)、脚本(.ts/.js)、动画(.anim)、图集配置等都在这里,删了或漏了任何一部分,项目都跑不起来。这里顺便提一句,Cocos Creator里的资源都配有对应的.meta文件,记录了资源的UUID、导入参数、类型等关键信息。assets下所有.meta文件必须提交,绝不能忽略,因为它们决定了资源在编辑器中的“身份”。如果你把.meta漏掉,别人拉下项目后资源会全部重新生成新的UUID,场景和代码里引用的旧UUID全部断链,那画面太美我不敢看。
还有package.json。如果你在项目里安装了扩展插件或依赖了npm包,这个文件记录了依赖清单,必须提交。至于package-lock.json或yarn.lock这类锁定文件,建议也提交,它能保证团队成员安装的依赖版本一致,避免“在我机器上是好的”这种经典问题。
再有就是项目的project.json(如果它不在被忽略的settings里)、启动场景配置、自定义构建插件代码等。简单记一条原则:凡是人工编写、且项目运行所必需的内容,全部入库;凡是自动生成、且可以本地再生的内容,一律忽略。
3. 落地实践:从零配置一个干净仓库
3.1 初始化与首次提交的正确姿势
配置.gitignore只是第一步,真正想达到“仓库干净”的目标,还要配合一套正确的提交流程。我带过几个项目,见过太多人一开始没配好,或者配了但没注意老文件,导致仓库里已经混进了一堆垃圾文件。这里我把一套实操步骤直接给出来。
假设你已经有一个Cocos Creator 2.4.13项目,项目根目录结构大致是assets、library、temp、build、package.json、project.json等。现在想在Git上托管,标准操作是:
第一步,先把上面的.gitignore内容写入项目根目录下的.gitignore文件。注意文件名前面这个点,别写成.gitignore.txt,Windows下尤其容易踩这个坑,后者会被当成普通文本文件,Git根本不认。可以在编辑器里直接新建文件,或者用命令行创建:
bash复制touch .gitignore
第二步,初始化Git仓库:
bash复制git init
git add .
git status
这里重点看git status的输出。如果你配置正确,它应该只显示assets、.gitignore、package.json等必要文件,library、temp、build这些目录不应该出现在列表里。如果它们还在,说明.gitignore没生效,或者文件放错了位置。
第三步,确认无误后做首次提交:
bash复制git commit -m "init project"
这里有个细节值得多说一句。首次提交之前,最好在Cocos Creator里完整打开过一次项目,并且确认项目能正常跑起来。因为你需要在提交之前确保assets目录下所有的.meta文件都已经生成完整。如果一个资源还没被编辑器扫描过,它就没有对应的.meta,别人拉仓库后这个文件会被当成新资源,自动生成一个新的UUID,原本引用它的地方就全断了。这个坑我在实际协作中踩过一次,当时是直接拷贝整个项目文件,没在编辑器里跑一遍就提交了,结果小组成员拉下来后一堆资源引用报错,排查了整整一个下午。
3.2 已提交垃圾文件的清理流程
上面说的是“从零开始”的干净场景。但如果你之前的仓库已经混入了library或temp的脏文件,光是写好.gitignore是不够的——Git的追踪记录里已经有这些文件了,新加的忽略规则不会自动把它们甩掉。这时候需要一套清污流程,我称之为“项目排毒”。
首选方案是用git rm -r --cached命令,把已经跟踪的文件从Git索引里移除,但保留本地文件:
bash复制# 从索引中移除 library、temp、build 等目录
git rm -r --cached library
git rm -r --cached temp
git rm -r --cached build
git rm -r --cached local
git rm -r --cached native
# 再提交一次,即可完成清理
git commit -m "chore: remove generated directories from tracking"
执行过程中要注意两点。
第一,--cached这个参数务必加上,它表示只删除暂存区里的跟踪记录,不碰本地磁盘上的文件。如果不小心漏了它,Git会直接把你本地的library目录整个删掉,虽然这些文件是缓存、可以再生成,但重新导入一次也要花不少时间,没必要给自己添堵。
第二,清理之后,这些目录在后续的git status里就不会再出现了,因为.gitignore已经把它们的变更都过滤掉了。但如果团队成员还没有拉取你的清理提交,他们本地的Git索引里仍然有这些目录的跟踪记录,这时候他们那边改代码提交时,可能会看到大量与library有关的变更。这个同步问题没法完全避免,只能靠大家及时合并最新代码来解决。我在团队里一般建议:如果仓库此前已经“脏”了很久,最好约定一个时间点,所有人都先拉取清理提交,再各自用git rm -r --cached做一次本地同步,这样能最大程度减少混乱。
清理完之后,仓库的体积会肉眼可见地减下来,提交记录也会变得干净很多。这一步做完,你的项目才算真正进入了“健康”的Git管理状态。
4. 常见问题排查与扩展技巧
4.1 常见问题速查表
做技术分享不能只给答案,还得把那些容易翻车的点都摆出来。我在论坛和群里见过很多Cocos Creator + Git的问题,这里整理成一张速查表,每条都是真实踩过的坑。
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
| 编辑器打开项目后发现大量文件被删除 | 误删了assets下.meta文件或整个assets目录 |
检查.gitignore是否误把assets也忽略,或git rm时漏了--cached参数 |
| 同事拉代码后场景/预制体引用全部失效 | .meta文件未提交,或本地删了.meta导致重新生成新UUID |
确保所有.meta入库;误删后用Git恢复并重新打开编辑器 |
| 仓库体积超过几百MB,clone极慢 | 历史提交中混入library或build文件 |
清理当前索引后,若需彻底瘦身还需重写历史(git filter-branch或git filter-repo),但操作有风险,建议优先保证后续提交干净 |
git status永远显示很多文件在变 |
提交了temp或library目录,文件频繁变动 |
用git rm -r --cached移除这些目录,并确认.gitignore生效 |
| push时提示“文件过大” | 某个构建产物或大图集超过平台限制 | 检查是否提交了build目录;大文件单独用LFS管理,或从仓库中移除 |
| 团队里有人用Windows,有人用macOS,仓库出现一堆没用文件 | 系统生成文件(.DS_Store、Thumbs.db)被提交 |
在.gitignore中补上系统文件忽略规则,并清理已入库的系统文件 |
这套表格来自真实场景,看着简单,但每一条背后都对应过至少一个深夜排查的悲剧。尤其是.meta文件那个问题,我必须再强调一遍:它极其隐蔽。因为编辑器在你操作时并不会弹窗提醒“你的meta已经变了”,项目可能看起来一切正常,但一旦大家同时拉取合并,问题就会像连环雷一样炸开。所以从第一天起就把.meta当作代码文件一样对待,提交时仔细核对。
4.2 不修改.gitignore的情况下单独屏蔽文件
讲完了.gitignore,再说一个经常被问到的场景:项目里某个文件夹或文件无法在.gitignore中忽略,因为它是别的成员或构建流程必须的,但我本地又不想看到它的变更。这种需求有一个专门的“黑科技”文件,叫.git/info/exclude,它的语法和.gitignore完全一致,一样是忽略规则,但只对当前仓库当前本地生效,不会提交到远端,也不会影响其他成员。
比如,build目录是团队约定的共享目录,不能从仓库移除,但我本地有时会跑一些测试构建,它的内容频繁变化,我不想每次git status都被它刷屏。这时可以编辑.git/info/exclude,加上一行:
bash复制# 在 .git/info/exclude 中添加
/build
这样Git就会忽略本地对build目录的跟踪,但其他成员和远程仓库完全不受影响。很多老手都不知道有这样一个“私人的.gitignore”,它的适用场景其实不少,尤其是当你需要处理“别人规定的规则里没有覆盖,但你自己确实需要排除”的本地特殊情况时。不过还是要提醒一句:用exclude忽略文件要谨慎,它只在你的本地生效,很容易让“你本地的代码表现”和“远端仓库状态”产生不一致,最后说不清楚。所以我建议它只用来处理纯本地生成的临时文件或缓存文件,不要拿它忽略核心配置。
4.3 结合AI辅助开发与后续扩展
话题聊开了,我再延伸一下。现在AI辅助开发已经非常普遍,很多Cocos Creator开发者会借助大模型工具生成游戏逻辑代码、UI交互脚本甚至资源命名规范。我自己也常用AI来提速——比如让AI生成一个类名统一、结构清晰的怪物管理脚本,或者搭建一套框架级的对象池工具。这时候你的项目里就会多出一些由AI编写的代码,它们同样要经过严格的Git审查流程,要求反而更高了,因为AI生成的代码可能存在资源引用疏漏、命名风格不一致、API版本不匹配等隐患,入库前应当逐行review。
AI辅助还有一个实用场景,就是生成或校验.gitignore。拿这份2.4.13的忽略规则来说,你可以把它丢给AI问一句“这份配置有什么遗漏?”我试过多次,得到的补充建议大概率会包含node_modules、*.log、IDE配置等,说明模型对这类通用规则的理解是够用的。但项目特有的目录(比如Cocos自定义产物目录、原生构建目录、特殊的工具链输出),最好还是靠项目成员的实际经验来补全,AI只能作为辅助,不能完全替代人的判断。
说到后续扩展,如果你的项目用了LFS(Git Large File Storage)——特别是放置了大量高分辨率图集、音效、模型文件时——可以考虑对assets下的二进制资源单独配置LFS追踪。.gitignore管的是“要不要提交”,LFS管的是“提交的大文件怎么存”,两者是互补关系。团队项目里如果频繁改动大资源,我推荐尽早引入LFS,但注意LFS有配额和费用,小团队要评估成本。另外一个方向是搭建CI/CD流程,用自动化的脚本在提交后触发Cocos Creator命令行构建,build产物交给流水线生成,不在仓库里保留,这样可以进一步压缩仓库体积。
5. 写在最后的经验
这份.gitignore在Cocos Creator 2.4.13项目上实测过,也在多个2.4.x小版本上验证过,基本可以直接套用。但我更希望你把它当作一个起点,而不是终点——项目每多一种产物类型、每多一个工具链,.gitignore都可能需要调整,团队协作的规范也就是这样一点一滴沉淀出来的。
我个人在实际操作中的体会是,Git仓库的“卫生”比很多人想象得更重要。一个干净的仓库不仅能让你push/pull时心情愉快,还能在项目迭代到中后期、需要回溯问题时给你极大的便利。如果你现在正被Cocos项目的Git问题困扰,不妨花点时间把.gitignore一次性配好,这个投入回报率非常高。最后再分享一个小技巧:每次改动项目工程结构时,顺手git status看一眼有没有不该入库的新目录冒出来,把这个习惯刻进肌肉记忆,很多麻烦都能在萌芽期就被掐掉。
