大容量ファイルもGitで管理。 Git LFSの使い方

54.8K Views

May 12, 22

スライド概要

Git LFS とは?
導入方法
実際に使用してぶつかった問題と解決方法

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

大容量ファイルも Git で管理。 Git LFS の使い方 吉澤 富美 2016.04.11

2.

自己紹介 2 吉澤 富美(よしざわ よしみ)@ヒビキ • デジパ株式会社 所属、D-77.LLC 代表 • サウジアラビアで幼少期を過ごす • 元々マークアップエンジニア、 最近はウェブディレクター業務が多い • X、LUNA SEA、BUCK-TICKなどが大好き

3.

こんなこともやってます! 2012 年立ち上げ時から WP-D へ参加! WP-D ではピンク担当 待ち合わせアプリ「meety」 HTML5 Japan Cup 2014 by html5j 部門賞受賞 3

4.

執筆書籍 4 『現場でかならず使われている WordPress デザインのメソッド』 『HTML5+CSS3でつくる! レスポンシブWebデザイン』 『いちばんやさしい Webマネジメントの教本』 など執筆

5.

5 Git LFS とは

6.

Git のおさらいから! Git はプログラムのソースコードなどの 変更履歴を記録・追跡するための分散型バージョン管理システム 6

7.

差分だけ記録 全バージョンのファイルを丸ごと保存しているわけではない 差分(変更点)の情報を記録!! テキスト データ 7

8.

Git の弱点 バイナリファイル 画像や映像などの バイナリファイルの 変更はテキストと違い ファイル丸ごと記録 テキスト データ ではない 8

9.

Git Large File Storage Git LFS = Git Large File Storage • Git LFS は GitHub が中心になり 開発している Git の拡張機能 • 大きなバイナリファイルは Git 管理に向いていないが、 これを解決する目的 9

10.

Git LFS の仕組み GitHub など 自分の マシン 10

11.

Git LFS の仕組み 11 • Large File Storage に PSD などファイルの実態を格納 • Git には テキスト・ポインタを格納 • Git リポジトリそのものは 肥大化しない テキスト・ポインタ

12.

Git LFS を使うメリット • Git の苦手なバイナリファイルの管理に優れている • Large File Storage を GitHub が提供($5 で 50 GB/month) • テキスト・ポイントを格納、Git リポジトリは肥大化しない • Git LFS ファイルを飛ばして clone や pull できる • SourceTree から使うことも可能 (ただしコマンド必要になる可能性も高い、後述) 12

13.

同じ修正をしたリポジトリ2つ .git/objects の重さを比較 Git LFS なし 1.02MB Git LFS 利用 2.69KB 13

14.

Git LFS を使うデメリット • Large File Storage が必要 • Git LFS はまだ走り出したばかり(=不安定な時もある) • Git LFS 管理のファイルを飛ばさずに clone や pull をすると、 ファイルの変更が大量だった場合などエラー落ちしてコケる • Git LFS 管理のファイルを飛ばして clone や pull するのは手間 14

15.

15 導入方法

16.

導入方法 Windows 1. https://git-lfs.github.com/ の「Download」からインストー ラーをダウンロードしてインストール 2. インストールしたら次のようにコマンドを打つ git lfs install 3. マシン再起動 16

17.

導入方法 Mac Homebrew を使うと楽なのでオススメ!! http://brew.sh/index_ja.html 最初に Homebrew をアップデートしておく brew update 17

18.

導入方法 Mac 1. Git LFS をインストール brew install git-lfs 2. インストールしたら次のようにコマンドを打つ git lfs install 3. マシン再起動 18

19.

導入方法 Windows & Mac Git LFS のバージョンを確認 git lfs version \インストール完了!/ 19

20.

Git LFS で管理するファイル 追加したいファイルを設定 git lfs track "*.psd" 設定した内容は .gitattributes 内に設定が保存される .gitattributes を直接編集しても良い 20

21.

Git LFS で管理するファイル 設定できたか確認 git lfs track 設定できていれば、こんな感じに表示される Listing tracked paths *.psd (.gitattributes) 21

