Gitに大容量ファイルをプッシュするときには”Git LFS”を利用しよう
はじめに
Git の利用目的として、「ソースコード」の配置だけでなく、「テストデータ」や画像や音声、動画といった「メディアファイル」の配置にも使われるようになってきている。
ところが、
Git は大容量のファイルをうまく処理できず、リポジトリがすぐに肥大化してしまう。
そこで登場したのが Git LFS という機能です。
今回は Git LFS のメリットや、
検証環境
"Git LFS" がない時
もともとソースコード用に最適化されていた。
テキストファイルですので、マージしたり、圧縮することで容量を劇的に小さくできます。
ところが、
大きなバイナリファイルを履歴管理したり、圧縮したりするととたんに非効率となり、速度も劣化しました。
特にバイナリファイルは圧縮率が低く(画像や動画はもともと圧縮済みということもあり)ほぼそのままのサイズで履歴保存されてしまいます。
10MB のファイルを 10 回コミットすれば履歴はあっという間に 100MB、100 回コミットすれば 1GB となってしまいます。
"Git LFS" がある時
この問題に対して、 "Git LFS" では大容量のファイル(主にバイナリファイルとなる)を Git の外部にあるストレージ ( LFS = Large File Storage )に保存するという方法を取ります。
バイナリファイルの実体(実ファイル)は外部ストレージに保存し、これに対する「参照(リンク)」だけを Git で履歴として保存、操作します。
Github では"Git LFS"を無料で利用できる
Github では巨大なファイルの取り扱いに制限を設けています。
プッシュしたファイルサイズにより以下のようなレスポンスを返却します。
- 50M 以上の場合、警告
- 100MB 以上の場合、ブロック
「Github には大容量のファイルをプッシュできない?」と思うかもしれませんが、これに対して回避策を用意してくれています。
それが "Git LFS" の利用です。
"Git LFS" が使えるように、Github では LFS 用の領域を提供しています。
無料アカウントの場合は 1GB まで利用できます。
不足した場合は有料購入する必要があります。(100MB のファイルで制限がかかることから、これを 10 ファイルもプッシュすると無料上限を突破してしまいます。)
Git LFS のインストール
お使いの環境ごとにインストール方法が異なります。
詳細は Installing を参照ください。
ここでは Mac のインストール方法だけを取り上げておきます。
Mac はインストールが楽ですね。
Debian では apt
でインストールする方法も提供されています。
検証用に Github リポジトリを作成
動作確認用に Github 上にパブリックなリポジトリを作成しました。
操作は長いですが、やっていることは genzouw/git-lfs-training
というパブリックリポジトリを作成し、README.md
をプッシュしているだけです。
このタイミングで LFS を利用できるようにインストール作業を実施します。
あとは通常通り、 README.md
を作成しコミット、プッシュします。
使い方
1. Git LFS を利用したいローカルリポジトリに移動
既に先程移動していると思いますが、移動していない場合には移動しておきます。
2. Git LFS で管理したいファイルを決め、設定する
Git LFS の管理対象とするファイルを指定します。
拡張子で指定するのがよいでしょう。
上記コマンドを実行した結果は、 .gitattributes
という設定ファイルに保存されます。
(直接エディタで編集しても構いません。)
.gitattributes
は Git の管理対象に含めておきましょう。
(注意)
今回はリポジトリを新規に作成していますが、 既にコミット+プッシュ済みの *.jpg
ファイルは LFS 上で管理されません。
この場合、 git lfs migrate
を使って LFS を利用する形に切り替える必要があります。
3. あとは *.jpg
ファイルをプッシュするだけ
設定はここまでになります。
あとは *.jpg
ファイルを何でも良いので配置し、プッシュしてみましょう。
Github 上で利用可能な LFS 領域にファイルが配置されるはずです。
ポイントは 100MB もの巨大なファイルをプッシュしたにもかかわらず、警告が表示されないという点です。
また、メッセージにも Uploading LFS objects と表示されています。
ちなみに LFS を使っていない場合には以下のような警告が表示されます。
「LFS 使ったほうが良いね!」と言われました。
"Git LFS" が使われているかどうやったら確認できる?
git lfs ls-files
というコマンドを実行することで、 "Git LFS" 領域を使ってファイルが管理されているかどうか確認することができます。
large.jpg は LFS に配置されていることがわかります。
Github の LFS の利用状況は、 Billing ページから確認することができます。
ひとこと
Git LFS は「Github」で提供されている領域だけではなく、「AWS S3」や「Google Cloud Storage」といったクラウドのオブジェクトストレージサービスを利用する事もできます。
ディスカッション
コメント一覧
まだ、コメントがありません