Git Lfsとは?データを効率的に管理する機能を具体的に解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年9月)

✔当記事はこんな方々へ向けて作られています

「git lfsってどう使うの?」

「git lfsの活用方法を知りたい」

「git lfsを使った操作例が見たい」

✔当記事を通じて提供する情報は以下の通りです

  • git lfsの概要
  • git lfsの使い方とその活用法
  • git lfsの具体的な使用例

当記事では、git lfsの基礎から、その機能を活用する方法まで、現実的なシナリオを取り入れて詳細に解説していきます。

ぜひ最後までご覧いただければと思います。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Git LFSについて理解する

Git LFSについて理解するためには、その全体像と基本的な仕組みを把握することが必要です。

  • Git LFSとは
  • Git LFSの基本的仕組み

Git LFSとは

Git LFSとは、大きなファイルを効率的に管理するためのGitの拡張ツールです。

標準のGitでは、大きなファイルの変更履歴を全て保存するため、リポジトリのサイズが急速に膨らんでしまうという問題があります。

しかしGit LFSを使えば、大きなファイルの最新のバージョンだけをローカルに保存し、そのほかのバージョンはリモートに保存可能。

リポジトリのサイズを抑えつつ、大きなファイルのバージョン管理もおこなえます。

Git LFSの基本的仕組み

Git LFSの仕組みは、大きなファイルを”ポインタ”と呼ばれる小さなテキストファイルに置き換えて、大きなファイルを効率的に管理すること。

ポインタは、大きなファイルの内容ではなく、その場所とバージョン情報を含んでいます。

通常のGitの操作(例えばgit commitやgit push)をおこなうと、Git LFSは自動的にポインタと大きなファイルを適切に処理します。

つまりユーザーは、大きなファイルを通常のファイルと同じように扱えて、背後でGit LFSが効率的な管理をおこなってくれているのです。

Git LFSのインストールから活用する手順

次に、Git LFSを使うための前提条件であるインストール方法からご説明していきます。

  • インストール
  • Git LFS の初期化
  • 大きなファイルを Git LFS で追跡
  • .gitattributes ファイルの確認
  • 通常の Git ワークフローを使用

インストール

各OSでインストール方法がことなります。

以下を参考に、自身のPCに合った方法を使ってください。

macOS (Homebrew を使用する場合)

brew install git-lfs

Ubuntu (apt を使用する場合)

sudo apt-get install git-lfs

Windows (Chocolatey を使用する場合)

choco install git-lfs

上記のコマンド以外の方法でのインストールや、ほかのOSのインストール方法については、公式ドキュメントを参照してください。

Git LFS の初期化

初期化は以下のコマンドでおこないます。

git lfs install

Git LFS を使って Git リポジトリの大きなファイルを追跡するための準備をするコマンドです。

大きなファイルを Git LFS で追跡

特定のファイルやファイルタイプを Git LFS で追跡するには、以下のようなコマンドを使用します:

git lfs track "*.psd"

上記のコマンドは、全ての .psd ファイルを Git LFS で追跡するように設定します。

.gitattributes ファイルの確認

git lfs track

.gitattributes ファイルに追跡設定が追加されます。

このファイルもリポジトリにコミットすることで、ほかの開発者も同じ大きなファイルを Git LFS で追跡するように設定されます。

通常の Git ワークフローを使用

設定が完了すると、大きなファイルを通常の Git コマンド(git add, git commit, git push など)で管理できるようになります。

通常のワークフローでも、裏で Git LFS によって効率的に管理する設定が完了です。

Git LFSリポジトリの運用

続いて、Git LFSリポジトリの日常的な運用方法を見ていきましょう。

  • 新規リポジトリの作成方法
  • 既存リポジトリのクローニング
  • プルとチェックアウトの方法
  • コミットとプッシュの方法

新規リポジトリの作成方法

Git LFSリポジトリの作成は、通常のGitリポジトリと同様におこないます。

まず新しいディレクトリを作成し、そのディレクトリ内でgit initコマンドを実行しましょう。

mkdir new-repo
cd new-repo
git init

次に、Git LFSを初期化します。

git lfs install

新規にGit LFSリポジトリが作成され、大きなファイルの追跡を開始する準備が整いました。

既存リポジトリのクローニング

既存のGit LFSリポジトリをクローンする場合も、通常のGitリポジトリと同じくgit cloneコマンドを使用します。

ただしリポジトリが大きなファイルを含む場合、初回のクローンではそれらのファイルはダウンロードされず、必要に応じて後からダウンロードされます。

git clone <リポジトリのURL>

なお、全ての大きなファイルをすぐにダウンロードしたい場合は、git lfs pullコマンドを使用します。

git lfs pull

プルとチェックアウトの方法

Git LFSリポジトリでのプルとチェックアウトも、通常のGitリポジトリと同じコマンドを使用します。

git pull
git checkout <ブランチ名>

ただし、プルやチェックアート時には、必要に応じて大きなファイルがダウンロードされます。

全ての大きなファイルを手元に持つ必要がある場合は、先述のgit lfs pullコマンドを使用しましょう。

コミットとプッシュの方法

Git LFSリポジトリでのコミットとプッシュも、通常のGitリポジトリと同じコマンドを使用してください。

