版本控制系统

前言

Godot 的目标是做到 VCS 友好,生成的文件大多可读、可合并。

版本控制插件

Godot 旨在对版本控制系统(Version Control System,VCS)友好,并尽量生成可读且可合并的文件。Godot 支持通过插件在编辑器本身中使用 VCS。可以在编辑器中的项目> 版本控制下设置或关闭 VCS。

截至 2025 年 10 月,尚且只有一个 Git 插件可用,但社区可能会创建其他的 VCS 插件。

官方 Git 插件

有一个官方插件可以让你在编辑器中使用 Git。你可以在GitHub找到最新的版本。

最新的更新、文档和源代码可以在Godot iOS插件库找到 Godot iOS plugins repository

从 VCS 中排除的文件

备注

这里列出了 Godot 4.1 及更高版本中应从版本控制中被忽略的文件和文件夹。

Godot 4.0 及更低版本中的版本控制应忽略的文件夹及文件列表与 Godot 4.1 及更高版本 ** 完全 ** 不同。 这点非常重要,因为 Godot 3.x 和 4.0 可能会将敏感凭据存储在 export_presets.cfg 中,而 Godot 4.1 及更高版本不会。

如果你正在使用 Godot 3,请查看本页说明文档的 3.6 版本。

当第一次在编辑器中打开项目时,Godot 会自动创建一些文件和文件夹。 为了避免生成的数据使版本控制仓库膨胀,你应该将它们添加到 VCS 忽略中:

  • .godot/:此文件夹存储各种项目缓存数据。

  • *.translation:这些文件是从 CSV 文件生成的导入后的的二进制翻译文件。

你可以选择在 Godot 项目管理器创建项目时自动生成版本控制元数据。当选择 Git 选项时,将在项目根目录中创建 .gitignore.gitattributes 文件:

在项目管理器的“新建项目”对话框中创建版本控制元数据

在项目管理器的新建项目对话框中创建版本控制元数据

在现有的项目中,选择编辑器顶部的 项目 菜单,然后选择 版本控制 > 生成版本控制元数据。这将与在项目管理器中执行的操作一样创建相同的文件。

在 Windows 上使用 Git

大多数 Git for Windows 客户端都将 core.autocrlf 设置为 true。可能会导致部分文件错误地被 Git 标记为已修改,因为这些文件的行尾被自动从 LF 转换成了 CRLF。

最好将此选项设置为:

git config --global core.autocrlf input

使用项目管理器或编辑器创建版本控制元数据时,会使用 .gitattributes 文件自动强制使用 LF 行尾,因此无需更改 Git 配置。

Git LFS

Git LFS(大文件存储)是 Git 的扩展工具,用于管理仓库中的大型文件。其工作原理是在 Git 内部将大文件替换为文本指针,将实际文件内容存储在远程服务器上。该方案能有效管理纹理、音频文件、3D 模型等大型资源,避免 Git 仓库体积膨胀。

备注

使用 Git LFS 时,请确保在提交文件到仓库前完成配置。若文件已提交至仓库,需先移除这些文件,完成 Git LFS 设置后重新添加。

你可以使用 git lfs migrate 命令转换仓库中的现有文件,但此操作较为复杂,需要对 Git 有深入理解。

一种常见的做法是新建一个启用了 Git LFS(并配置了正确的 .gitattributes 文件)的仓库,然后将旧仓库中的文件复制到新仓库中。这样可以确保所有文件从一开始就由 LFS 进行跟踪管理。

若要在 Godot 中使用 Git LFS,你需要安装 Git LFS 扩展并配置需要追踪的文件类型。你可以在终端中运行以下命令来完成配置:

git lfs install

这将在你的仓库中创建一个 .gitattributes 文件,用于告知 Git 对指定的文件类型使用 LFS。你可以通过修改 .gitattributes 文件来添加更多需跟踪的文件类型。例如,若要跟踪所有 GLB 文件,可在终端中运行以下命令:

git lfs track "*.glb"

当您添加或修改被 LFS 跟踪的文件时,Git 会自动将这些文件存储在 LFS 中,而非常规的 Git 历史记录中。您可以像操作普通 Git 文件一样推送和拉取 LFS 文件,但请注意,LFS 文件是独立于 Git 主历史记录存储的。这意味着,您在任何克隆该仓库的机器上,可能都需要安装 Git LFS,才能正常访问这些 LFS 文件。

以下是一个示例 .gitattributes 文件,可作为您配置 Git LFS 的起点。所选文件类型均为项目中常见的二进制文件,但您可以根据项目实际需求修改此列表,添加其他需要跟踪的二进制文件类型。

# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

# Git LFS Tracking (Assets)

# 3D Models
*.fbx filter=lfs diff=lfs merge=lfs -text
*.gltf filter=lfs diff=lfs merge=lfs -text
*.glb filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text

# Images
*.png filter=lfs diff=lfs merge=lfs -text
*.svg filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.webp filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.hdr filter=lfs diff=lfs merge=lfs -text
*.dds filter=lfs diff=lfs merge=lfs -text

# Audio
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text

# Font & Icon
*.ttf filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.ico filter=lfs diff=lfs merge=lfs -text

# Godot LFS Specific
*.scn filter=lfs diff=lfs merge=lfs -text
*.res filter=lfs diff=lfs merge=lfs -text
*.material filter=lfs diff=lfs merge=lfs -text
*.anim filter=lfs diff=lfs merge=lfs -text
*.mesh filter=lfs diff=lfs merge=lfs -text
*.lmbake filter=lfs diff=lfs merge=lfs -text

有关 Git LFS 的更多信息,请参阅官方文档: https://git-lfs.github.com/ 以及 https://docs.github.com/en/repositories/working-with-files/managing-large-files