Git LFS 大文件存储

Git 碰到大文件的困境

Git 是业界流行的分布式版本控制工具,本地仓库与远端仓库同样保存了全量的文件和变更历史,这样让代码协作变得简单和高效。但也正因为如此,Git针对大型文件(例如图片、视频或其他二进制文件)的版本控制,也会存在一些问题,主要有两点:

效率变慢:不管实际上用户是否使用到这些大文件的历史,都需要把每一个文件的每一个版本下载到本地仓库。毫无疑问,下载耗时的增加给用户带来了更多的等待时间。
空间变大:一个Git仓库存放的大型的文件越多,加之伴随着其关联提交不断增多,Git仓库会以非常快的速率膨胀,占用更多的磁盘空间。

这两方面的问题,让很多喜爱Git的用户非常的"难过",例如一些游戏开发工程师、设计工程师和文档管理者等等,他们每天面对的很多仓库都是这种情况。一方面,他们希望继续使用Git的版本控制和工作流能力,在另一方面Git仓库中大文件及其历史不断增多,导致工作效率越来越差。所以,针对上述的问题,Git LFS应运而生,是目前针对大文件场景下的主流的解决方案。

什么是Git LFS大文件存储?

Git LFS (Large File Storage)是一个开源的Git大文件版本控制的解决方案和工具集,工具自身是基于Golang进行实现,并在Github上开源。原理上是通过对Git客户端进行扩展的方式,从而集成并兼容了原生的Git客户端。Git LFS良好的设计,让用户感觉在对大文件处理过程中,与普通Git的使用方式上没有任何差别,也就是说,在使用方式上Git LFS对用户是完全透明的。

如何使用 Git LFS

Git LFS 为了解决大文件托管的效率问题,提供了五大特性,抽象看来为:

  • 更大:支持GB级别的大文件版本控制
  • 更小:让Git仓库空间占用减小
  • 更快:仓库的克隆和拉取更快
  • 透明:Git使用上对用户完全透明
  • 兼容:权限控制上完全兼容(兼容Codeup权限控制)

下载Git LFS

  • Linux Debian 和 RPM packages:https://packagecloud.io/github/git-lfs/install
  • Mac: brew install git-lfs
  • Windows:目前lfs已经集成在了Git for Windows 中,直接下载和使用最新版本的Windows Git即可。
  • 直接下载二进制包:https://github.com/git-lfs/git-lfs/releases
  • 依据源码构建:https://github.com/git-lfs/git-lfs

安装 Git LFS

  • 如果你选择使用二进制包下载后安装,直接执行解压后的./install.sh脚本即可,这个脚本会做两个事情:
    • 在$PATH中安装Git LFS的二进制可执行文件
    • 执行git lfs install命令,让当前环境支持全局的LFS配置
# 让仓库支持LFS
$ git lfs install
Updated pre-push hook.
Git LFS initialized.

查看Git LFS相关的Hook(使用时可跳过)*

输入tree命令

下载 tree 命令的 二进制包,安装 tree 命令工具
打开进入 Tree for Windows 页面,选择下载 Binaries zip 文件。
解压压缩包,找到压缩包内的 bin 目录,将 bin 目录下的 tree.exe 复制
找到 安装Git的文件夹,找到该文件夹下的usr\bin 目录,将 tree.exe 粘贴到该目录下,安装即完成
测试tree是否安装成功
进入Git Bash,输入tree -L 1命令,显示结果如下:
在这里插入图片描述

