git lfs 管理大文件
最后更新于:2022-04-02 02:53:42
[TOC]
> [教程](https://zzz.buzz/zh/2016/04/19/the-guide-to-git-lfs/)
## 概述
全名叫 "Git Large File Storage"
- 对二进制文件进行额外的管理
![](https://upload-images.jianshu.io/upload_images/1059995-670f795346b86292?imageMogr2/auto-orient/strip|imageView2/2/w/1000/format/webp)
## 下载
ubuntu
```
sudo apt-get install git-lfs
```
## 安装
```
git lfs install
```
## 配置
使用`git lfs track`追踪需要使用 Git LFS 管理的文件。如:
```
git lfs track "*.psd"
```
也可以手动编辑 Git 仓库根目录下的`.gitattributes`文件,如:
```
*.psd filter=lfs diff=lfs merge=lfs -text
```
## 命令
```
# 查看当前使用 Git LFS 管理的匹配列表
git lfs track
# 使用 Git LFS 管理指定的文件
git lfs track "*.psd"
# 不再使用 Git LFS 管理指定的文件
git lfs untrack "*.psd"
# 查看当前 Git LFS 对象的状态
git lfs status
# 枚举目前所有被 Git LFS 管理的具体文件
git lfs ls-files
# 检查当前所用 Git LFS 的版本
git lfs version
# 针对使用了 LFS 的仓库进行了特别优化的 clone 命令,显著提升获取
# LFS 对象的速度,接受和 `git clone` 一样的参数。 [1] [2]
git lfs clone https://github.com/user/repo.git
```
## 场景
### 迁移已有的 git 仓库使用 git lfs 管理
```
# 重写 master 分支,将历史提交中的 *.zip 都用 git lfs 进行管理
git lfs migrate import --include-ref=master --include="*.zip"
# 重写所有分支及标签,将历史提交中的 *.rar,*.zip 都用 git lfs 进行管理
git lfs migrate import --everything --include="*.rar,*.zip"
```
>[warning] 重写历史后的提交需执行 git commit --force,请确认在本地的操作合适无误后再进行提交
### 只推送仓库本身,而不推送任何 LFS 对象
如果当前仓库启用了 LFS,而还需要将该仓库备份至其他不支持 LFS 的 git 服务器
```
git push --no-verify backup master
```
### 获取当前 commit 下包含的 LFS 对象的当前版本
如果起初获取代码时,没有一并获取 LFS 对象,而随后又需要这些被 LFS 管理的文件时,可以单独执行 LFS 命令来获取并签出 LFS 对象
```
git lfs fetch
git lfs checkout
# 或
git lfs pull
```
### 仅获取指定目录下的 LFS 对象
配置 LFS 下载对象时仅包含`images`文件夹:
```
git config lfs.fetchinclude 'images/**'
```
';