大容量のファイルをそのままバージョン管理するのは効率が悪いので、ファイルのメタ情報のみバージョン管理し、実ファイルは一元管理されたストレージに保存されるため大規模なgitを扱う際に高速化が見込めます。
GitHubの場合、1ファイルのサイズが100MBを超えている場合はLFSを使わないとアップロードできない。
GitHub での大きいファイルについて - GitHub Docs
GitHubには、通常のGitリポジトリで追跡できるファイルのサイズに制限があります。制限を超えるファイルを追跡または削除する方法について説明します。
git lfs がインストールされているか
git lfs --version
インストール方法
インストールされていない場合以下のコマンドでインストールできる
MAC
brew install git-lfs
git lfs install
Windows
git lfs install
※すでにgitをインストールしていること
LFSを使ったリポジトリをクローン
最新のGitバージョンであれば、いつも通りCloneするだけで問題ない。
※ git lfs がインストールされていない環境でpullやcloneしてもエラーが出ない
LFSをインストールするまでにクローンしてしまった場合(LFSインストール後にPullする方法)
LFSをインストール後以下のコマンドを実行する
git lfs pull
このコマンドを実行することでLFS管理されているデータを取得できる
LFS設定ファイル
lfs管理下にするには事前に.gitattributeファイルに設定を追加すること
Unityの場合以下の設定が参考になる
LFSの状況を確認するコマンド
git lfs status
git lfs ls-files
プロジェクトの途中からLFSを導入する方法
すでにLFS化したいファイルがGitの追跡対象になっている場合の対処方法
以下のコマンドを実行する
git lfs migrate info
実行すると以下のような結果となる
$ git lfs migrate info
migrate: Fetching remote refs: ..., done.
migrate: Sorting commits: ..., done.
migrate: Examining commits: 100% (18/18), done.
*.png 2.6 GB 1991/1991 files 100%
*.asset 425 MB 4066/4066 files 100%
*.wav 63 MB 27/27 files 100%
*.ogg 63 MB 333/333 files 100%
*.jpg 48 MB 41/41 files 100%
LFS Objects 0 B 0/1 file 0%
上記結果をもとに lfs に置き換えていくコマンドを実行する
(上記の結果の場合だと以下のようにincludeを書き換えて使う)
git lfs migrate import --include="*.png,*.asset,*.wav,*.ogg,*.jpg"
最後に過去の履歴を書き換えているのでForce Pushをする必要があります。
git push --force
もしlfs化したアセットが数バイトのデータになっている場合、メタデータのままになっているので、
一度以下のコマンドを実行することで、正常なデータの状態になります
git lfs pull
参考
Git LFS 2.2.0 released
GitLFSv2.2.0isnowavailablewiththeall-newgit-lfs-migratecommand,makingiteasierthanevertostartusingGitLFSinyourrepository.Forexample,ifyou’vetriedto…