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
コミットメッセージにより、.gitattributes
と large_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 リポジトリを軽量に保ち、大きなファイルの内容は別途保存されます。