---
title: 大容量ファイルもGitで管理。 Git LFSの使い方
tags: 
author: [hibiki443](https://www.docswell.com/user/hibiki)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/W4EZZN13E3.jpg?width=480
description: Git LFS とは？ 導入方法 実際に使用してぶつかった問題と解決方法
published: May 12, 22
canonical: https://www.docswell.com/s/hibiki/KW3QDK-2022-05-12-230658
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/W4EZZN13E3.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/KY76Z8LZ7V.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/5G75W919J4.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/V9J2Q215ER.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5DEYWYZ67M.jpg)

5
Git LFS とは


# Page. 6

![Page Image](https://bcdn.docswell.com/page/2VJN9PY1J8.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GYE923PYJ3.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/5GE85MDKED.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/MLELY3MP7R.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/54JMNDY2EW.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/ZPJRD495E9.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/NPEX12QXEX.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/63EK2M99JD.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4L734YW9J5.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V87DQ5K8JG.jpg)

15
導入方法


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4VJPLGKW78.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/L2EVQ6V97Q.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/Z57GWNL4JL.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/V4EQ3QYREP.jpg)

導入方法
Windows &amp; Mac
Git LFS のバージョンを確認
git lfs version
＼インストール完了！／
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/DKJ41NWQJ1.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PLE1G5YL7G.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/8GEWK5GQE2.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/W47ZZNL373.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/KYJ6Z8WZJV.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/5GJ5W9M9E4.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/V9E2Q2957R.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/5D7YWY46JM.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/2VEN9P61E8.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/GY7923LYE3.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/5G785MXK7D.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/ML7LY38PJR.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/54EMND627W.jpg)

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


# Page. 33

![Page Image](https://bcdn.docswell.com/page/ZPERD4P579.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/NP7X123X7X.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/637K2MY9ED.jpg)

35
まとめ


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4LJ34Y99E5.jpg)

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


# Page. 37

![Page Image](https://bcdn.docswell.com/page/V8JDQ5G8EG.jpg)

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


# Page. 38

![Page Image](https://bcdn.docswell.com/page/4VEPLG3WJ8.jpg)

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


# Page. 39

![Page Image](https://bcdn.docswell.com/page/L27VQ649JQ.jpg)

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


# Page. 40

![Page Image](https://bcdn.docswell.com/page/Z5JGWN14EL.jpg)



