Git リポジトリが LFS を使用しているかどうかを確認する方法

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Git リポジトリが Git Large File Storage (LFS) を利用しているかどうかを判断する方法を学びます。まず、LFS の追跡設定に重要な .gitattributes ファイルを調べることから始めて、LFS の使用を示す主要な指標を探ります。

次に、git lfs env コマンドを使用して、リポジトリ内の LFS 環境と設定を確認します。最後に、LFS で追跡されているファイルを使ってテストを行い、LFS が大きなファイルを期待通りに管理していることを確認します。この実践的なアプローチにより、Git プロジェクトにおける LFS の統合を識別し理解するための実用的なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/SetupandConfigGroup -.-> git/config("Set Configurations") git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") subgraph Lab Skills git/config -.-> lab-560102{{"Git リポジトリが LFS を使用しているかどうかを確認する方法"}} git/git -.-> lab-560102{{"Git リポジトリが LFS を使用しているかどうかを確認する方法"}} git/add -.-> lab-560102{{"Git リポジトリが LFS を使用しているかどうかを確認する方法"}} git/status -.-> lab-560102{{"Git リポジトリが LFS を使用しているかどうかを確認する方法"}} git/commit -.-> lab-560102{{"Git リポジトリが LFS を使用しているかどうかを確認する方法"}} end

.gitattributes ファイルの確認

このステップでは、Git LFS が大きなファイルを追跡するために .gitattributes という特別なファイルをどのように使用するかを探ります。このファイルは、Git に対して、どのファイルを直接 Git リポジトリに保存するのではなく、LFS で処理すべきかを指示します。

まず、プロジェクトディレクトリにいることを確認しましょう。ターミナルを開き、次のコマンドを入力します。

cd ~/project/my-time-machine

次に、後で Git LFS に追跡させるダミーファイルを作成しましょう。このファイルを large_image.png と名付けます。

echo "This is a large image file placeholder." > large_image.png

このコマンドは、large_image.png という名前のファイルを作成し、その中にいくつかのテキストを入れます。実際のシナリオでは、これは画像、動画、またはアーカイブなどの大きなバイナリファイルになります。

次に、この種のファイルを Git LFS に追跡させる必要があります。これは git lfs track コマンドを使用して行います。このコマンドは、リポジトリ内の .gitattributes ファイルを自動的に作成または更新します。

git lfs track "*.png"

次のような出力が表示されるはずです。

Tracking "*.png"

このコマンドは、Git LFS に .png 拡張子のすべてのファイルを追跡するよう指示します。また、.gitattributes ファイルにエントリを追加します。

では、.gitattributes ファイルに何が追加されたかを確認するために、その内容を見てみましょう。

cat .gitattributes

次のような出力が表示されるはずです。

*.png filter=lfs diff=lfs merge=lfs -text

.gitattributes ファイルのこの行が、Git に .png ファイルに LFS を使用するよう指示するポイントです。これは、*.png パターンに一致するファイルに対して、Git が差分比較、マージ、および保存に lfs フィルターを適用することを指定します。-text の部分は、Git がバイナリファイルをテキストとして扱おうとしないようにします。

.gitattributes ファイルを理解することは、Git LFS を効果的に使用するための重要なポイントです。これにより、どの種類の大きなファイルを LFS で管理するかを設定し、メインの Git リポジトリを小さく高速に保つことができます。

git lfs env を実行して LFS を確認する

このステップでは、git lfs env コマンドを使用して、Git LFS 環境をチェックし、リポジトリ内で正しく設定されていることを確認します。このコマンドは、Git LFS のインストールと設定に関する有用な情報を提供します。

まだプロジェクトディレクトリにいることを確認してください。

cd ~/project/my-time-machine

次に、git lfs env コマンドを実行します。

git lfs env

次のような出力が表示されるはずです(正確な出力は、Git LFS のバージョンとシステム設定によって若干異なる場合があります)。

git-lfs/3.x.x (Linux; zsh)
git version 2.34.1

Endpoint=
  https://github.com/labex/my-time-machine.git/info/lfs (auth=none)
Endpoint (SSH)=
  [email protected]:labex/my-time-machine.git/info/lfs (auth=none)

LocalWorkingDir=/home/labex/project/my-time-machine
LocalGitDir=/home/labex/project/my-time-machine/.git
LocalGitStorageDir=/home/labex/project/my-time-machine/.git/lfs
LocalMediaDir=/home/labex/project/my-time-machine/.git/lfs/objects
LocalRecentObjectsDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent
LocalRecentObjectsLogDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent/logs
LocalTmpDir=/home/labex/project/my-time-machine/.git/lfs/tmp
LocalTriggers=

