突破github的100M单个大文件上传限制

本文介绍如何利用GitLFS解决GitHub上传大于100M文件的问题,并提供实际操作步骤。

偶尔把几本电子书传到github上,其中一本关于c++的有147M(在本地磁盘占用了150M空间),使用普通的方式,最终会被github 服务器拒绝。在github 官网上也有了相关说明,具体请查看:

  1. https://help.github.com/articles/working-with-large-files/
  2. https://help.github.com/articles/conditions-for-large-files/

简单的说,github 会在你上传文件大于50M的时候,给予警告 ; 大于100M的时候给出 server reject(拒绝上传)

解决方案
  • 维持单个文件在100M以内,保持原仓库,剔除单个文件大于100M的
  • 突破github限制,支持单个文件超出100M (使用 Git LFS)
    • 这也是无意中浏览解决问题的方案时看到的 有关Google Maps SDK的问题
      这里给了我们一个很好的处理方案: Git LFS 全名为:Git Large File Storage
    • Git LFS的官方网址在这里: https://git-lfs.github.com/,官网上有很详细的说明,现在来简单说下使用方式:先安装 Git LFS 的客户端,然后在将要push的仓库里重新打开一个bash命令行:
      • 只需设置1次 LFS : git lfs install
      • 然后 跟踪一下你要push的大文件的文件或指定文件类型 git lfs track "*.pdf" , 当然还可以直接编辑.gitattributes文件
      • 以上已经设置完毕, 其余的工作就是按照正常的 add , commit , push 流程就可以了 :
        1. git add yourLargeFile.pdf
        2. git commit -m "Add Large file"
        3. git push -u origin master
    • 备注: 我在push那本c++书的时候一些小细节:
      ① 在最终push的时候会打印出如下信息:
      Git LFS: (0 of 0 files, 1 skipped) 0 B / 0 B, 147.30 MB skipped
      乍一看,表面上是跳过了该文件,但是回到github上查看,真的push上去了 ,commit信息为:
      C++ Primer Plus 完整版 中文版 第六版 影印版 无目录 有页数.pdf Add a 150M pdf file 9 minutes ago
      点击该文件查看,可看到:147 MB Stored with Git LFS
      ② 目前 Git LFS的总存储量为1G左右,超过需要付费。
      这里写图片描述
      ③ 小伙伴们快来试试吧 !

其他知识点

<think>好的,我现在需要解决用户提出的关于GitHub上传单个文件大小限制的问题。用户提到GitHub上传限制100MB,想知道如何解决这个问题。首先,我需要回顾一下GitHub的相关规定,确保信息准确。根据之前的记忆,GitHub确实对单个文件有大小限制,超过100MB的文件无法直接通过常规的git push上传,而超过50MB的文件会收到警告。用户可能需要处理大文件,比如数据集、媒体文件等,这时候需要找到合适的解决方案。 接下来,我需要考虑用户可能的场景。用户可能是在尝试上传一个大文件时遇到了问题,或者正在计划项目结构,担心文件大小限制。这时候,解决方案通常包括使用Git LFS(Large File Storage)、分割文件、使用云存储链接,或者压缩文件等方法。需要逐一分析这些方法的优缺点,以及具体操作步骤。 首先,Git LFS是GitHub官方推荐的解决方案,适合需要频繁管理大文件的用户。但需要注意,免费账户的存储和带宽限制,如果超过可能需要付费。然后,分割文件适用于偶尔上传大文件的情况,但会增加管理复杂度。使用云存储链接则适合不需要在代码库中直接存储大文件的情况,比如外部资源引用。压缩文件虽然简单,但可能不适合已经压缩过的文件类型。 另外,要提醒用户避免使用git commit --amend或bfg工具来删除历史中的大文件,因为这些操作会改变提交历史,可能影响协作。同时,用户需要了解每个方法的适用场景,比如开源项目可能更适合Git LFS,而私有项目可以考虑云存储。 还需要检查是否有相关的引用内容可以支持回答。在用户提供的引用中,提到了Travis CI和航运业的信息,但这些似乎与当前问题无关。因此,可能不需要引用这些内容,主要依靠GitHub的官方文档和常见解决方案。 最后,要确保回答结构清晰,分点说明每种方法,并提供具体的操作步骤或命令示例。同时,生成相关问题,帮助用户进一步了解相关主题,比如Git LFS的使用细节、处理已提交的大文件的方法,以及替代GitHub的平台选择。</think>### GitHub上传大文件解决方案 GitHub单个文件有严格的大小限制: 1. **普通上传**:单个文件**超过100MB**无法通过`git push`推送 2. **警告阈值**:超过50MB的文件会收到警告 3. **硬性限制**:严格禁止100MB+文件提交到仓库历史记录中[^1] #### 推荐解决方案 **方案一:使用Git LFS(官方推荐)** ```bash # 安装Git LFS git lfs install # 跟踪大文件类型(示例跟踪所有.mp4文件) git lfs track "*.mp4" # 常规git操作 git add .gitattributes git add your_large_file.mp4 git commit -m "Add large file with LFS" git push origin main ``` *优势*:适合频繁更新大文件的项目 *注意*:免费账户每月1GB存储+1GB带宽 **方案二:文件分割** ```bash # 分割文件(生成part-aa, part-ab等) split -b 99M large_file.zip large_file.part- # 合并文件 cat large_file.part-* > reconstructed_file.zip ``` *适用场景*:一次性大文件分发 **方案三:云存储+链接引用** ```markdown [下载数据集](https://your-cloud-storage.com/dataset.zip) ``` *优势*:不占用仓库空间 *推荐平台*:AWS S3、Google Drive、阿里云OSS **方案四:文件压缩** ```bash # 使用高压缩率算法 7z a -t7z -m0=lzma2 -mx=9 dataset.7z raw_data/ ``` *注意*:对已压缩格式(jpg/zip等)效果有限 #### 紧急处理已提交的大文件 若意外提交了大文件: ```bash # 1. 从历史记录中清除 git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch BIG_FILE" \ --prune-empty --tag-name-filter cat -- --all # 2. 强制推送 git push origin --force --all ``` *注意*:这会改变提交历史,需通知协作者[^1]
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值