Skip to content
01.版本控制»01.Git»07.Git工具»LV235-git-lfs的使用.md

LV235-git-lfs的使用

一、准备工作

1. Github 仓库

前面已经知道免费版 Gitee 是不支持 Git LFS 存储的,所以这里我们用 Github 来测试,我们需要准备一个 github 仓库:

image-20251109183653646

2. 大文件

这里可以找一个 100M 以上的文档作为测试。

image-20251109184149064

二、不使用 Git LFS

我们不使用 Git LFS 推送一下:

shell
git add .
git commit -m "添加文档"
git push -u origin master

【例】

image-20251109184402115

我们看一下 Github 仓库就会发现此次推送失败,没有任何文件推送上去。

三、Git LFS

1. 创建一个 Git LFS 仓库

要创建一个新的支持 Git LFS 的仓库,需要在创建仓库后运行 git lfs install:

shell
git lfs install

【例】

shell
D:\sumu_blog\lfs-test [master ×]> git lfs install
Updated Git hooks.
Git LFS initialized.

2. 跟踪文件

要将存储库中的文件类型与 Git LFS 关联,请输入 git lfs track,后跟要自动上传到 Git LFS 的文件扩展名。例如这里我们需要追踪两个pdf文件:

shell
git lfs track "*.pdf"

Git LFS 支持的模式与.gitignore 支持的模式相同。

【例】

shell
D:\sumu_blog\lfs-test [master ×]> git lfs track "*.pdf"
Tracking "*.pdf"

这个时候,在git仓库顶层目录生成了一个 .gitattributes文件:

shell
*.pdf filter=lfs diff=lfs merge=lfs -text

.gitattributes 是一种 Git 机制,用于将特殊行为绑定到某些文件模式。Git LFS 自动创建或更新.gitattributes 文件,以将跟踪的文件模式绑定到 Git LFS 过滤器。

3. 重新提交

shell
git add .
git commit -a --amend --no-edit
git push -u origin master

【例】

shell
D:\sumu_blog\lfs-test [master × +1 ~2 -0 !]> git add .

D:\sumu_blog\lfs-test [master × +1 ~2 -0 ~]> git commit -a --amend --no-edit
[master 8db8125] 添加文档
 Date: Sun Nov 9 18:42:37 2025 +0800
 4 files changed, 8 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 README.md
 create mode 100644 Rockchip RK3568 TRM Part2 V1.1-20210301.pdf
 create mode 100644 Rockchip RK3588 TRM V1.0-Part2 20220309.pdf

D:\sumu_blog\lfs-test [master ×]> git push -u origin master      
Uploading LFS objects: 100% (2/2), 181 MB | 5.5 MB/s, done.
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 667 bytes | 667.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:sumumm/lfs-test.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.

这一次我们会发现,就没有报错了,所有文件正常提交,我们看一下仓库:

image-20251109190416880

我们可以点开这个文档看一下:

image-20251109190500484

对于使用Git LFS管理的文件,会有这种Stored with Git LFS的提示,但是对于我们来说,是无感的,因为它还是存在这个仓库中,我们还是可以直接看到它。

4. 停止使用 Git LFS

你可以通过从.gitattributes 文件中删除相应的行,或者通过运行 git lfs untrack 命令来停止使用 Git LFS 跟踪特定模式,命令格式和track是一样的,例如

shell
git lfs untrack "*.pdf"

5. 拉取仓库

我们尝试拉取一下刚才的仓库:

shell
git clone https://github.com/user-name/repo-name.git

【例】

shell
D:\sumu_blog> git clone git@github.com:sumumm/lfs-test.git    
Cloning into 'lfs-test'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (6/6), done.
Updating files: 100% (4/4), done.

然后它就有可能一直卡在这里了,可能是网络问题,也肯能是下载的太慢,因为git clone默认是直接会执行checkout操作的,会直接拉取git lfs管理的大文件,我们不想这样的话也可以采取手动拉大文件的方式:

shell
git clone --no-checkout https://github.com/sumumm/lfs-test.git    
git lfs fetch
git lfs pull

image-20251109192132435

这个时候就能看到进度了,看到网速很慢,所以前面的可能就是单纯的慢。

莫道桑榆晚 为霞尚满天.