热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitlfs指南

什么是git-lfsGithub对文件大小的限制如果你在命令行用gitpush50MB的文件,你会收到一个warning,但是你仍然可以正常push,但是100MB的时候就无法

什么是 git-lfs


Github 对文件大小的限制

如果你在命令行用 git push > 50 MB 的文件,你会收到一个 warning,但是你仍然可以正常 push,但是 > 100 MB 的时候就无法 push

如果你在浏览器要上传文件的话,限制更为严重,不能超过 25 MB

另外有几点值得注意:



  1. Github 建议仓库的大小理想情况下不要超过 1 GB,最好不要超过 5 GB

  2. Github 从来不建议把仓库当成一种备份工具


为什么需要 gif-lfs

前面提到的 Github 对文件大小的限制是一点

另外因为每次我们在使用 git commit 的时候,其实是给当前的仓库创建了一次快照,本质是全仓库的克隆,如果大文件太多是很不好的,你的 Git 仓库会越来越大


什么情况下不需要用 gif-lfs



  1. 文件没有超过限制当然就没有必要用了

  2. 如果是要分发二进制文件(比如 *.exe)等,此时直接用 Github 提供的 release 功能就好了


git-lfs 原理

使用 gif-lfs 之后,在仓库中存储的其实是对大文件的引用,可以理解为指针。而真正的大文件托管在 Git Lfs 的服务器上

Github 给不同用户的 git-lfs 提供的额度不一样,免费用户和 Pro 用户都是 2 GB


引用文件长什么样子

比如官方文档里面提到的例子:

version https://git-lfs.github.com/spec/v1
oid sha256:4cac19622fc3ada9c0fdeadb33f88f367b541f38b89102a3f1261ac81fd5bcb5
size 84977953

其中 version 是你正在使用的 git-lfs 的版本,oid 是标志符(id),size 是文件的真实大小


开始使用 git-lfs


如何安装 git-lfs (Mac 环境下)

> brew install git-lfs
> git lfa install # 如果输出为 Git LFS initialized. 就是正常安装好了

Case 1. 从 0 开始配置使用 git-lfs

我们要指定 git-lfs 会把哪些文件当作大文件,指定方式比如有:



  1. 指定文件后缀名——git lfs track "*.filetype"

  2. 指定某个目录下的所有文件——git lfs track "directory/*"

  3. 具体指定某个文件——git lfs track "path/to/file"

> mkdir
> cd
> git init
> git lfs track "*.filetype" # 比如 *.zip
# 其实 git lfs track 会修改 .gitattributes 文件的内容,可以做一个快速的验证
# > cat .gitattributes
# *.zip filter=lfs diff=lfs merge=lfs -text
# 下面假定在 Github 有一个远程仓库供我们使用
# 往仓库里加你先前指定的文件类型的大文件
> git add .
> git commit -m ""
> git branch -M main
> git remote add origin git@github.com:/.git # 这里替换为自己的用户名和远程仓库名
> git push -u origin main
# 此时命令行会显示
# > uploading LFS objects
# 如果没有采用 git-lfs,则显示如下内容
# > Enumerating objects: 3, done.
# Counting objects: 100% (3/3), done.
# Delta compression using up to 8 threads
# Compressing objects: 100% (2/2), done.

Case 2. 要在已有的仓库上用 git-lfs 追踪某些文件

此时只是简单的使用 git lfs track "" 是没用的,因为你之前的 commit 已经生成了快照,你无法追踪历史中的这些大文件。

git-lfs 只会在你开始设置的此刻之后追踪新生成的指定文件

可以快速做个验证,假设我们还在这个仓库里⬇️

> ls > test1.txt
> ls -l > test2.txt
> git add test1.txt test2.txt
> git commit -m "Add txt files"
# 假设我们现在要把 txt 文件当成是大文件,我们可能会想这么做
> git lfs track "*.txt"
> git add .gitattributes
> git commit -m "Track *.txt files"
> git lfs ls-files # 此时你会发现 git-lfs 并没有追踪 txt 文件
> echo "hello" > test3.txt
> git add test3.txt
> git commit -m "Add test3.txt"
> git lfs ls-files # 此时你可以在输出中看到 test3.txt

正确的方法是使用 git lfs migrate,这里只列举了简单的用法,更复杂的可以看看手册。比如可以用 --include-ref= 指定分支,多个分支的时候最好一个分支一个分支地迁移,最后是 git push --all -f

> git lfs migrate import --include="*.txt" # 在当前分支上执行
> git lfs ls-files # 此时可以发现 text1.txt 和 text2.txt 也被追踪到了
> git push --force # 让远程仓库也改过来

Case 3. 不再跟踪某些文件

> git lfs untrack "*.filetype"
> git rm --cached "*.txt"

其他常用命令



  1. 查看当前 git-lfs 正在追踪的文件类型——git lfs track

  2. 查看当前 git-lfs 正在追踪哪些文件——git lfs ls-file


参考



  1. https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • moment 国际化设置中文语言 (全局) 及使用示例 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • JavaScript实现表格数据的实时筛选功能
    本文介绍如何使用JavaScript实现对表格数据的实时筛选,帮助开发者提高用户体验。通过简单的代码示例,展示如何根据用户输入的关键字动态过滤表格内容。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
author-avatar
帅呆了2014_329
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有