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

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

Upload: hibiki443

Post on 13-Apr-2017

17.837 views

Category:

Technology


0 download

TRANSCRIPT

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

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

吉澤 富美

2016.04.11

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

自己紹介

吉澤 富美(よしざわ よしみ)@ヒビキ

• デジパ株式会社所属、D-77.LLC 代表

• サウジアラビアで幼少期を過ごす

• 元々マークアップエンジニア、

最近はウェブディレクター業務が多い

• X、LUNA SEA、BUCK-TICKなどが大好き

2

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

こんなこともやってます!

2012 年立ち上げ時からWP-D へ参加!

WP-D ではピンク担当

待ち合わせアプリ「meety」

HTML5 Japan Cup 2014 by html5j 部門賞受賞

3

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

執筆書籍

『現場でかならず使われている

WordPressデザインのメソッド』

『HTML5+CSS3でつくる!

レスポンシブWebデザイン』

『いちばんやさしい

Webマネジメントの教本』

など執筆

4

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

Git LFS とは

5

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

Gitのおさらいから!

Gitはプログラムのソースコードなどの

変更履歴を記録・追跡するための分散型バージョン管理システム

6

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

差分だけ記録

全バージョンのファイルを丸ごと保存しているわけではない

差分(変更点)の情報を記録!!

7

テキストデータ

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

Gitの弱点 バイナリファイル

画像や映像などの

バイナリファイルの

変更はテキストと違い

ファイル丸ごと記録

8

テキストデータではない

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

Git Large File Storage

Git LFS = Git Large File Storage

• Git LFS は GitHub が中心になり

開発している Gitの拡張機能

•大きなバイナリファイルは

Git管理に向いていないが、

これを解決する目的

9

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

Git LFS の仕組み 10

GitHubなど

自分のマシン

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

Git LFS の仕組み

• Large File Storage に

PSD などファイルの実態を格納

• Gitには

テキスト・ポインタを格納

• Gitリポジトリそのものは

肥大化しない

11

テキスト・ポインタ

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

Git LFS を使うメリット

• Gitの苦手なバイナリファイルの管理に優れている

• Large File Storage を GitHub が提供($5 で 50 GB/month)

•テキスト・ポイントを格納、Gitリポジトリは肥大化しない

• Git LFS ファイルを飛ばして clone や pull できる

• SourceTreeから使うことも可能

(ただしコマンド必要になる可能性も高い、後述)

12

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

Git LFS なし 1.02MB Git LFS 利用 2.69KB

同じ修正をしたリポジトリ2つ 13

.git/objects の重さを比較

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

Git LFS を使うデメリット

• Large File Storage が必要

• Git LFS はまだ走り出したばかり(=不安定な時もある)

• Git LFS 管理のファイルを飛ばさずに clone や pull をすると、

ファイルの変更が大量だった場合などエラー落ちしてコケる

• Git LFS 管理のファイルを飛ばして clone や pull するのは手間

14

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

導入方法

15

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

導入方法 Windows

1. https://git-lfs.github.com/ の「Download」からインストー

ラーをダウンロードしてインストール

2. インストールしたら次のようにコマンドを打つ

3. マシン再起動

16

git lfs install

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

導入方法 Mac

Homebrew を使うと楽なのでオススメ!!

http://brew.sh/index_ja.html

最初に Homebrew をアップデートしておく

17

brew update

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

導入方法 Mac

1. Git LFS をインストール

2. インストールしたら次のようにコマンドを打つ

3. マシン再起動

18

brew install git-lfs

git lfs install

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

導入方法 Windows & Mac

Git LFS のバージョンを確認

\インストール完了!/

19

git lfs version

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

Git LFS で管理するファイル

追加したいファイルを設定

設定した内容は .gitattributes内に設定が保存される

.gitattributes を直接編集しても良い

20

git lfs track "*.psd"

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

Git LFS で管理するファイル

設定できたか確認

設定できていれば、こんな感じに表示される

21

git lfs track

Listing tracked paths

*.psd (.gitattributes)

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

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

1. テストファイル(Git LFS 管理対象の拡張子、例えば psd な

ど)を Git管理のフォルダ内に追加

2. そのファイルをコミットする(プッシュはしないで良い)

3. Git LFS の管理下になったかを確認

2 でコミットしたファイル名があればOK

22

git lfs ls-files

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

