Unreal Engineのプロジェクトをgit-lfsで管理してみた
はじめに
普段のアプリ開発ではgitでバージョン管理をすることがほとんどだと思います。
ただ、gitはテキストファイルに特化しているので、バイナリファイルの管理には向いていません。
ゲーム開発では、テクスチャやモデル、音声ファイルなど大きなバイナリファイルが大量に発生するため、そのままgitで管理するとリポジトリが膨れ上がってしまいます。
バイナリファイルのバージョン管理にはPerforceやGit LFSがよく使われていますが、今回はGit LFSを使って、UE5のテンプレートプロジェクトをバージョン管理するセットアップ手順を紹介します。
検証環境
- MacOS Sequoia 15.7.1
- Unreal Engine 5.7.3
- git version 2.50.1
- git-lfs/3.7.1
- 事前に作成したUE5テンプレートプロジェクト(Top Down)
手順
.gitignore と .gitattributes をダウンロード
UE5プロジェクト用の .gitignore と .gitattributes のテンプレートがすでに公開されているので、そちらを利用します。
ダウンロードしたファイルをUE5プロジェクトのルートディレクトリに配置します。
念のため、それぞれの中身も貼り付けておきます。
.gitignore
全ファイルをまずignoreしてから、必要なものだけを許可するホワイトリスト方式の書き方になっています。
# Ignore all files by default, but scan all directories.
*
!*/
# Do not ignore git files in the root of the repo.
!/.git*
# Do not ignore current project's `.uproject`.
!/*.uproject
# Do not ignore source, config and plugins dirs.
!/Source/**
!/Config/**
!/Plugins/**
# Only allow .uasset and .umap files from /Content dir.
# They're tracked by git-lfs, don't forget to track other
# files if adding them here.
!/Content/**/*.uasset
!/Content/**/*.umap
# Allow any files from /RawContent dir.
# Any file in /RawContent dir will be managed by git lfs.
!/RawContent/**/*
# OS/platform generated files.
# Windows
ehthumbs.db
Thumbs.db
# Mac OS X
.DS_Store
.DS_Store?
.AppleDouble
.LSOverride
._*
# Linux
*~
.directory
# vim
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
# Visual Studio
.vs
.gitattributes
Git LFS の公式サイトより:
Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.
このファイルでlfsとマークされたファイルタイプは、git本体ではなくGit LFSのストレージに保存されます。git上にはそれらを指すポインターだけが管理される仕組みです(利用する側は特に意識する必要はありません)。
# Unreal Engine file types.
*.uasset filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
# Raw Content file types.
*.3ds filter=lfs diff=lfs merge=lfs -text
*.bmp filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.xcf filter=lfs diff=lfs merge=lfs -text
# Anything in `/RawContent` dir.
/RawContent/**/* filter=lfs diff=lfs merge=lfs -text
プロジェクトを初期化
以下のコマンドでプロジェクトをgit / Git LFSで初期化し、リモートリポジトリにpushします。
# git初期化
git init
# Git LFS初期化
git lfs install
# 全ファイルをステージング(.gitignoreで除外されるもの以外)
git add .
# コミット
git commit -m "top down ue project template"
# リモートリポジトリを追加
git remote add origin git@github.com:your-org/your-repo.git
# mainブランチにpush
git push -u origin main
結果
バイナリファイルをコミットでき、Github上の Git LFSで管理されることを確認できました。


おわりに
これでUE5プロジェクトをgitとGit LFSでバージョン管理できるようになりました。
一点注意として、GitHubやGitLabにはGit LFSのストレージと帯域に利用上限があります。上限を超えると追加課金しない限りデータをアップロードできなくなるので、プロジェクトの規模に応じて事前に確認しておくことをおすすめします。








