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

Post on 13-Apr-2017

17.837 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

吉澤 富美

2016.04.11

自己紹介

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

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

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

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

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

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

2

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

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

WP-D ではピンク担当

待ち合わせアプリ「meety」

HTML5 Japan Cup 2014 by html5j 部門賞受賞

3

執筆書籍

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

WordPressデザインのメソッド』

『HTML5+CSS3でつくる!

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

『いちばんやさしい

Webマネジメントの教本』

など執筆

4

Git LFS とは

5

Gitのおさらいから!

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

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

6

差分だけ記録

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

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

7

テキストデータ

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

画像や映像などの

バイナリファイルの

変更はテキストと違い

ファイル丸ごと記録

8

テキストデータではない

Git Large File Storage

Git LFS = Git Large File Storage

• Git LFS は GitHub が中心になり

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

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

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

これを解決する目的

9

Git LFS の仕組み 10

GitHubなど

自分のマシン

Git LFS の仕組み

• Large File Storage に

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

• Gitには

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

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

肥大化しない

11

テキスト・ポインタ

Git LFS を使うメリット

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

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

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

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

• SourceTreeから使うことも可能

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

12

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

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

.git/objects の重さを比較

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. インストールしたら次のようにコマンドを打つ

3. マシン再起動

16

git lfs install

導入方法 Mac

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

http://brew.sh/index_ja.html

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

17

brew update

導入方法 Mac

1. Git LFS をインストール

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

3. マシン再起動

18

brew install git-lfs

git lfs install

導入方法 Windows & Mac

Git LFS のバージョンを確認

\インストール完了!/

19

git lfs version

Git LFS で管理するファイル

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

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

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

20

git lfs track "*.psd"

Git LFS で管理するファイル

設定できたか確認

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

21

git lfs track

Listing tracked paths

*.psd (.gitattributes)

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

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

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

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

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

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

22

git lfs ls-files

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. クローンやプルが失敗する

•原因は 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ほにゃらら

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

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

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

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

29

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

git lfs pull

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

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

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

30

GIT_LFS_SKIP_SMUDGE=1 git pull

git lfs pull

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

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

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

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

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

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

31

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

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

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

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

32

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

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

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

(HTTPS の場合)

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

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

33

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アップグレード

まとめ

35

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

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

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

36

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

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

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

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

37

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

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

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

38

\やったぜ!/

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

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

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

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

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

39

top related