より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Git LFSの導入(in Azure Pipeline)

Git LFSとは、Gitが大きなファイルを扱うのに向いていないとために開発された拡張機能です。

LFSはLarge File Storageの略です。

外部ライブラリのdllをそのままGit管理していたりするのでGitLFSを導入することにしました。

導入

www.atlassian.com

SourceTreeでは、右上のターミナルボタンよりターミナルを表示させ、

git lfs install

と実施します。

f:id:rimever:20190813080614p:plain

あとは、git lfs track *.(拡張子)

とすると、拡張子のファイルがgit lfsで管理されるようになります。

もしくは.gitattributeにて以下のような記述をします。

*.png filter=lfs diff=lfs merge=lfs -text

また、自分のリポジトリを置いているサイトがGitLFSに対応しているかも確認する必要があります。

GitHubは1GBまでなら可能。BitBucketも対応しています。

AzureDevOpsも対応してますね。

docs.microsoft.com

途中からGitLFSを導入するとどうなる

基本的に例とか見ていると、新しいリポジトリを生成して、GitLFSを適用しています。

ただ、既存のリポジトリに途中に導入した場合です。

  1. 既存のリポジトリにGitLFSを導入
  2. "git lfs track "*.png"をする
  3. すでにコミットされているpngファイルは?

これについては、既存のファイルについてもGitLFSは適用されるようです。

改めてコミットし直しが発生しました。

各ブランチや各タグにも波及させるなら、下記のサイトが参考になるかもしれないです。

過去のコミットでgit LFSを使うように歴史改変をする - 簡潔なQ

ご利用は計画的に

GitLFSを逆にやめたいときはどうす流のでしょう。

git lfs uninstall

ですが、それだけではダメで、これまでコミットされ、GitLFSで管理されているファイルを削除して綺麗にする必要があるようです。

help.github.com

これはかなり面倒ですね。

Azure PipelineにもLFS

当然ですが、同様のgit lfs installをリポジトリを利用するクライアントに導入するという制約があります。

そうしないと、以下のようなテキストファイルが生成されるだけとなります

version https://git-lfs.github.com/spec/v1
oid sha256:c12d583dd1b5447ac905a334262e02718f641fca3877d0b6117fe44674072a
size 3824

そしてビルドに失敗してしまうと。

f:id:rimever:20190813123024p:plain
うわっち!

ビルド側にも対応が必要です。

Azure Pipelineではyamlに以下のような記述を追加します。

steps:
- checkout: self  # self represents the repo where the initial Pipelines YAML file was found
  lfs: true

docs.microsoft.com

GitLFSが原因でSource Treeがおかしくなった?

職場で発生したのですが、GitLFS.exeのパスがおかしくなったために、コミットの破棄もブランチも切りかえも出来ず、にっちもさっちもいかなくなったことがありました。

そのときは、SourceTreeをアップデートし直したりして修正しました。

f:id:rimever:20190813150830p:plain
オプションボタンからGitのバージョンは確認出来る。