Git/github/大きなファイル
提供: 初心者エンジニアの簡易メモ
目次
git lfsとは
大きいファイルをgitで管理する機能 brew install git-lfs
git lfsインストール
macの場合
$ brew install git-lfs $ git lfs version > git-lfs/2.13.3 (GitHub; darwin amd64; go 1.16.5)
参考:https://qiita.com/ikmski/items/5cc8b8832336b8d85429
linuxの場合
$ sudo yum install git-lfs > git lfs version > git-lfs/2.10.0 (GitHub; linux amd64; go 1.17.12)
gitリポジトリにlfs機能を追加
lfsを初めて使うリポジトリで必須
$ git lfs install
lfs対象ファイルを追加
pngの場合は
git lfs track "*.png"
以下.gitattributesが追加される
cat .gitattributes *.png filter=lfs diff=lfs merge=lfs -text
追加してコミット
git add test.png git commit -m "add image"
100MB以上のファイルをpushしたときのエラー対応方法
remote: error: GH001: Large files detected. You may want to try Git Large File Storage
Git LFS のインストール(macであれば)
brew install git-lfs
既にコミット済みの場合は、git履歴を消しておく
$ git filter-repo --force --invert-paths --path hogehoge/Libraries/libil2cpp.a $ git filter-repo --force --invert-paths --path "Assets/TypingSystem/Fonts/NotoSansJP-Regular SDF.asset"
.gitattributesに100MB超えのファイルを追加(例:hogehoge/Libraries/libil2cpp.a、スペース有りのファイル)
$ git lfs track hogehoge/Libraries/libil2cpp.a $ git lfs track "Assets/TypingSystem/Fonts/NotoSansJP-Regular SDF.asset" #スペース有りのファイルは"で囲む $ cat .gitattributes # 確認 hogehoge/Libraries/libil2cpp.a filter=lfs diff=lfs merge=lfs -text
(例:Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_6_0.bundleで、拡張子指定だけの場合)
Assets/Firebase/Plugins/x86_64/*.bundle filter=lfs diff=lfs merge=lfs -text
ファイルをaddしpushする
git add .gitattributes git push origin master
対象ファイルを `git log` してgitattributes登録前にファイルをcommitしている箇所があれば失敗するので、以下のようなロールバックですべて戻す必要がある
git reset --soft HEAD^
参考:https://qiita.com/kanaya/items/ad52f25da32cb5aa19e6
lfsが登録できない場合
以下ls-filesが表示されないときは、lfsに登録されてない
git lfs ls-files git lfs ls-files --size # サイズ表示したい場合はこちら git lfs ls-files --all # 登録したファイル履歴も全部を出したい
すべてのgit履歴をスキャンし、該当ファイルを LFS に移行
git lfs migrate import --include="Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.bundle"
上記追加してもls-filesに表示されない場合は、以下を実行してるか確認。
git lfs install
lfs登録でファイルサイズがおかしくなってシステムが動かなくなったとき
# サイズ確認 $ ls -lh Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.bundle 134B Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.bundle # ポインタから、ファイル実体化 $ git lfs checkout Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.bundle
失敗する場合は、 git lfs install が入ってるか確認。
不要なlfsファイルを消す
# 現状ファイル確認 git lfs ls-files --all # ファイル削除 git filter-repo --force --invert-paths --path "data.tar.gz" # LFSクリーンアップ git lfs prune # 強制プッシュ git push origin --force --all
現在使用されてるlfsファイルの確認
- がついてるものが、現在使用されてるもの
$ git lfs ls-files --all --size a3c8ab3999 * Assets/App/Fonts/NotoSansJP-Regular SDF.asset (10 MB) 538c67ab44 * Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.bundle (163 MB) 1a525309ec * docs/thumbnail.key (66 MB) d7171aa817 * Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_8_0.so (92 MB) 85a3c6fa36 - Assets/App/Fonts/NotoSansJP-Regular SDF.asset (10 MB) 83b3e3c35c - Assets/App/Fonts/NotoSansJP-Regular SDF.asset (10 MB) 44776d35a9 - docs/thumbnail.key (66 MB) 0cceab3263 - Assets/App/Fonts/NotoSansJP-Regular SDF.asset (37 MB)
未使用のlfsファイルを削除
# 未使用ファイル - の確認 git lfs ls-files --all --size 9a43e2443a - docs/thumbnail.key (85 MB) 0db4c48f6c - docs/thumbnail.key (83 MB) # 未使用のlfsファイルを削除 git filter-repo \ --blob-callback ' if b"9a43e2443a" in blob.data: blob.skip() ' \ --force # 未使用ファイル - がなくなってることの確認 git lfs ls-files --all --size 0db4c48f6c - docs/thumbnail.key (83 MB)
複数削除したい場合
git filter-repo \ --blob-callback ' if b"9a43e2443a" in blob.data: blob.skip() if b"0db4c48f6c" in blob.data: blob.skip() ' \ --force