Git LFS 介绍

简介

Git LFS(Large File Storage)是为了解决在版本控制系统中存储大型二进制文件而设计的一个扩展。Git 的核心专注于文本变更历史,对于像视频、音频文件或者大型代码库中的对象这样的大文件来说可能不太适合。

当启用 Git LFS 后,它会检测到指定格式的大文件(如 .jpg, .mp4 等),并将这些文件的元数据保存在常规的 Git 仓库中。而实际的文件内容会被存储在一个独立的后端服务器(默认是 GitHub 或者 GitLab 的支持)上。这意味着当你 clone 一个包含 LFS 文件的仓库时,只会下载对应的元数据,并会在你需要访问大文件内容时从远程获取。

安装

在大多数操作系统中,你可以通过以下命令安装Git LFS:

1
2
3
4
5
6
7
8
9
# 对于macOS
brew install git-lfs

# 对于Windows,使用 scoop,或者安装git for windows 自带了lfs插件
scoop install git-lfs

# 对于Linux
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

常用用法

查看版本

1
git lfs -v

初始化Git LFS

在git项目中中初始化Git LFS:

1
git lfs install

这个命令会设置一些Git钩子,使Git LFS在后续的git操作中自动生效。

跟踪新文件

如果你想跟踪一个新的大文件,使用以下命令:

1
git lfs track "path/to/file"

跟踪一类文件,如: “*.bin”

1
git lfs track "*.bin"

这会在.gitattributes文件中添加一行,告诉Git LFS要管理这个文件。

查看跟踪的文件

要查看当前跟踪的文件列表,可以查看.gitattributes文件:

1
cat .gitattributes

或者使用:

1
git lfs track

提交和推送

当你添加、提交并推送包含Git LFS文件的变更时,Git LFS会自动处理这些文件:

1
2
3
git add .
git commit -m "Add large files"
git push origin main

clone包含lfs的仓库时只建立lfs索引而非下载lfs大文件本身

  1. 使用 GIT_LFS_SKIP_SMUDGE 环境变量

    1
    GIT_LFS_SKIP_SMUDGE=1

    Linux 下可以直接这样一行克隆实现:

    1
    GIT_LFS_SKIP_SMUDGE=1 git clone <repository-url>

    这将跳过大文件的下载。如果以后需要拉取大文件,可以使用

  2. 使用 Git 配置

    运行以下命令来配置 Git LFS 的 smudge 过滤器,以跳过大文件的下载:

    1
    git config --global filter.lfs.smudge "git-lfs smudge --skip"

    设置好后,后面克隆仓库就会默认过滤大文件,只会建立索引。

下载LFS文件

git lfs fetch 会下载文件到本地的 .git/lfs 目录。

如果需要手动下载LFS管理的文件, --all 参数表示获取所有分支和标签上的LFS对象。

1
git lfs fetch --all

如果要指定版本哈希,可以使用

1
git lfs fetch 5c4e309b81234abcde1234567890f123

拉取lfs文件

git lfs pull 会进一步将这些文件放到工作目录中

拉取全部文件

1
git lfs pull

拉取所有以bin作为扩展名的文件

1
git lfs pull --include="*.bin"

拉取指定文件

1
git lfs pull --include="file.bin"

查看LFS文件列表:

要列出当前仓库中所有被Git LFS跟踪的文件,可以运行:

1
git lfs ls-files

这些命令覆盖了日常使用Git LFS的基