大規模プロジェクトで画像がめちゃくちゃ多い時など、これまでは Git リポジトリが大きくなりすぎてしまうことから画像だけ Git 管理を諦めて Dropbox などで別途共有していました。
Git LFS の発表があった後、実際にいつから使えそうかなとチェックしてましたが 10 月 2 日に全ての GitHub で利用可能になったとのアナウンスがありました( Git Large File Storage v1.0 )ので、早速試してみました。
Git LFS とは
Git LFS はオープンソースの Git エクステンションです。バイナリファイルは Git 管理に向いていませんが、Git LFS はそれを解決できます。
Git LFS は、リモートサーバーに指定したファイル(バイナリファイル)を格納して、Git リポジトリではテキスト・ポインタとしておくので Git リポジトリが重くて困る、ということが起きないというもの。
Git LFS で管理するファイルはコミットした際、次のようになります。(画像が丸ごとアップされるわけではなく、テキストでリポジトリには記録されてます。)
バイナリファイルを Git 管理したときのメリット
色々メリットはあるかなと思うのですが、個人的には次の 2 つが大きいです。
- Git からデプロイすることで、テストサーバーや本番サーバーへアップできる
(FTP などで差分を手動アップする必要がない) - バイナリファイルも履歴を追ったり差分を見たりできるようになる
- どういった作業でどういった画像が追加されたのかの確認も容易
使うには Git と Git LFS のインストールが必要。導入は Windows と Mac それぞれ書きます。
導入 – Windows
1. Git をダウンロードして、インストールする
インストーラーでインストールします。コマンドプロンプトからも使えるようにしたいので、途中「Use Git from the Windows Command Prompt」をチェック。
2. パソコン再起動&Git インストール確認
Git 入れた後はパソコンを再起動します。再起動しないとパスが通ってる状態にならない(はず)。
コマンドプロンプトを起動して、次のように打ち込む。コマンドプロンプトは Windows のスタートメニューから起動するか、Win+R で「cmd」と打って起動しても OK。
git --version
バージョンが表示されれば OK。
3. git-lfs をダウンロードして、インストールする
最後に、「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 init
次のような感じで、「Git LFS initialized.」と出てれば OK。
5. Git LFS が入ったか確認
コマンドプロンプトに次のように打ち込む。
git lfs version
次のような感じでバージョンが表示されれば OK。
導入 – Mac
1. Homebrew を入れる
Homebrew で Git も Git LFS も入れることができるので、今回は Homebrew を使っていれます。
トップページに書いてあるスクリプトをターミナルに貼り付けて実行。
2. Homebrew をアップデートしておく
ターミナルに次のように打ち込む。
brew update
3. git をインストールする
ターミナルに次のように打ち込む。
brew install git
4. git-lfs をインストールする
ターミナルに次のように打ち込む。
brew install git-lfs
5. Mac 再起動&Git インストール確認
ターミナルに次のように打ち込む。
git --version
バージョンが表示されれば OK。
6. Git LFS が入ったか確認
ターミナルに次のように打ち込む。
git lfs version
バージョンが表示されれば OK。
SourceTree の設定
SourceTree などのソフトを使っていても Git LFS は使えます。ただし、Git LFS は Git エクステンションなので、ソフト内蔵の Git ではなくシステムにインストールした Git を使う必要があります。
SourceTree の場合、ツール>オプションから、SourceTree の設定画面を表示して「システム Git を使用」をクリックして「OK」ボタンを押しておきます。これは Windows のキャプチャですが、Mac でも同様の設定があったはず。
Git LFS で管理するファイル
追加したいファイルを指定する
git lfs track "*.psd"
上記のような形でコマンドを打つ。設定した内容は「.gitattributes」内に設定が保存される。「.gitattributes」を直接編集しても良い。
設定できたか確認する
git lfs track
上記のような形でコマンドを打つ。設定できていれば次のように表示されるはず。
実際にコミットしてみて動作確認する
普段使うコミット方法(SourceTreeまたはコマンドライン)でファイルをコミットしてみて、無事に Git LFS で管理されるかを確認します。
手順は以下の通り。
- テストファイル(Git LFS 対象の拡張子、例えば png など)を Git 管理のフォルダ内に追加する
- そのファイルをコミットしてみる(サーバーへプッシュはしないで良い)
- Git LFS の管理下になったかを確認する
git lfs ls-files
とコマンドを打って、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 は待ち望んでた内容だったので本当嬉しいです。