关于 Git 大文件上传这件小事

这篇具有很好参考价值的文章主要介绍了关于 Git 大文件上传这件小事。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多年后,当我在命令行中熟练地操作 Git 的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年轻的人们嫌弃“苍老”,除却生理上不可逆转的自然衰老,更多的或许是一种心态上的衰老。以前,我是非常鄙夷在 Git 仓库里提交 Word 或者 Excel 文件这种行为的,甚至连理由都给得十分正当,即:这种文件不利于差异的对比和合并。后来,参与的项目越来越多,渐渐认识到 Markdown 始终是一种小众的格式,你没有办法要求所有人都去适应 Markdown。所以,当我说我在心态上变成了一个老人的时候,其实是指,我不再对这件事情那么执着。当然,人生本来就是一个解决麻烦再制造麻烦的过程。当你默许了在 Git 仓库里提交非文本文件的行为,当这些非文本文件随着时间推移变得越来越大时,就出现了 Git 大文件上传、存储等等一系列的问题。因此,今天这篇文章,我们来聊聊 Git 里的大文件。

提交前的未雨绸缪

其实,博主不愿意在 Git 仓库里上传 Word 或者 Excel 文件,一个最为直接的理由是,它会成为我们拉取或者推送代码时的累赘。君不见,腾讯硬生生在手机 QQ 里内置了一个虚幻 4 引擎,想象一下,如果把这么多的文件都放到 Git 仓库里,每次做一点修改该有多痛苦啊!事实上,Github 对文件大小的限制是 100M,Gitlab 对文件大小的限制则是 600M,一旦超过这个限制,就会被判定为大文件。因此,Atlassian、GitHub 等组织一起开发了针对 Git 的 Large File Storage 扩展,即:Git LFS。其原理是延迟地下载大文件的相关版本来减少大文件对仓库的影响,具体来说,就是在 checkout 到工作区的时候才会真正去下载大文件的内容。如果大家想了解更多 Git LFS 的细节,可以阅读下面这份文档:https://www.atlassian.com/git/tutorials/git-lfs,这里不再考虑对其进行二次加工。

关于 Git 大文件上传这件小事

当你准备向一个 Git 仓库提交大文件的时候,首先,你需要下载和安装 Git LFS 扩展并执行命令:

git lfs install

其次,在 Git 仓库中,你需要通过 git lfs track 命令告诉 Git LFS,你希望它帮你管理哪些文件:

git lfs track "*.jpg"

这里以 *.jpg 为例,它表示希望 Git LFS 对所有的 .jpg 格式的文件进行管理,这一步的结果是生成一个名为 .gitattributes 的文件。因此,理论上你可以直接编辑这个文件来达到相同的目的:

*.jpg filter=lfs diff=lfs merge=lfs -text

最后,你需要确保 .gitattributes 文件能被 Git 仓库追踪:

git add .gitattributes

一旦完成了这个准备工作,你就可以像平时一样提交和推送变更:

git add awesome.jpg
git commit -m "Add a awesome image file"
git push origin main

下图演示了 Git LFS 从初始化到应用的整个过程,可以注意到,这个过程中会生成各种钩子脚本:

关于 Git 大文件上传这件小事

提交后的亡羊补牢

扁鹊见蔡桓公的故事,告诉我们防微杜渐的道理。可如果你和博主一样,是在提交了一个大文件以后,才开始接触 Git LFS 的相关内容。那么,你大概会遇到下面的错误:

关于 Git 大文件上传这件小事

你可能会想,既然是这个文件的大小超过了 Github 的限制,那我把这个文件删除掉是不是就可以了呢?经过博主一番挣扎,发现这个思路完全是徒劳的。因为这个大文件就像持续了三年的新冠病毒一样,只要存在被它感染过的历史记录,都会在推送时提示上面的错误。所以,删除这个大文件并不能真正解决问题,我们必须要确保此前的提交历史中没有这个大文件。下面分享一个神奇的命令 git filter-branch :

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch /src/CSharpWasm/mono-6.12.0.182-x64-0.msi'

通过这个命令,我们就可以重写整个提交历史:

关于 Git 大文件上传这件小事

此时,我们只需要按提交大文件前的步骤,重新提交该文件即可,并且可以突破 100M 的限制:

关于 Git 大文件上传这件小事

本文小结

我写作的话题,基本上可以分为两类:有计划的和无计划的。显然,这一篇属于后者,它就像育碧旗下的开放世界,当你漫游其中总会遇到那些令人意外的支线任务。我个人挺喜欢这种由点及面的认知模式,即从一个特定的问题逐步过渡到一个更为宽泛的知识或者体系上面。在这篇文章里,无法提交一个超过 100M 的大文件是表,不了解 Git LFS 是里,更有趣的一点是,解决问题的过程通常是由“”反推出“”,而撰写博客的过程则是由“”顺推出“”。从这个角度来看的话,对读者“揣着明白装糊涂”这才是最难把握的一个分寸,平时写长文章总担心写不清楚,而写短文章则担心像流水账。对于 Git LFS 来说,Git 仓库存储的其实是一个指针文件,真正的内容则是存储在 LFS 服务器里,主流的代码托管平台如 Github、Gitlab 等都支持 Git LFS,我们只需要安装 Git LFS 的客户端扩展即可。当然,我对非文本文件的合并依然持悲观态度,想象一下,两个人同时修改了一个大文件,一个已经推送到远程,一个已经提交到本地,那么,当他们尝试合并代码的时候,又会发生什么事情呢?作为一名程序员,每天被安排排查和解决问题,简直是家常便饭,可解决问题会有尽头吗?我想,大概率是没有的罢!文章来源地址https://www.toymoban.com/news/detail-437800.html