git add <ファイル名>
git commit -m "<コミットメッセージ>"
git push

Git LFSが背後で働き、大きなファイルは適切に処理されます。

そのため、ユーザーは通常のGit操作と同様に作業を進められるのです。

Git LFSの高度な使い方

ここでは、Git LFSの高度な使い方について探求します。

一度基本的な操作が理解できれば、さらに深く、より効率的にGit LFSを活用するためのテクニックを習得することが可能です。

  • 速度向上のテクニック
  • ファイルの追跡方法
  • リポジトリの移動方法
  • Git LFSの履歴確認

速度向上のテクニック

特定の大きなファイルを無視することで、一部の操作の速度を向上させられます。

例えば、.jpg.pngファイルだけを取得し、そのほかの大きなファイルは無視する例は、以下のとおりです。

git lfs clone --include="*.jpg,*.png" --exclude="" <リポジトリのURL>

ファイルの追跡方法

Git LFSを使用すると、特定の種類の大きなファイルを追跡できます。

git lfs trackコマンドを使用してください。

以下が、全ての.mp4ファイルをGit LFSで追跡する例になります。

git lfs track "*.mp4"

リポジトリの移動方法

リポジトリの移動は、通常のGitリポジトリと同じくgit remoteコマンドを使用します。

ただし、Git LFSを使用するリポジトリでは、移動後に必ず以下のコマンドを再度実行してください。

git lfs install

Git LFSの履歴確認

Git LFSの履歴確認は、通常のgit logコマンドで問題ありません。

Git LFSを使用している場合でも、Gitの履歴は通常どおりに表示されます。

ただし大きなファイルの実際の変更は表示されず、大きなファイルを指し示すポインター情報が表示されることは、頭に入れておきましょう。

Git LFSでのファイル管理

Git LFSでは、特定の大きなファイルを効率的に管理するための機能が提供されています。

ローカルとリモートのファイルを削除したり、特定のファイルを簡単に検索したり、ファイルの取り扱いを設定したり、特定のファイルをロックすることが可能です。

以下で具体的な手順をお伝えします。

  • ローカルとリモートのファイル削除
  • ファイルの検索方法
  • ファイルの含有・除外設定
  • ファイルのロック機能

ローカルとリモートのファイル削除

Git LFSを使用すると、ローカルの大きなファイルを削除するだけでなく、リモートの大きなファイルも削除できます。

以下のコマンドは、以下の手順で削除を実行するものです。

  1. ローカルのファイルを削除
  2. その変更をコミット
  3. そのコミットをリモートにプッシュ
  4. 結果として、リモートのファイルも削除される
git rm <ファイル名>
git commit -m "Remove file"
git push origin main

ファイルの検索方法

Git LFSを使用すると、大きなファイルを簡単に検索できます。

以下のコマンドを実行し、Git LFSで追跡している全てのファイルの一覧を表示しましょう。

git lfs ls-files

ファイルの含有・除外設定

Git LFSを使用すると、特定の種類のファイルをGit LFSの追跡対象から除外できます。

これにはgit lfs trackコマンドの--excludeオプションを使用してください。

例えば、.jpgファイルを除外するには、以下のコマンドを実行します。

git lfs track "*.jpg" --exclude

ファイルのロック機能

Git LFSにはファイルのロック機能があり、これによりほかのユーザーによる同時編集を防げます。

以下は、ファイルをロックし、編集中であることをほかのユーザーに通知するコマンドです。

git lfs lock <ファイル名>

Git LFS APIについて

Git LFSでは、APIを通じてリモートサーバーと通信することで、ファイルの管理を一層効率的におこなえます。

主なものをご覧いただきます。

  • Batch APIの概略
  • File Locking APIの内容

Batch APIの概略

Batch APIは、複数のファイルを一度に操作するためのAPIです。

一度に多くのファイルを効率的に操作できます。

Batch APIはHTTP / HTTPS経由でアクセス可能で、リクエストは、以下のような形式です。

POST /objects/batch
{
  "operation": "download",
  "transfers": [ "basic" ],
  "objects": [
    {
      "oid": "1111111",
      "size": 123
    },
    {
      "oid": "2222222",
      "size": 456
    }
  ]
}

File Locking APIの内容

File Locking APIは、Git LFSのファイルロック機能を制御するためのAPIです。

特定のファイルがほかのユーザーによって編集されていないことを確認し、ファイルの競合を防げます。

File Locking APIはHTTP / HTTPS経由でアクセス可能で、以下のような形式でリクエストしてください。

POST /locks
{
  "path": "path/to/file",
  "committer": {
    "name": "User Name",
    "email": "user@example.com"
  }
}

まとめ

当記事では、Git LFSの全体像と具体的な操作方法についてお伝えしてきました。

Git LFSは大規模なプロジェクトで大きなファイルを効率的に管理するための強力なツールです。

当記事で提供された知識を活用して、日々の開発作業をよりスムーズに進めてください。

次に学ぶべきは、以下のようなGit LFSのさらなる応用例です。

  • 特定の状況での最適なGit LFSの使用方法
  • Git LFSを活用したCI/CDパイプラインの構築方法

幅広い知識と技術を習得することで、より高度な開発タスクにも対応できるようになるでしょう。

タイトルとURLをコピーしました