2021.06.18

Git LFS チートシート

大きめのファイルを git で管理したいとき git-lfs を導入すると思うけど、設定忘れることあるのでメモ

まず

~ Git LFS は、リポジトリに実際のファイルではなく、ファイルへの参照を保存することで大きなファイルを扱います。 Git のアーキテクチャを回避するために、Git LFS は実際のファイル(これはどこか別の場所に保存されます)への参照として働くポインタファイルを作成します。 GitHub はこのポインタファイルをリポジトリ中で管理します。 リポジトリをクローンすると、GitHub はこのポインタファイルを大きなファイルを見つけるための地図として使います。 引用 : Git Large File Storage について ~

リポジトリ共有するときに

git-lfs で管理しているリポジトリを誰かと共有するときは、 共有する相手が git-lfs 入れているかをまず確認する。 確認しないでコミットされちゃったりするとあとで変更が面倒。


導入

mac

brew install git-lfs

linux https://packagecloud.io/github/git-lfs/install

リポジトリに lfs を導入するとき。最初

git lfs install

Git LFS を使用したリポジトリのクローン

git lfs clone <gitリポジトリ>

拡張子を管理対象にしたいとき

.psd を管理対象にしたいとき

git lfs track "*.psd"

管理対象のファイルの一覧を確認

git lfs ls-files

管理対象がどれか確認したいとき

git lfs track

大きめのファイルを検索したいとき

find . -size +100M -ls

unity プロジェクトの.gitattrigutes の例

.gitattributes
*.cs diff=csharp text
*.cginc text
*.shader text
*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf

*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.tiff filter=lfs diff=lfs merge=lfs -text
*.bmp filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text

*.ttf filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text

*.wav filter=lfs diff=lfs merge=lfs -text
*.aiff filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.avi filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text

*.dll filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.unitypackage filter=lfs diff=lfs merge=lfs -text

エラー出たりしたとき

Encountered 1 file(s) that should have been pointers, but weren't:
git update-index --assume-unchanged -- 対象のファイル
# 量が多いとき
git status -s | cut -c 4- | xargs git update-index --assume-unchanged

git-lfs 対象なのにポインタになっていないファイルがあるのが原因。まとめて lfs にするとき。

rm .git/index && git reset
git add .
git commit

References