サイズの大きいバイナリファイルを扱うための Git LFS 導入

大規模プロジェクトで画像がめちゃくちゃ多い時など、これまでは Git リポジトリが大きくなりすぎてしまうことから画像だけ Git 管理を諦めて Dropbox などで別途共有していました。

Git LFS の発表があった後、実際にいつから使えそうかなとチェックしてましたが 10 月 2 日に全ての GitHub で利用可能になったとのアナウンスがありました( Git Large File Storage v1.0 )ので、早速試してみました。

Git LFS とは

Git Large File Storage

Git LFS はオープンソースの Git エクステンションです。バイナリファイルは Git 管理に向いていませんが、Git LFS はそれを解決できます。

Git LFS は、リモートサーバーに指定したファイル(バイナリファイル)を格納して、Git リポジトリではテキスト・ポインタとしておくので Git リポジトリが重くて困る、ということが起きないというもの。

Git LFS で管理するファイルはコミットした際、次のようになります。(画像が丸ごとアップされるわけではなく、テキストでリポジトリには記録されてます。)

st02

バイナリファイルを Git 管理したときのメリット

色々メリットはあるかなと思うのですが、個人的には次の 2 つが大きいです。

  • Git からデプロイすることで、テストサーバーや本番サーバーへアップできる
    (FTP などで差分を手動アップする必要がない)
  • バイナリファイルも履歴を追ったり差分を見たりできるようになる
  • どういった作業でどういった画像が追加されたのかの確認も容易

使うには Git と Git LFS のインストールが必要。導入は Windows と Mac それぞれ書きます。

導入 – Windows

1. Git をダウンロードして、インストールする

https://git-scm.com/

インストーラーでインストールします。コマンドプロンプトからも使えるようにしたいので、途中「Use Git from the Windows Command Prompt」をチェック。

git-install01

git-install02

git-install03

git-install04

git-install05

git-install06

git-install07

git-install08

git-install09

2. パソコン再起動&Git インストール確認

Git 入れた後はパソコンを再起動します。再起動しないとパスが通ってる状態にならない(はず)。

コマンドプロンプトを起動して、次のように打ち込む。コマンドプロンプトは Windows のスタートメニューから起動するか、Win+R で「cmd」と打って起動しても OK。

バージョンが表示されれば OK。

3. git-lfs をダウンロードして、インストールする

https://git-lfs.github.com/

git-lfs01

git-lfs02

git-lfs03

最後に、「git lfs init」と打つように出るので、OK を押す。

※2016/03/12追記:「git lfs install」にコマンドが変わってるようです。参考)https://help.github.com/articles/installing-git-large-file-storage/

4. Git LFS を初期化する

コマンドプロンプトに次のように打ち込む。

次のような感じで、「Git LFS initialized.」と出てれば OK。

cmd01

5. Git LFS が入ったか確認

コマンドプロンプトに次のように打ち込む。

次のような感じでバージョンが表示されれば OK。

cmd02

導入 – Mac

1. Homebrew を入れる

Homebrew で Git も Git LFS も入れることができるので、今回は Homebrew を使っていれます。

http://brew.sh/index_ja.html

トップページに書いてあるスクリプトをターミナルに貼り付けて実行。

2. Homebrew をアップデートしておく

ターミナルに次のように打ち込む。

3. git をインストールする

ターミナルに次のように打ち込む。

4. git-lfs をインストールする

ターミナルに次のように打ち込む。

5. Mac 再起動&Git インストール確認

ターミナルに次のように打ち込む。

バージョンが表示されれば OK。

6. Git LFS が入ったか確認

ターミナルに次のように打ち込む。

バージョンが表示されれば OK。

SourceTree の設定

SourceTree などのソフトを使っていても Git LFS は使えます。ただし、Git LFS は Git エクステンションなので、ソフト内蔵の Git ではなくシステムにインストールした Git を使う必要があります。

SourceTree の場合、ツール>オプションから、SourceTree の設定画面を表示して「システム Git を使用」をクリックして「OK」ボタンを押しておきます。これは Windows のキャプチャですが、Mac でも同様の設定があったはず。

st01

Git LFS で管理するファイル

追加したいファイルを指定する

上記のような形でコマンドを打つ。設定した内容は「.gitattributes」内に設定が保存される。「.gitattributes」を直接編集しても良い。

設定できたか確認する

上記のような形でコマンドを打つ。設定できていれば次のように表示されるはず。

cmd03

実際にコミットしてみて動作確認する

普段使うコミット方法(SourceTreeまたはコマンドライン)でファイルをコミットしてみて、無事に Git LFS で管理されるかを確認します。

手順は以下の通り。

  1. テストファイル(Git LFS 対象の拡張子、例えば png など)を Git 管理のフォルダ内に追加する
  2. そのファイルをコミットしてみる(サーバーへプッシュはしないで良い)
  3. Git LFS の管理下になったかを確認する

    とコマンドを打って、2 でコミットしたファイル名があれば OK。

もし、確認した結果 Git LFS の管理下にファイルが入っていなかった場合

  • git.exe(実行ファイル)の場所を開いて、同じ場所に git-lfs.exe(実行ファイル)があるか確認する。実行ファイルの場所が分からない場合、Windows であれば MasterSeeker でサーチすると見つけやすいかも。Mac の場合、「/usr/bin/git」あたりに大体あります。
  • Git が複数インストールされていて、違う場所の git.exe(実行ファイル)などを見ていないか確認する。

私は「git の実行ファイルと git-lfs の実行ファイルの場所が異なっている」状態で最初ちょっと躓きました。

まとめ

大きなバイナリファイルを Git で扱うとリポジトリが肥大化して動作が重くなったり、ソフトなどから扱おうとした場合はハングアウトしてしまうなど問題がありました。gitmedia や git-annex などいくつか方法はあったものの一長一短で、デザイナーなどにも分かりやすいかどうかを考えると「うーん」となり導入に踏み切れませんでした。

Git LFS は最初の設定だけしてしまえば後は普段通りの Git 操作で良く、SourceTree などのソフトを利用してても大丈夫ですし使い勝手かなりいいなーと思います。GitHub で LFS のデータを置くことができて、サーバーを別途立てる必要もないのも手軽でした。

ちなみに GitHub の Setting>Billing で確認したところ Git LFS Data は、1 data pack が $5 で 50 GB/month となっていました。

Git LFS は待ち望んでた内容だったので本当嬉しいです。