Git LFS の管理下にファイルがない場合

• git.exe(実行ファイル)の場所を開いて、同じ場所に git-

lfs.exe(実行ファイル)があるか確認

•実行ファイルの場所が分からない場合、Windows であれば

MasterSeekerでサーチすると見つけやすい

• Mac の場合「/usr/bin/git」あたりに大体ある

23

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

SourceTree の設定

• SourceTree などのソフトを

使っていても Git LFS は使える

• SourceTree の場合、

ツール>オプションから

「内蔵 Git を使用」

「システム Git を使用」

を選択できる

24

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

SourceTree の設定

• SourceTreeに内蔵の Gitでも

いいんじゃないの?

•悪くないけど後々コマンドを

打つことになるので、自分で

入れて使う方が今はオススメ

25

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

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

26

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

Q. クローンやプルが失敗する

•差分に Git LFS で管理するファイルが大量だと

高確率でエラーが出てそのままクローンやプルが失敗する

•もれなく中途半端に落ちてきてしまったファイルが

作業コピーに入ったまま残るオマケつき

「作業コピーに 2000 くらいファイルが入ってる」

「何度やってもクローン失敗するよ!?」

27

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

A. クローンやプルが失敗する

•原因は Git LFS 管理ファイルダウンロードと git clone や git pull

を一緒に行った際、Git LFS 側がタイムアウト等エラー落ちする

と git clone や git pull を巻き込んで落ちるため(ヒドイ)

• Git LFS 関連の処理をスキップして git clone や git pull だけを

先に行えば OK!ただしコマンドを打つ必要がある

28

GIT_LFS_SKIP_SMUDGE=1 gitほにゃらら

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

A. クローンやプルが失敗する(クローン)

• Git LFS 関連の処理をスキップしてクローン

• git clone が終わったら、指定したフォルダへ cd で移動して

Git LFS 関連のファイルをプル

29

GIT_LFS_SKIP_SMUDGE=1 git clone https://○○.git

git lfs pull

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

A. クローンやプルが失敗する(プル)

• Git LFS 関連の処理をスキップしてプル

• git pull が終わったら Git LFS 関連のファイルをプル

30

GIT_LFS_SKIP_SMUDGE=1 git pull

git lfs pull

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

Q. ファイルが作業コピーに残って消えない

•変更してないファイルが作業コピーにあり破棄しようとしても

エラーがでたりして消せない(これ多くて本当大変でした)

「このファイル変更してないのに作業コピーに入ってる…」

「しかも破棄(リセット)しても消えない」

「SourceTreeなどで見ても差分は表示されないのになんで」

31

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

A. ファイルが作業コピーに残って消えない

•破棄しても駄目な時はリモートと強制同期

ローカルでファイル変更をしていた場合は容赦なく

それも消えてしまうので注意

32

git fetch origingit reset --hard origin/ブランチ名

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

Q. 何度もログイン情報を聞かれる

•ファイル 100 件ごとにユーザー名とパスワードを聞かれる

(HTTPS の場合)

• 3000 件以上 Git LFS 管理ファイルがあり大変な目に…

「何十回ユーザー名とパスワード入れれば良いん!?」

33

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

A. 何度もログイン情報を聞かれる

• Mac なら git credential を使えば OK

OS X のキーチェーンにログイン情報が保存される

(git version 1.7.9 以上が必要)

• Windows だと SSH で繋いでしまうのが楽?

34

brew upgrade git

git config --global credential.helper osxkeychain

一行目は

git versionアップグレード

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

まとめ

35

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

導入してどうだったのか?

Gitでバイナリデータ(画像や動画など)を扱うようになり

ソースコードとバイナリデータを一元管理可能になった

36

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

導入してどうだったのか?

Web サイト上のデータを一元管理できるようになったため

Gitにサーバーアップ用のブランチを作り、そのブランチから

デプロイしてサーバーへアップ可能になった

37

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

導入してどうだったのか?

Gitブランチからデプロイできるとアップ漏れもなくなり

大規模サイトになればなるほど便利さ実感!!

38

\やったぜ!/

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

現時点では完璧ではないが選択肢としてアリ

•まだ Git LFS の使い勝手は「最高に手軽で便利」とは言えない

•デメリットはある程度は運用でカバー可能

•メリットの方が大きいケースなら導入も1つの手

•日々開発が進んでいる模様なのでチェック!

39

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