22.

実際にコミットしてみて動作確認 1. テストファイル(Git LFS 管理対象の拡張子、例えば psd な ど)を Git 管理のフォルダ内に追加 2. そのファイルをコミットする(プッシュはしないで良い) 3. Git LFS の管理下になったかを確認 2 でコミットしたファイル名があれば OK git lfs ls-files 22

23.

Git LFS の管理下にファイルがない場合 • git.exe(実行ファイル)の場所を開いて、同じ場所に git- lfs.exe(実行ファイル)があるか確認 • 実行ファイルの場所が分からない場合、Windows であれば MasterSeeker でサーチすると見つけやすい • Mac の場合「/usr/bin/git」あたりに大体ある 23

24.

SourceTree の設定 • SourceTree などのソフトを 使っていても Git LFS は使える • SourceTree の場合、 ツール>オプションから 「内蔵 Git を使用」 「システム Git を使用」 を選択できる 24

25.

SourceTree の設定 • SourceTree に内蔵の Git でも いいんじゃないの? • 悪くないけど後々コマンドを 打つことになるので、自分で 入れて使う方が今はオススメ 25

26.

26 実際に運用して ぶつかった問題

27.

Q. クローンやプルが失敗する • 差分に Git LFS で管理するファイルが大量だと 高確率でエラーが出てそのままクローンやプルが失敗する • もれなく中途半端に落ちてきてしまったファイルが 作業コピーに入ったまま残るオマケつき 「作業コピーに 2000 くらいファイルが入ってる」 「何度やってもクローン失敗するよ!?」 27

28.

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 ほにゃらら

29.

A. クローンやプルが失敗する(クローン) • Git LFS 関連の処理をスキップしてクローン GIT_LFS_SKIP_SMUDGE=1 git clone https://○○.git • git clone が終わったら、指定したフォルダへ cd で移動して Git LFS 関連のファイルをプル git lfs pull 29

30.

A. クローンやプルが失敗する(プル) • Git LFS 関連の処理をスキップしてプル GIT_LFS_SKIP_SMUDGE=1 git pull • git pull が終わったら Git LFS 関連のファイルをプル git lfs pull 30

31.

Q. ファイルが作業コピーに残って消えない • 変更してないファイルが作業コピーにあり破棄しようとしても エラーがでたりして消せない(これ多くて本当大変でした) 「このファイル変更してないのに作業コピーに入ってる…」 「しかも破棄(リセット)しても消えない」 「SourceTree などで見ても差分は表示されないのになんで」 31

32.

A. ファイルが作業コピーに残って消えない • 破棄しても駄目な時はリモートと強制同期 ローカルでファイル変更をしていた場合は容赦なく それも消えてしまうので注意 git fetch origin git reset --hard origin/ブランチ名 32

33.

Q. 何度もログイン情報を聞かれる • ファイル 100 件ごとにユーザー名とパスワードを聞かれる (HTTPS の場合) • 3000 件以上 Git LFS 管理ファイルがあり大変な目に… 「何十回ユーザー名とパスワード入れれば良いん!?」 33

34.

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.

35 まとめ

36.

導入してどうだったのか? Git でバイナリデータ(画像や動画など)を扱うようになり ソースコードとバイナリデータを一元管理可能になった 36

37.

導入してどうだったのか? Web サイト上のデータを一元管理できるようになったため Git にサーバーアップ用のブランチを作り、そのブランチから デプロイしてサーバーへアップ可能になった 37

38.

導入してどうだったのか? Git ブランチからデプロイできるとアップ漏れもなくなり 大規模サイトになればなるほど便利さ実感!! \やったぜ!/ 38

39.

現時点では完璧ではないが選択肢としてアリ • まだ Git LFS の使い勝手は「最高に手軽で便利」とは言えない • デメリットはある程度は運用でカバー可能 • メリットの方が大きいケースなら導入も1つの手 • 日々開発が進んでいる模様なのでチェック! 39