版本控制系統

前言

Godot 的目標是做到 VCS 友好,生成的檔大多可讀、可合併。

版本控制系統

Godot 旨在對 VCS 友善並儘量產生高可讀性與可合併的檔案。Godot 也支援在編輯器中使用版本控制系統。但在編輯器中使用版本控制系統需要安裝對應的外掛。可於 [專案] > [版本控制] 中設定或關閉版本控制系統。

截至 2023 年 7 月,尚且只有一個 Git 外掛程式可用,但社群可能會建立其他的版本控制 (VCS) 外掛程式。

官方 Git 外掛

可以使用官方外掛來在編輯器中使用 Git。可於 此處 取得最新版本 (該外掛不在素材庫中)。關於如何使用 Git 外掛的說明文件可參考 此處 (英文)

有關 Git 外掛的使用說明,可參閱其 Wiki

在版本控制系統中忽略的檔案

備註

這裡列出了 Godot 4.1 及更高版本中應從版本控制中被忽略的檔和資料夾。

Godot 3.x 和 Godot 4.0 中的版本控制應忽略的資料夾檔列表 ** 完全 ** 不同。 這點非常重要,因為 Godot 3.x 和 4.0 可能會將敏感憑據儲存在 export_presets.cfg 中(這與 Godot 4.1 及更高版本不同)。

如果你正在使用 Godot 3,請查看本頁說明文件的 3.5 版本。

當第一次在編輯器中打開專案時,Godot 會自動建立一些檔和資料夾。 為了避免生成的資料使版本控制倉庫膨脹,你應該將它們新增到 VCS 忽略中:

  • . godot/:此資料夾儲存各種專案快取資料。

  • *.translation:這些是從 CSV 檔產生的二進位匯入 翻譯 檔案。

你可以選擇在 Godot 專案管理器建立專案時自動生成版本控制中繼資料。當選擇 Git 選項時,將在專案根目錄中建立 .gitignore.gitattributes 檔案:

在專案管理器的“新建專案”對話方塊中建立版本控制中繼資料

在專案管理器的 新建專案 對話方塊中建立版本控制中繼資料

在現有的專案中,選擇編輯器頂部的 專案 功能表,然後選擇 版本控制 > 生成版本控制中繼資料。這將與在專案管理器中執行的操作一樣建立相同的檔。

在 Windows 上使用 Git

大多數 Windows 上的 Git 用戶端預設會設定 core.autocrlftrue,這會造成 Git 自動將行尾從 LF 轉換為 CRLF,導致檔案被不必要地標記為已修改。

最好將此選項設定為:

git config --global core.autocrlf input

使用專案管理器或編輯器建立版本控制中繼資料時,會使用 .gitattributes 檔自動強制使用 LF 行尾,因此無需更改 Git 配置。

Git LFS

Git LFS(Large File Storage)是 Git 的一個擴充功能,能讓你在版本庫中管理大型檔案。它會在 Git 中以文字指標取代大型檔案本體,並將檔案內容儲存在遠端伺服器上。這有助於管理大型素材,例如貼圖、音訊檔與 3D 模型,同時避免讓 Git 倉庫膨脹。

備註

使用 Git LFS 時,請務必在提交任何檔案到版本庫之前就先完成設定。若你已經提交過檔案,則需要在設定好 Git LFS 之後,將這些檔案自版本庫中移除,並重新加入。

你也可以使用 git lfs migrate 來轉換版本庫中既有的檔案,但這較為進階,並需要對 Git 有充分理解。

常見做法是建立一個啟用 Git LFS(並配置正確 .gitattributes)的新版本庫,然後把舊版本庫的檔案複製到新庫。這樣可以確保一開始所有檔案就由 LFS 追蹤。

要在 Godot 專案中使用 Git LFS,你需要安裝 Git LFS 擴充,並設定要由 LFS 追蹤的檔案類型。可在終端機執行以下指令:

git lfs install

這會在你的版本庫建立 .gitattributes 檔案,告訴 Git 對指定類型使用 LFS。你可以修改 .gitattributes 來加入更多檔案類型。例如,若要追蹤所有 GLB 檔案,可在終端機執行以下指令:

git lfs track "*.glb"

當你新增或修改由 LFS 追蹤的檔案時,Git 會自動將它們存放在 LFS,而不是一般的 Git 歷史中。你可以像一般檔案一樣推送與抓取 LFS 檔案,但請注意 LFS 檔案與其餘 Git 歷史分開儲存。這表示你在任何複製此版本庫的電腦上,都可能需要安裝 Git 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