git-lfs使用笔记

Git-LFS

在这里插入图片描述

Git LFS:(Large File Storage)把音乐、图片、视频等指定的任意文件存在 Git 仓库之外,而在 Git 仓库中用一个占用空间 1KB 不到的文本指针来代替文件的存在,通过把大文件存储在 Git 仓库之外,可以减小 Git 仓库本身的体积,使克隆 Git 仓库的速度加快,也使得 Git 不会因为仓库中充满大文件而损失性能;

核心思想:把需要进行版本管理、但又占用很大空间的那部分文件独立于 Git 仓库进行管理。从而加快克隆仓库本身的速度,同时获得灵活的管理 LFS 对象的能力

下载与安装

前提:Git 的版本不低于 1.8.5

详见官网:https://git-lfs.github.com/

Windows

  • 下载
  • 安装
  • 执行 git lfs install

Linux

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

macOS 系统

brew install git-lfs
git lfs install

常用命令

基本使用

#配置需要使用 Git LFS 管理的文件
git lfs track "*.pdf" 
#在Git仓库根目录下的 .gitattributes中生成:*.pdf filter=lfs diff=lfs merge=lfs -text;同样可以通过修改.gitattributes文件来配置追踪文件

# 不再使用 Git LFS 管理指定的文件
git lfs untrack "*.pdf"
#查看lfs管理的文件
git lfs track 
# 类似git status,查看当前 Git LFS 对象的状态
git lfs status
# 枚举所有被 Git LFS 管理的文件
git lfs ls-files
# 查看 Git LFS 版本
git lfs version
#git lfs clone通过合并获取 LFS 对象的请求,减少了 LFS API 的调用,并行化 LFS 对象的下载,从而达到显著的速度提升。同样也兼容没有使用 LFS 的仓库。即无论要克隆的仓库是否使用 LFS,都可以使用 git lfs clone 命令来进行克隆。
#目前最新版本的 git clone 已经能够提供与 git lfs clone 一致的性能,因此自 Git LFS 2.3.0 版本起,git lfs clone 已不再推荐使用。
git lfs clone url/ssh

只获取仓库本身,而不获取任何 LFS 对象

GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/user/repo.git
# 或
git -c filter.lfs.smudge= -c filter.lfs.required=false clone https://github.com/user/repo.git

#这两条命令适用于其他git命令;如checkout、ret等

只推送仓库本身,而不推送任何 LFS 对象

#如果当前仓库启用了 LFS,而还需要将该仓库备份至其他不支持 LFS 的 git 服务器,那么可以在 push 时加上 --no-verify 参数来跳过 LFS 对象的提交
git push --no-verify backup master

获取当前 commit 下包含的 LFS 对象的当前版本

#如果起初获取代码时,没有一并获取 LFS 对象,而随后又需要这些被 LFS 管理的文件时,可以单独执行 LFS 命令来获取并签出 LFS 对象:
git lfs fetch
git lfs checkout
# 或
git lfs pull

仅获取指定目录下的 LFS 对象

git config lfs.fetchinclude 'dir/**'
#随后的命令git checkout, git reset, git lfs fetch, git lfs pull 等都会只处理所指定的文件夹

git config lfs.fetchexclude 'dir/**'
#选择仅排除指定的文件夹

获取指定时间的版本

#Git LFS 相关命令在获取 LFS 对象时,默认仅会获取该对象当前被引用的版本,如果想要一次获取 LFS 对象的当前及最近版本的话,我们首先需要对最近进行定义:
git config lfs.fetchrecentcommitsdays 7
#7 表示同时下载过去 7 天内的版本(相对于获取的 LFS 对象的时间),该项配置默认值为 0,即不获取过去的版本,而仅获取指定的版本

场景

迁移已有的 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"

注意:

  • 重写历史后的提交需执行 git commit --force
  • 如有迁移至 git lfs 前的仓库的多份拷贝,其他拷贝可能需要执行 git reset --hard origin/master 来重置其本地的分支,注意执行 git reset --hard 命令将会丢失本地的改动。

参考资料

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值