In order to have a Git repository for a game development project, the repository must be properly set with Git LFS, otherwise Git is going to make full copies of binary files. With Git LFS you can also version control huge files (in the size of GBs).
But it can be tricky to understand the correct workflow to setup Git LFS, also it’s common to add LFS to a repository but incorrectly track binary files with the normal Git workflow instead of LFS (due to wrong setup order and incorrect
Before we move forward, understand that when I talk about “binary files” I mean “assets” (meshes, textures, sounds, etc.), anything that is not source-code. In the case of Unreal Engine, everything is an asset, including Blueprints (because BP files are binaries) – with the exception of C++ files, of course.
When using Git LFS, your commits will point to a lightweight reference object instead of pointing back to the binary file (you’re actually pushing the original binary file to an LFS repo).Save Time with Git LFS
If you still don’t have a Git repository set in your project folder, initialize the repository and install LFS.
git init git lfs install
Track the folders and subfolders that will contain binary assets. To track a parent folder and all of its children and subfolders recursively add two “**”:
# Unreal Engine: git lfs track "Content/**" # Godot (as long as you keep only binary files # inside the folder "Assets" and its subfolders. Adjust accordingly): git lfs track "Assets/**" # Unity: check the special section below in the article, grab # Unity's .gitattributes template instead of calling lfs track manually
If you are going to have source-code files in any of the sub-folders of your Assets/Content folder, then you have to manually call
git lfs track for each of the binary folders (ex:
Assets/Meshes/**) or binary file types (ex:
In this case, instead of doing this, which can be error prone, I recommend keeping source-code files in another root folder, away from the assets root folder. Check Tracking files with Git LFS for more options.
Project/ -- Content/ ---- Assets/ (track with LFS: git lfs track "Content/Assets/**") ---- Scripts/ (Non-LFS, normal Git)
Then before adding any other file, you must add and commit the
.gitattributes file (this is where it’s common to mess up):
git add .gitattributes git commit -m "LFS attributes"
Adding Binary Files and Tracking LFS Status
Add files normally, for example:
git add . or
git add Content/Specific/File.fbx.
Then you can track whether they are being treated as LFS or not with:
git lfs status
Files tracked as LFS will have their paths appended by
You can also list LFS files with:
git lfs ls-files
If a binary file does not appear in these lists, they are going to be incorrectly treated in the main Git workflow, not taking advantage of LFS.
Git GUI Clients and LFS
Special Unity Setup
Unity offers a special tool to merge scene and prefab files, “Smart Merge“.
Open your global
.gitconfig file or your project’s
.git file and add (see the docs to find out where
UnityYAMLMerge is located):
[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"