Git LFSとは、Gitが大きなファイルを扱うのに向いていないとために開発された拡張機能です。
LFSはLarge File Storageの略です。
外部ライブラリのdllをそのままGit管理していたりするのでGitLFSを導入することにしました。
導入
SourceTreeでは、右上のターミナルボタンよりターミナルを表示させ、
git lfs install
と実施します。
あとは、git lfs track *.(拡張子)
とすると、拡張子のファイルがgit lfsで管理されるようになります。
もしくは.gitattributeにて以下のような記述をします。
*.png filter=lfs diff=lfs merge=lfs -text
また、自分のリポジトリを置いているサイトがGitLFSに対応しているかも確認する必要があります。
GitHubは1GBまでなら可能。BitBucketも対応しています。
AzureDevOpsも対応してますね。
途中からGitLFSを導入するとどうなる
基本的に例とか見ていると、新しいリポジトリを生成して、GitLFSを適用しています。
ただ、既存のリポジトリに途中に導入した場合です。
これについては、既存のファイルについてもGitLFSは適用されるようです。
改めてコミットし直しが発生しました。
各ブランチや各タグにも波及させるなら、下記のサイトが参考になるかもしれないです。
過去のコミットでgit LFSを使うように歴史改変をする - 簡潔なQ
ご利用は計画的に
GitLFSを逆にやめたいときはどうす流のでしょう。
git lfs uninstall
ですが、それだけではダメで、これまでコミットされ、GitLFSで管理されているファイルを削除して綺麗にする必要があるようです。
これはかなり面倒ですね。
Azure PipelineにもLFSを
当然ですが、同様のgit lfs installをリポジトリを利用するクライアントに導入するという制約があります。
そうしないと、以下のようなテキストファイルが生成されるだけとなります
version https://git-lfs.github.com/spec/v1 oid sha256:c12d583dd1b5447ac905a334262e02718f641fca3877d0b6117fe44674072a size 3824
そしてビルドに失敗してしまうと。
ビルド側にも対応が必要です。
Azure Pipelineではyamlに以下のような記述を追加します。
steps: - checkout: self # self represents the repo where the initial Pipelines YAML file was found lfs: true
GitLFSが原因でSource Treeがおかしくなった?
職場で発生したのですが、GitLFS.exeのパスがおかしくなったために、コミットの破棄もブランチも切りかえも出来ず、にっちもさっちもいかなくなったことがありました。
そのときは、SourceTreeをアップデートし直したりして修正しました。