Disk space utilization:
  du -s -h .git/lfs
  4.0K    .git/lfs

Git LFS initialized.

この出力には、以下のような多くの情報が含まれています。

  • 使用されている Git LFS のバージョン。
  • 使用されている Git のバージョン。
  • LFS エンドポイント(LFS ファイルがプッシュまたはプルされる場所。ただし、この実験ではリモートを使用しません)。
  • .git ディレクトリ内で Git LFS がデータを保存するローカルディレクトリ。
  • LFS オブジェクトによるディスク空間の使用量(まだ大きなファイルを追加していないため、現在は非常に少ない)。
  • このリポジトリで Git LFS が初期化されていることの確認。

git lfs env を実行することは、現在のリポジトリで Git LFS が正しくインストールされ、設定されていることを迅速に確認する良い方法です。これにより、LFS がデータを保存している場所を理解し、必要なフックとフィルターが設定されていることを確認できます。

LFS で追跡されるファイルでテストする

この最後のステップでは、LFS で追跡されるファイルを Git のステージングエリアに追加し、コミットします。これにより、Git LFS が通常のファイルとは異なる方法でファイルを処理する仕組みを実証します。

まず、正しいディレクトリにいることを確認します。

cd ~/project/my-time-machine

前のステップで、large_image.png ファイルを作成し、Git LFS が .png ファイルを追跡するように設定しました。次に、git add を使用してファイルをステージングエリアに追加します。

git add large_image.png

このコマンドは、次のコミットのためにファイルをステージングします。large_image.png.gitattributes のパターンに一致するため、Git LFS がこの操作をインターセプトします。Git LFS は、ファイルの全内容を Git インデックスに追加する代わりに、小さな「ポインタ」ファイルを追加します。

ステージングされたファイルを確認するために、ステータスをチェックしましょう。

git status

large_image.png がコミット待ちの新しいファイルであることを示す出力が表示されるはずです。

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   .gitattributes
        new file:   large_image.png

ステップ 1 で .gitattributes を変更したため、このファイルもステージングされていることに注意してください。

次に、変更をコミットしましょう。

git commit -m "Add LFS tracked image placeholder"

次のような出力が表示されるはずです。

[master (root-commit) abcdefg] Add LFS tracked image placeholder
 2 files changed, X insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 large_image.png

コミットメッセージにより、.gitattributeslarge_image.png の両方がコミットされたことが確認できます。ただし、large_image.png の実際の内容は Git コミットに直接保存されません。代わりに、コミットには小さなポインタファイルが保存され、大きなファイルの内容は Git LFS によって管理されます。

違いを確認するために、git show を使用して Git に保存されているファイルの内容を見てみましょう。このコマンドは、特定のコミットにおけるファイルの内容を表示します。

git show HEAD:large_image.png

次のような出力が表示されるはずです。

version https://git-lfs.github.com/spec/v1
oid sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
size 31

これは、実際の「This is a large image file placeholder.」というテキストではなく、ポインタファイルの内容です。これにより、Git が大きなファイルへの参照を保存し、Git LFS が実際のファイル内容を管理していることが実証されます。

これが Git LFS の核心的な概念です。大きなファイルへのポインタのみを保存することで、メインの Git リポジトリを軽量に保ち、大きなファイルの内容は別途保存されます。

まとめ

この実験では、Git リポジトリが Git LFS を使用しているかどうかを確認する方法を学びました。まず、Git LFS の設定に重要な .gitattributes ファイルの役割を理解しました。ダミーファイルを作成し、git lfs track を使用して、特定の拡張子を持つファイルを Git LFS で管理するように指示し、このコマンドが必要な設定を自動的に .gitattributes ファイルに追加する様子を確認しました。次に、.gitattributes ファイルの内容を調べ、git lfs track によって追加されたエントリを見て、filter=lfsdiff=lfsmerge=lfs-text 属性の意味を理解しました。

また、リポジトリ内の Git LFS の存在と設定を確認する別の方法として、git lfs env コマンドを調査しました。このコマンドは、Git LFS 環境に関する詳細な情報を提供し、バージョン、リポジトリ設定、追跡されるファイルのパターンなどを含み、LFS の設定状況を包括的に把握することができます。最後に、設定されたパターンに一致するファイルを追加してコミットすることで、LFS の追跡をテストする方法を学び、Git LFS が大きなファイルを正しく処理し、その全内容をメインの Git リポジトリに保存しないことを確認しました。