65.1K Views
May 12, 22
スライド概要
Git LFS とは?
導入方法
実際に使用してぶつかった問題と解決方法
大容量ファイルも Git で管理。 Git LFS の使い方 吉澤 富美 2016.04.11
自己紹介 2 吉澤 富美(よしざわ よしみ)@ヒビキ • デジパ株式会社 所属、D-77.LLC 代表 • サウジアラビアで幼少期を過ごす • 元々マークアップエンジニア、 最近はウェブディレクター業務が多い • X、LUNA SEA、BUCK-TICKなどが大好き
こんなこともやってます! 2012 年立ち上げ時から WP-D へ参加! WP-D ではピンク担当 待ち合わせアプリ「meety」 HTML5 Japan Cup 2014 by html5j 部門賞受賞 3
執筆書籍 4 『現場でかならず使われている WordPress デザインのメソッド』 『HTML5+CSS3でつくる! レスポンシブWebデザイン』 『いちばんやさしい Webマネジメントの教本』 など執筆
5 Git LFS とは
Git のおさらいから! Git はプログラムのソースコードなどの 変更履歴を記録・追跡するための分散型バージョン管理システム 6
差分だけ記録 全バージョンのファイルを丸ごと保存しているわけではない 差分(変更点)の情報を記録!! テキスト データ 7
Git の弱点 バイナリファイル 画像や映像などの バイナリファイルの 変更はテキストと違い ファイル丸ごと記録 テキスト データ ではない 8
Git Large File Storage Git LFS = Git Large File Storage • Git LFS は GitHub が中心になり 開発している Git の拡張機能 • 大きなバイナリファイルは Git 管理に向いていないが、 これを解決する目的 9
Git LFS の仕組み GitHub など 自分の マシン 10
Git LFS の仕組み 11 • Large File Storage に PSD などファイルの実態を格納 • Git には テキスト・ポインタを格納 • Git リポジトリそのものは 肥大化しない テキスト・ポインタ
Git LFS を使うメリット • Git の苦手なバイナリファイルの管理に優れている • Large File Storage を GitHub が提供($5 で 50 GB/month) • テキスト・ポイントを格納、Git リポジトリは肥大化しない • Git LFS ファイルを飛ばして clone や pull できる • SourceTree から使うことも可能 (ただしコマンド必要になる可能性も高い、後述) 12
同じ修正をしたリポジトリ2つ .git/objects の重さを比較 Git LFS なし 1.02MB Git LFS 利用 2.69KB 13
Git LFS を使うデメリット • Large File Storage が必要 • Git LFS はまだ走り出したばかり(=不安定な時もある) • Git LFS 管理のファイルを飛ばさずに clone や pull をすると、 ファイルの変更が大量だった場合などエラー落ちしてコケる • Git LFS 管理のファイルを飛ばして clone や pull するのは手間 14
15 導入方法
導入方法 Windows 1. https://git-lfs.github.com/ の「Download」からインストー ラーをダウンロードしてインストール 2. インストールしたら次のようにコマンドを打つ git lfs install 3. マシン再起動 16
導入方法 Mac Homebrew を使うと楽なのでオススメ!! http://brew.sh/index_ja.html 最初に Homebrew をアップデートしておく brew update 17
導入方法 Mac 1. Git LFS をインストール brew install git-lfs 2. インストールしたら次のようにコマンドを打つ git lfs install 3. マシン再起動 18
導入方法 Windows & Mac Git LFS のバージョンを確認 git lfs version \インストール完了!/ 19
Git LFS で管理するファイル 追加したいファイルを設定 git lfs track "*.psd" 設定した内容は .gitattributes 内に設定が保存される .gitattributes を直接編集しても良い 20
Git LFS で管理するファイル 設定できたか確認 git lfs track 設定できていれば、こんな感じに表示される Listing tracked paths *.psd (.gitattributes) 21
実際にコミットしてみて動作確認 1. テストファイル(Git LFS 管理対象の拡張子、例えば psd な ど)を Git 管理のフォルダ内に追加 2. そのファイルをコミットする(プッシュはしないで良い) 3. Git LFS の管理下になったかを確認 2 でコミットしたファイル名があれば OK git lfs ls-files 22
Git LFS の管理下にファイルがない場合 • git.exe(実行ファイル)の場所を開いて、同じ場所に git- lfs.exe(実行ファイル)があるか確認 • 実行ファイルの場所が分からない場合、Windows であれば MasterSeeker でサーチすると見つけやすい • Mac の場合「/usr/bin/git」あたりに大体ある 23
SourceTree の設定 • SourceTree などのソフトを 使っていても Git LFS は使える • SourceTree の場合、 ツール>オプションから 「内蔵 Git を使用」 「システム Git を使用」 を選択できる 24
SourceTree の設定 • SourceTree に内蔵の Git でも いいんじゃないの? • 悪くないけど後々コマンドを 打つことになるので、自分で 入れて使う方が今はオススメ 25
26 実際に運用して ぶつかった問題
Q. クローンやプルが失敗する • 差分に Git LFS で管理するファイルが大量だと 高確率でエラーが出てそのままクローンやプルが失敗する • もれなく中途半端に落ちてきてしまったファイルが 作業コピーに入ったまま残るオマケつき 「作業コピーに 2000 くらいファイルが入ってる」 「何度やってもクローン失敗するよ!?」 27
A. クローンやプルが失敗する 28 • 原因は Git LFS 管理ファイルダウンロードと git clone や git pull を一緒に行った際、Git LFS 側がタイムアウト等エラー落ちする と git clone や git pull を巻き込んで落ちるため(ヒドイ) • Git LFS 関連の処理をスキップして git clone や git pull だけを 先に行えば OK!ただしコマンドを打つ必要がある GIT_LFS_SKIP_SMUDGE=1 git ほにゃらら
A. クローンやプルが失敗する(クローン) • Git LFS 関連の処理をスキップしてクローン GIT_LFS_SKIP_SMUDGE=1 git clone https://○○.git • git clone が終わったら、指定したフォルダへ cd で移動して Git LFS 関連のファイルをプル git lfs pull 29
A. クローンやプルが失敗する(プル) • Git LFS 関連の処理をスキップしてプル GIT_LFS_SKIP_SMUDGE=1 git pull • git pull が終わったら Git LFS 関連のファイルをプル git lfs pull 30
Q. ファイルが作業コピーに残って消えない • 変更してないファイルが作業コピーにあり破棄しようとしても エラーがでたりして消せない(これ多くて本当大変でした) 「このファイル変更してないのに作業コピーに入ってる…」 「しかも破棄(リセット)しても消えない」 「SourceTree などで見ても差分は表示されないのになんで」 31
A. ファイルが作業コピーに残って消えない • 破棄しても駄目な時はリモートと強制同期 ローカルでファイル変更をしていた場合は容赦なく それも消えてしまうので注意 git fetch origin git reset --hard origin/ブランチ名 32
Q. 何度もログイン情報を聞かれる • ファイル 100 件ごとにユーザー名とパスワードを聞かれる (HTTPS の場合) • 3000 件以上 Git LFS 管理ファイルがあり大変な目に… 「何十回ユーザー名とパスワード入れれば良いん!?」 33
A. 何度もログイン情報を聞かれる 34 • Mac なら git credential を使えば OK OS X のキーチェーンにログイン情報が保存される (git version 1.7.9 以上が必要) brew upgrade git git config --global credential.helper osxkeychain • Windows だと SSH で繋いでしまうのが楽? 一行目は git version アップグレード
35 まとめ
導入してどうだったのか? Git でバイナリデータ(画像や動画など)を扱うようになり ソースコードとバイナリデータを一元管理可能になった 36
導入してどうだったのか? Web サイト上のデータを一元管理できるようになったため Git にサーバーアップ用のブランチを作り、そのブランチから デプロイしてサーバーへアップ可能になった 37
導入してどうだったのか? Git ブランチからデプロイできるとアップ漏れもなくなり 大規模サイトになればなるほど便利さ実感!! \やったぜ!/ 38
現時点では完璧ではないが選択肢としてアリ • まだ Git LFS の使い勝手は「最高に手軽で便利」とは言えない • デメリットはある程度は運用でカバー可能 • メリットの方が大きいケースなら導入も1つの手 • 日々開発が進んでいる模様なのでチェック! 39