(最終更新月:2023年9月)
✔当記事はこんな方々へ向けて作られています
「git lfsってどう使うの?」
「git lfsの活用方法を知りたい」
「git lfsを使った操作例が見たい」
✔当記事を通じて提供する情報は以下の通りです
- git lfsの概要
- git lfsの使い方とその活用法
- git lfsの具体的な使用例
当記事では、git lfsの基礎から、その機能を活用する方法まで、現実的なシナリオを取り入れて詳細に解説していきます。
ぜひ最後までご覧いただければと思います。
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を使用すると、ローカルの大きなファイルを削除するだけでなく、リモートの大きなファイルも削除できます。
以下のコマンドは、以下の手順で削除を実行するものです。
- ローカルのファイルを削除
- その変更をコミット
- そのコミットをリモートにプッシュ
- 結果として、リモートのファイルも削除される
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パイプラインの構築方法
幅広い知識と技術を習得することで、より高度な開発タスクにも対応できるようになるでしょう。