参考链接

  • https://git-lfs.github.com
  • https://github.com/git-lfs/git-lfs/wiki/Tutoria
  • https://www.atlassian.com/git/tutorials/git-lfs

到了这里,关于关于 Git 大文件上传这件小事的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++/PTA 关于深度优先搜索和逆序对的题应该不会很难吧这件事

    背景知识 深度优先搜索与 DFS 序 深度优先搜索算法(DFS)是一种用于遍历或搜索树或图的算法。以下伪代码描述了在树 T 上进行深度优先搜索的过程: 令 r 为树 T 的根,调用 DFS(T, r, L) 即可完成对 T 的深度优先搜索,保存在链表 L 中的排列被称为 DFS 序。相信聪明的你已经发

    2024年02月05日
    浏览(37)
  • 关于上传文件大小受限问题

    一般控制台上会出现像这样   ***1048576 bytes.这大小限制 1、问题描述:       因为上传的file文件超过了spring默认配置的最大值1048576 bytes,上传文件我们通常情况下是使用MultipartFile接口类接收前端上传的文件,可见对于MultipartFile文件的默认限制也是1048576 bytes,即1M。 2、问题

    2024年02月17日
    浏览(37)
  • 关于layui upload上传组件上传文件无反应的问题

    最近使用layui upload组件时,碰到了上传文件无反应的问题,感到非常困惑。 因为使用layui upload组件不是一次两次了,之前每次都可以,这次使用同样的配方,同样的姿势,为什么就不行了呢? 照例先百度一番,出来的文章都是说第二次上传同样的文件无反应的问题,这个有

    2024年02月07日
    浏览(51)
  • 关于文件上传功能的安全方面的考量

    场景 最近做了一个文件上传的功能,下面说进行了哪些方面实现 安全实现 验证登录 验证登录用户是否有文件上传接口的权限 限制文件大小 检验文件后缀,文件头 文件单独存储,可以考虑使用第三方服务 比如:七牛云 设置文件的rwx权限, rw根据实际情况设置,但是一定不能设置

    2024年01月16日
    浏览(30)
  • 关于如何通过 postman 发起上传文件的请求,postman上传图片视频

    我们通常会使用 postman 发起请求,测试数据。有些请求将图片,视频等文件上传到服务器,如何通过 postman 实现上传文件呢? 定义请求方式和请求路径 请求体选择 body body 下选择 form-data 在参数中输入 file key 值输入完 file 后,在下拉框中选择 file 此时 value 会显示一个 Select

    2024年02月11日
    浏览(57)
  • 使用Git将文件夹上传到Github以及使用Git LFS上传大文件

    使用Git将文件夹上传到Github以及使用Git LFS上传大文件

    2024年04月14日
    浏览(57)
  • Flutter笔记:关于Flutter中的大文件上传(上)

    Flutter笔记 关于Flutter中的大文件上传(上) 大文件上传背景与 Flutter 端实现文件分片传输 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134302751 本系列上下两篇文章,包括 Flutter 端和 Django 端(后

    2024年02月03日
    浏览(53)
  • 关于 华为云:服务器上传文件夹后显示403

    问题原因: 华为云:当前使用的操作系统默认的umask 值是0027 上传文件后出现权限403 的问题: 解决1:修改 /etc/profile 文件 027 = 022 查看是否修改: 指令:umask = 0022 需要删除之前的 文件重新上传, 不要覆盖上传 修改 操作系统默认的umask 权限 但是 不生效-永久解决问题: 参

    2024年02月16日
    浏览(48)
  • vue+element ui 关于表格中多行增加上传文件操作

    先创建一个表格标签,表格中需要先写上上传文件的组件 在data中定义一个表格数组,数组中的fileIdList是我需要存储的信息,可自行参考 表格多行上传的难点在于,需要把上传的文件和表格中的行一一对应,所以在handleSuccess和handleRemove方法中多传入了一个scope,scope参数是自

    2024年02月14日
    浏览(48)
  • 利用git上传本地文件

    1、建立仓库 2.然后刷新网站,获取下载链接,备用。 3、接下来在本地创建一个文件夹, 4、把github上面的仓库克隆到本地 git clone https://github.com/xxxxx(https://github.com/xxxxx替换成你之前复制的地址) 5、把需要上传的文件拷贝到刚下载的新文件夹内,在新文件夹内执行操作 6、

    2024年01月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包