Git LFS 介绍
简介
Git LFS(Large File Storage)是为了解决在版本控制系统中存储大型二进制文件而设计的一个扩展。Git 的核心专注于文本变更历史,对于像视频、音频文件或者大型代码库中的对象这样的大文件来说可能不太适合。
当启用 Git LFS 后,它会检测到指定格式的大文件(如 .jpg, .mp4 等),并将这些文件的元数据保存在常规的 Git 仓库中。而实际的文件内容会被存储在一个独立的后端服务器(默认是 GitHub 或者 GitLab 的支持)上。这意味着当你 clone 一个包含 LFS 文件的仓库时,只会下载对应的元数据,并会在你需要访问大文件内容时从远程获取。
安装
在大多数操作系统中,你可以通过以下命令安装Git LFS:
1 | # 对于macOS |
常用用法
查看版本
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 | git add . |
clone包含lfs的仓库时只建立lfs索引而非下载lfs大文件本身
使用
GIT_LFS_SKIP_SMUDGE
环境变量:1
GIT_LFS_SKIP_SMUDGE=1
Linux 下可以直接这样一行克隆实现:
1
GIT_LFS_SKIP_SMUDGE=1 git clone <repository-url>
这将跳过大文件的下载。如果以后需要拉取大文件,可以使用
使用 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的基