Skip to content

Git LFS

Loky edited this page Oct 14, 2026 · 2 revisions

Git LFS

Why

Textures, models and audio are large binaries that can't be diffed or merged, and every version stays in history forever. Git LFS keeps small pointers in Git and stores the files elsewhere. GitHub rejects files over 100 MiB without it, and applies storage and bandwidth quotas (Free: 10 GiB). Keep text files (.gd, .tscn, .tres) in regular Git.

Normal Push / Pull already handle LFS through git's own hooks. Uploads and downloads obey network_timeout_sec (default 120 s): raise it for large assets.

The Gitot LFS panel (bottom panel)

Needs git-lfs. Without it, or before git lfs install, a setup guide shows the one button that fixes the current state (Get Git LFS link or Install LFS, which runs the global git lfs install).

Dashboard (left):

  • State, Refresh
  • Download (git lfs pull): repairs missing or pointer-only files, never overwrites modified files
  • Prune (git lfs prune, with confirmation; unpushed objects are never removed)
  • Info toggles the bottom notes
  • Stats: sizes and counts on this computer / on GitHub, to upload, to download, missing, largest file. On GitHub is an estimate from origin's file list at your last fetch (there is no quota API).
  • Tracked patterns, with a Patterns menu of one-click presets: Textures, Art source, 3D, Audio, Video, Fonts, Godot binary.

Files (right): file, size and status:

Status Meaning
Local + Remote here and pushed
Local not pushed yet
Remote only a pointer here (use Download)
Missing not available

Rules

  • Godot text formats (gd gdshader gdshaderinc gdextension tscn tres import uid godot cfg) cannot be tracked: they must stay diffable and mergeable.
  • Catch-all patterns (*, **, *.*, /) are refused: they would put every file in LFS. Use an extension such as *.png.
  • Patterns are read from the root .gitattributes only. Commit it for rules to take effect.
  • Tracking only affects files committed after the rule exists. Use git lfs migrate from a terminal for existing blobs.

Large-File Guard vs LFS

LFS stores large binaries. The guard (large_file_mb, default 50) stops you staging a big file that nothing handles yet. A file is exempt only if LFS is ready and an LFS rule (without /) matches its file name (case-sensitive). Any doubt keeps the guard on. A flagged file has a Track with LFS button. Without LFS, the guard still protects the repo.

More: Troubleshooting

Clone this wiki locally