大容量ファイルもGitで管理。 Git LFSの使い方
-
Upload
hibiki443 -
Category
Technology
-
view
17.834 -
download
0
Transcript of 大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルも 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