Git LFS 大文件存储

news2024/11/20 20:26:34

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3566环境搭建

环境:vmware16,ubuntu 18.04 获取SDK前需要安装 sudo apt update sudo apt install -y repo git python 下载完成后先验证一下MD5码 md5sum rk356x_linux_release_v1.3.0b_20221213_split_dir/*firefly_split* 解压 rk3566ubuntu:/path/to$ mkdir ~…

JPackage指令将可执行Jar包打包成EXE运行程序

jpackage是jdk14正式加入的一个用于独立打包的工具。 官网简介翻译: jpackage工具将以Java应用程序和Java运行时映像作为输入,并生成一个包含所有必要依赖项的Java应用程序映像。它可以生成特定于平台格式的本机软件包,例如Windows上的exe或…

Linux信号处理浅析

一、信号从发送到被处理经历的过程 1、常见概念 (1) 信号阻塞 阻塞,即被进程拉黑,信号被发送后,分为两种情况,一种是被阻塞了(被拉黑了),一种是没有被阻塞。 (2) 信号未决 在信号被进程处理…

xilinix 7系列器件生成已加密文件和已经过身份验证的文件

注释 :如需了解更多信息,请参阅《使用加密确保 7 系列 FPGA 比特流的安全》(XAPP1239)。 要生成加密比特流,请在 Vivado IDE 中打开已实现的设计。在主工具栏中,依次选择“Flow” → “Bitstream Settings”(流程 >…

【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)

1. 版本管理 1.1 初始化git仓库 git init 生成一个.git 目录 git config --global user.name 用户名 git config --global user.email 邮箱 1.2 查看.gitignore vim .gitignore 1.3 添加删除到缓存区 git status 查看状态 git add 文件名 git rm 文件名 1.4 提交当前记录 …

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

在学习爬虫前的准备

1. 写一个爬虫程序需要分几步 获取网页内容。 我们会通过代码给一个网站服务器发送请求,它会返回给我们网页上的内容。 在我们平时使用浏览器访问服务器内容是,本质上也是向服务器发送一个请求,然后服务器返回网页上的内容。只不过浏览器还会…

Spark八:Spark性能优化

Spark性能调优 Spark调优的方法,包括RDD使用、文件读取,partition 学习资料:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、Spark调优之RDD算子调优 1.1 RDD复用 在对RDD进行计算时,要避免相同的算子和计算逻辑下对…

高防服务器、高防 IP 和高防 CDN 之间有什么区别?

网络运营人员最头痛的是什么? 网络攻击无疑名列前茅。一旦企业遭受网络攻击,所面临的损失可能是无法估量的。那么,如何有效地抵御网络攻击呢? 高防 IP、高防 CDN 和高防服务器是当前主流的防御手段。那何为“高防”呢&#xff1…

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决

目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问,域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性,我们在实现移动端的游戏转微信小程序…

植物大战僵尸小游戏抖音快手直播搭建弹幕插件教程

植物大战弹幕插件功能介绍 该插件由梦歌技术部团队支持开发,本插件软件通过监测抖音弹幕信息,获取礼物数据触发脚本插件对应的功能; 功能目前基本上已经完善,后期功能会陆续上线支持更新,全新的脚本监测稳定方便实用…

2024年1月9日学习总结

目录 学习目标学习内容联邦学习基础:why, what, howwhy?what?how? 联邦学习的例子——CIFAR-10数据集(分类问题)1、import libararies2、hyper-parameters3、加载并且划分数据4、创建神经网络模型5、helper…

易基因:ChIP-seq等揭示WWOX基因通过上调Myc促进骨肉瘤发生发展的表观调控机制|Cell Death Dis

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 骨肉瘤(Osteosarcoma, OS)是一种高侵袭性骨肿瘤,主要影响儿童和青少年。这种恶性肿瘤与不良临床结果相关,尤其是肺转移。由于其罕见性和生…

【7-zip密码】7-Zip如何取消文件加密的密码

7z压缩包设置了密码,解压的时候就需要输入正确的密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了7z压缩包的密码…

Ubuntu20二进制方式安装nginx

文章目录 1.下载nginx安装包2.安装nginx3.安装出现的问题及解决方案错误1:错误2:错误3: 4.常用命令5.知识扩展: 1.下载nginx安装包 nginx官网:http://nginx.org/en/download.html 选择稳定的nginx版本下载。 2.安装ngi…

SWM341系列之SWM34SRET6介绍

SWM341系列的介绍 本文介绍了华芯微特SWM341系列主要性能,和其系列之一的SWM34SRET6-50驱动4.3寸800*480 TFTLCD显示的例程应用。 SWM341系列性能 SWM341是一款基于ARM Cortex-M33的32位微控制器,片上包含精度为 1%以内的 20MHz/40MHz 时钟,最…

Java18:网络编程

一.对象序列化: 1.对象流: ObjectInputStream 和 ObjectOutputStream 2.作用: ObjectOutputSteam:内存中的对象-->存储中的文件,通过网络传输出去 ObjectInputStream:存储中的文件,通过网络传输出去…

状态管理小能手:Cookie 和 Session

1. 引言 大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 假期抢票的尴尬事件 最近小❤在抢出行的高铁票时,发生了一件尴尬的事情。 这不是临近假期了嘛&#xf…

【数字图像处理】水平翻转、垂直翻转

图像翻转是常见的数字图像处理方式,分为水平翻转和垂直翻转。本文主要介绍 FPGA 实现图像翻转的基本思路,以及使用紫光同创 PGL22G 开发板实现数字图像水平翻转、垂直翻转的过程。 目录 1 水平翻转与垂直翻转 2 FPGA 布署与实现 2.1 功能与指标定义 …