$tree .git/hooks/
.git/hooks/
|-- applypatch-msg.sample
|-- commit-msg.sample
|-- fsmonitor-watchman.sample
|-- post-checkout
|-- post-commit
|-- post-merge
|-- post-update.sample
|-- pre-applypatch.sample
|-- pre-commit.sample
|-- pre-merge-commit.sample
|-- pre-push
|-- pre-push.sample
|-- pre-rebase.sample
|-- pre-receive.sample
|-- prepare-commit-msg.sample
|-- push-to-checkout.sample
|-- sendemail-validate.sample
`-- update.sample0 directories, 18 files

此时Git LFS相关的Hook还未替换

配置Git LFS

为了将以示例.bigfile后缀结尾的文件使用Git LFS进行存储,需要执行track命令建立追踪:

$git lfs track "*.bigfile"
Tracking "*.bigfile"

使用 lfs track 命令时,"*.bigfile"的双引号非常重要,否则将影响pattern的文件匹配功能

同理,如需跟踪其他后缀的文件,如.jpg,可以写为git lfs track "*.jpg"

执行git lfs track(不带任何参数),可以查看当前已跟踪的Git LFS File 类型:

$git lfs track
Listing tracked patterns*.bigfile (.gitattributes)
Listing excluded patterns

track 命令实际上是修改了仓库中的.gitattributes文件,将该文件add添加到暂存区。

$git add .gitattributes 

我们可以通过以下命令查看文件相关变动(使用时可略过):

$git diff --cacheddiff --git a/.gitattributes b/.gitattributesnew file mode 100644index 0000000..c441ad2--- /dev/null+++ b/.gitattributes@@ -0,0 +1 @@+*.bigfile filter=lfs diff=lfs merge=lfs -text

让 Git LFS 配置生效

为了让".bigfile"的配置生效,需要将.gitattributes文件进行提交:
···
$git commit -m "Add "
.bigfile" LFS config "
[master (root-commit) d052478] Add “.bigfile" LFS config
1 file changed, 1 insertion(+)
create mode 100644 .gitattributes
$git log --oneline
d052478 (HEAD -> master) Add "
.bigfile” LFS config
···

大文件上传

通过上述配置即可将.bigfile后缀命中了.gitattributes中设置的".bigfile"的文件格式,所以将做为 LFS 文件处理。
接下来,将
.bigfile的变更提交并推送到远端
至此,这个仓库中.bigfile的文件已经成功使用LFS进行管理,而其他文件使用Git进行管理。

参考资料

Git LFS 支持大文件存储
大仓库管理
Git LFS 使用注意事项
LFS 迁移指南
Windows下安装tree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/237477.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

序章 熟悉战场篇—了解vue的基本操作

了解vue 的基本目录: dist 是打包后存放的目录(后续可以改)node_modules 是依赖包public 是静态index页面src 是存放文件的目录assets 是存放静态资源的目录components 是存放组件的目录views 是存放页面文件的目录(没有views 自己新建一个)A…

Jetpack Compose -> 声明式UI Modifier

前言 本章主要介绍下 Compose 的声明式 UI 以及初级写法&#xff1b; 什么是声明式UI 传统UI 传统 UI 方式来声明UI <androidx.appcompat.widget.LinearLayoutCompat android:layout_width"match_parent" android:layout_height"match_parent&quo…

YOLOv5改进 | 二次创新篇 | 结合iRMB和EMA形成全新的iEMA机制(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,为什么这么说,从去年的三月份开始对于图像领域的论文发表其实是变难的了,在那之前大家可能搭搭积木的情况下就可以简单的发表一篇论文,但是从去年开始单纯的搭积木其实发表论…

C# 图解教程 第5版 —— 第24章 预处理指令

文章目录 24.1 什么是预处理指令24.2 基本规则24.3 符号指令&#xff08;#define、#undef &#xff09;24.4 条件编译&#xff08;#if、#else、#elif、#endif&#xff09;24.5 条件编译结构24.6 诊断指令&#xff08;#warning、#error&#xff09;24.7 行号指令&#xff08;#li…

【C++入门到精通】智能指针 [ C++入门 ]

阅读导航 引言一、什么是智能指针二、为什么需要智能指针三、内存泄漏1. 什么是内存泄漏&#xff0c;内存泄漏的危害2. 内存泄漏的示例&#xff0c;以及解决方法3. 内存泄漏分类&#xff08;1&#xff09;堆内存泄漏(Heap leak)&#xff08;2&#xff09;系统资源泄漏 4. 如何检…

Sqoop的增量数据加载策略与示例

当使用Apache Sqoop进行数据加载时&#xff0c;增量数据加载策略是一个关键的话题。增量加载可以仅导入发生变化的数据&#xff0c;而不必每次都导入整个数据集&#xff0c;这可以显著提高任务的效率。本文将深入探讨Sqoop的增量数据加载策略&#xff0c;提供详细的示例代码&am…

大语言模型面试问题

自己在看面经中遇到的一些面试题&#xff0c;结合自己和理解进行了一下整理。 transformer中求和与归一化中“求和”是什么意思&#xff1f; 求和的意思就是残差层求和&#xff0c;原本的等式为y H(x)转化为y x H(x)&#xff0c;这样做的目的是防止网络层数的加深而造成的梯…

管理软件供应链中网络安全工具蔓延的三种方法

软件开发组织不断发展&#xff0c;团队成长&#xff0c;项目数量增加。技术堆栈发生变化&#xff0c;技术和管理决策变得更加分散。 在这一演变过程中&#xff0c;该组织的 AppSec 工具组合也在不断增长。在动态组织中&#xff0c;这可能会导致“工具蔓延”。庞大的 AppSec 工…

Java--RSA非对称加密的实现(使用java.security.KeyPair)

文章目录 前言实现步骤测试结果 前言 非对称加密是指使用不同的两个密钥进行加密和解密的一种加密算法&#xff0c;调用方用使用服务方提供的公钥进行加密&#xff0c;服务方使用自己的私钥进行解密。RSA算法是目前使用最广泛的公钥密码算法。Java提供了KeyPairGenerator类要生…

2024年AMC8模拟考试实测流程、注意事项和常见问题

和往年的AMC8比赛一样&#xff0c;在正式比赛的前一周左右会开放两天的模拟考试时间&#xff0c;AMC8的主办方建议所有的参赛选手重视且参加模拟考试&#xff0c;以测试设备、熟悉流程&#xff0c;避免将来正式考试不小心违规&#xff0c;或者设备不给力。 2024年的AMC8模拟考…

OFBiz RCE漏洞复现(CVE-2023-51467)

漏洞名称 Apache OFBiz 鉴权绕过导致命令执行 漏洞描述 Apache OFBiz是一个非常著名的电子商务平台&#xff0c;是一个非常著名的开源项目&#xff0c;提供了创建基于最新J2EE/XML规范和技术标准&#xff0c;构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式…

五、带登录窗体的demo

做了一个简单的带登录窗体的demo&#xff0c;有用户名和密码不能为空的验证&#xff0c;原理是在main.cpp的主函数入口处&#xff1a; 1、将默认的MainWindow主窗体注释。 2、新建一个formlogin登录窗体&#xff0c;在主函数中先运行登录窗体。 3、在登录窗体中引用MainWind…

Android json功能解析

1. 简介 JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案&#xff08;有点类似于正则表达式 &#xff0c;获得了当今大部分语言的支持&#xff09;。  JSON采用兼容性很高的文本格式&#xf…

路由器02_静态路由DHCP

一、静态路由 &#xff11;、静态路由特点 由管理员手工配置&#xff0c;是单向的&#xff0c;缺乏灵活性 &#xff12;、默认路由 默认路由是一种比较特殊静态路由&#xff0c;一般用于末节&#xff08;末梢&#xff09;网络&#xff0c;直接指定目标为任何地方 二、静态…

nodejs+vue+ElementUi音乐分享社交网站77l8j

本文介绍的系统主要分为两个部分&#xff1a;一是前台界面&#xff1a;用户通过注册登录可以实现音乐播放、新闻浏览、留言评论等功能&#xff1b;另一个是后台界面&#xff1a;音乐网站管理员对用户信息进行管理&#xff0c;上传更新音乐资源&#xff0c;发布最新音乐资讯等功…

Casper Network (CSPR)2024 年愿景:通过投资促进增长

Casper Network (CSPR&#xff09;是行业领先的 Layer-1 区块链网络之一&#xff0c;通过推出了一系列值得关注的技术改进和倡议&#xff0c;已经为 2024 年做好了准备。 在过去的一年里&#xff0c;Casper Network (CSPR&#xff09;不断取得里程碑式的进展&#xff0c;例如推…

高性能RPC框架解密

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

linux安装系统遇到的问题

这两天打算攻克下来网络编程&#xff0c;发现这也确实是很重要的一个东西&#xff0c;但我就奇了怪了&#xff0c;老师就压根没提&#xff0c;反正留在我印象的就一个tcp/ip七层网络。也说正好&#xff0c;把linux命令也熟悉熟悉&#xff0c;拿着我大一课本快速过过 连接cento…

一个简易的PHP论坛系统

一个简易的PHP论坛系统 php课程设计&#xff0c;毕业设计 预览 技术 bootstrap 4.x jquery css php mysql 5.7 目录结构 登录 管理员 admin/123456 测试用户 user1/123456 更多文章和源码获取查看