使用 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
注意,.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 仓库的轻量级,而大文件内容则单独存储。