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.sample


0 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 --cached
 diff --git a/.gitattributes b/.gitattributes
 new file mode 100644
 index 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈智慧路灯安全智能供电方案设计——安科瑞赵嘉敏

摘要: 智慧路灯,作为智慧城市、新基建、城市更新的主要组成部分,近些年在各大城市已得到很好的落地和 应用,但其与传统路灯相比集成大量异元异构电子设备,这些设备的供电电压、接口形式、权属单位各不相同, 如何设计一…

网络高清视频监控平台的告警联动(或报警联动)功能介绍

一、告警联动的定义和概念 视频监控领域的告警联动功能是指通过视频监控平台,将多个相关系统或设备进行集成,实现统一管理和自动化控制。当监控场景中出现异常情况时,系统能够自动触发相应的报警和响应,以保障安全和及时处理异常事…

[算法与数据结构][c++][python]:C++与Python中的赋值、浅拷贝与深拷贝

C与Python中的赋值、浅拷贝与深拷贝 写在前面:Python和C中的赋值与深浅拷贝,由于其各自语言特性的问题,在概念和实现上稍微有点差异,本文将这C和Python中的拷贝与赋值放到一起,希望通过对比学习两语言实现上的异同点&a…

test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试(Fuzz Testing) test fuzz-…

【Helm 及 Chart 快速入门】02、Helm 基本使用

目录 一、Helm 基本使⽤ 1.1 搜索 chart 应⽤ 1.2 部署 chart 应⽤ 1.3 删除 chart 应⽤ 1.4 定制参数部署应⽤ 1.5 chart 应⽤升级 1.6 chart 应⽤回滚 一、Helm 基本使⽤ 1.1 搜索 chart 应⽤ 使⽤ helm search repo 关键字可以查看相关 charts: […

数据结构之二叉搜索树(Binary Search Tree)

数据结构可视化演示链接,也就是图片演示的网址 系列文章目录 数据结构之AVL Tree 数据结构之B树和B树 数据结构之Radix和Trie 文章目录 系列文章目录示例图定义二叉搜索树满足的条件应用场景 示例图 二叉 线形(顺序插入就变成了线性树,例如插入顺序为&…

安卓逆向某脚本-autojs逆向

引言 上次讲到,为了静态分析,逆向了所有加密字符串。来看下今天我们看下他的流程。 分析app 启动之后会出现一个更新按钮,如图:我们先看下一般autojs 项目是怎么打包的,打包的时候可以选择加密类型,选择dex 类型,然后就是把js 文件变成dex 。 我们先看下一般autojs 项目是…

用html和css实现一个加载页面【究极简单】

要创建一个简单的加载页面&#xff0c;你可以使用 HTML 和 CSS 来设计。以下是一个基本的加载页面示例&#xff1a; HTML 文件 (index.html): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

scVI与MultiVI

scVI&#xff1a;https://docs.scvi-tools.org/en/stable/user_guide/models/scvi.html MultiVI&#xff1a;https://docs.scvi-tools.org/en/stable/user_guide/models/multivi.html 目录 scVI生成推理任务 MultiVI生成推理 scVI single cell variational inference提出了一个…

JVM工作原理与实战(十一):双亲委派机制

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、双亲委派机制 1.双亲委派机制详解 2.父类加载器 3.双亲委派机制的主要作用 二、双亲委派机制常见问题 总结 前言 ​JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字…

【漏洞复现】ActiveMQ文件上传漏洞(CVE-2016-3088)

Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务&#xff0c;是面向消息中间件&#xff08;MOM&#xff09;的最终实现&#xff0c;它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Ap…

Mars3D与mars3d-cesium版本间兼容造成3dtiles和gltf数据处理相关记录

说明&#xff1a; 1.在引入Mars3D SDK后正常可以在F12打印的信息中可以看到Mars3D和Cesium版本信息。 2.在项目的package.json文件中同样可以看到安装后的版本号。 Mars3D对Cesium版本对应关系&#xff1a; 1.正常情况下mars3d依赖的cesium均是最新版本&#xff0c;并且对cesi…

如何将Redis、Zookeeper、Nacos配置为Windows系统的一个服务

说明&#xff1a;当我们在Windows上开发时&#xff0c;不可避免的会用到一些中间件&#xff0c;如Redis、Zookeeper、Nacos等等&#xff0c;当在项目中使用到本地的这些服务器时&#xff0c;我们需要把本地的服务器启动&#xff0c;会开启下面这样的一个窗口。 Redis服务器&am…

npm i sass -D的含义

命令 npm i sass -D 是一个在Node.js项目中使用npm&#xff08;Node Package Manager&#xff09;安装Sass预处理器的命令。这个命令的各个部分含义如下&#xff1a; npm: 这是Node Package Manager的缩写&#xff0c;一个用于Node.js的包管理和分发工具&#xff0c;允许开发者…

78.乐理基础-非常见拍号如何打拍子

内容来源于&#xff1a;三分钟音乐社 上一个内容&#xff1a;76.乐理基础-打拍子-二连音、四连音-CSDN博客 非常见的拍子就是下图中除了红圈里的五个拍号的拍号 最大优先级的规则&#xff1a; 规则一&#xff1a;所有的拍号绝对&#xff0c;永远都可以以一拍为单位&#xff0…

[论文精读]Brain Network Transformer

论文网址&#xff1a;[2210.06681] Brain Network Transformer (arxiv.org) 论文代码&#xff1a;GitHub - Wayfear/BrainNetworkTransformer: The open-source implementation of the NeurIPS 2022 paper Brain Network Transformer. 英文是纯手打的&#xff01;论文原文的s…

001 Golang-channel-practice

最近在练习并发编程。加上最近也在用Golang写代码&#xff0c;所以记录一下练习的题目。 第一道题目是用10个协程打印100条信息&#xff0c;创建10个协程。每个协程都会有自己的编号。每个协程都会被打印10次。 package mainimport ("fmt""strconv" )func …

如何在iOS手机上查看应用日志

引言 在开发iOS应用过程中&#xff0c;查看应用日志是非常重要的一项工作。通过查看日志&#xff0c;我们可以了解应用程序运行时的状态和错误信息&#xff0c;帮助我们进行调试和排查问题。本文将介绍两种方法来查看iOS手机上的应用日志&#xff0c;并提供相应的操作步骤。 …

Hyperledger Fabric 消息协议

Fabric 中大量采用了 gRPC 消息在不同组件之间进行通信交互&#xff0c;主要包括如下几种情况&#xff1a;客户端访问 Peer 节点&#xff0c;客户端和 Peer 节点访问排序节点&#xff0c;链码容器与 Peer 节点交互&#xff0c;以及多个 Peer 节点之间的 Gossip 交互。 消息结构…

工业企业-专利引用、被引用数据(1985-2019年)

工业企业的专利引用和被引用数据提供了关于这些企业创新活动和技术影响力的信息。专利引用数据指的是工业企业在申请专利时引用的既有专利数量&#xff0c;这反映了企业在研发过程中对现有技术的依赖和融合。被引用数据则指其他后续专利对这些企业专利的引用次数&#xff0c;这…