介绍
希望将 jdk-8u202-linux-x64.tar.gz (186M) 上传到 github ,从而生成 jdk-8u202-linux-x64.tar.gz 的直链,用于构建包含 jdk 的 docker 镜像
github
github 文件大小限制
- GitHub 限制存储库中允许的文件大小。 如果尝试添加或更新大于 50 MiB 的文件,您将从 Git 收到警告。 更改仍将成功推送到仓库,但您可以考虑删除提交,以尽量减少对性能的影响。
- 如果通过浏览器将文件添加到存储库,该文件不得大于 25 MiB
- GitHub 阻止大小超过 100 MiB 的文件。要跟踪超出此限制的文件,必须使用 Git Large File Storage (Git LFS)
- Git LFS 处理大文件的方式是存储对仓库中文件的引用,而不实际文件本身。 为满足 Git 的架构要求,Git LFS 创建了“指针文件”,充当对实际文件(存储在其他位置)的引用。 GitHub 在仓库中管理此指针文件。 克隆仓库时,GitHub 使用指针文件作为映射来查找大文件。–> 无法生成文件直链
- Git LFS 的不同最大大小限制取决于 GitHub 计划,免费版文件大小上线为2
- 如果需要在存储库中分发大文件,则可以在 GitHub.com 上创建版本,而不是跟踪文件。参阅 分发大型二进制文件
- 如果需要在存储库内分发大型文件,可以在 GitHub.com 上创建发行版。 发行版允许您打包软件、发行说明和指向二进制文件的链接,以供其他人使用。 有关详细信息,请访问“关于发行版”
- 不限制二进制发行版文件的总大小,也不限制用于传递它们的带宽。 但每个文件必须小于 2 GiB。
所以,无法直接将体积为 186MB 的 jdk-8u202-linux-x64.tar.gz 上传到仓库,可行的方式如下
- 使用 git lfs,问题:无法生成直链(点击链接即可下载)
- 使用 发行版
- 将 jdk 拆分为最大100MB的子包,上传到 github 获取直链,然后在 Dockerfile 中下载所有子包后,将子包合并为完整包
- 拆分子包命令:
tar -czf - jdk-8u202-linux-x64.tar.gz | split -b 100m -d - jdk8u202.tar.gz
- 合并子包:
cat jdk8u202.tar.gz* | tar -zxf -
- 拆分子包命令:
git lfs 上传文件介绍
github 使用 git lfs 上传大于 100MB 文件
- ubuntu 安装 git lfs
- 安装 git lfs 软件仓库:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
- 安装 git lfs:
sudo apt-get install -y git-lfs
- 安装 git lfs 软件仓库:
- 进入 git 项目目录:
cd large_file_test
- 追踪待上传的大文件:
git lfs track files/jdk-8u202-linux-x64.tar.gz
- 执行
git lfs track
命令后,会生成.gitattribute
文件,文件内记录了待上传文件的信息,将.gitattribute
文件上传后,才可以上传大文件
- 执行
- 将
.gitattribute
文件上传git add .gitattribute
git commit -m "add .gitattribute"
git push origin main
- 上传大文件
git add files/jdk-8u202-linux-x64.tar.gz
git commit -m "add jdk-8u202-linux-x64.tar.gz"
git push origin main
需要注意的是,通过git-lfs上传文件是有空间限制的,免费用户如果上传的文件超过了1G,账号就会被冻结,所以大家在上传前一定要检查一下自己还剩多少空间(Settings - Billing and plans - Plans and usage - Git LFS Data)。
问题
-
batch response: Git LFS is disabled for this repository.
如果在上传过程中出现如下报错:
1 2
batch response: Git LFS is disabled for this repository. Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done
就说明你的账号被冻结了,需要在GitHub后台提交解封申请。
https://support.github.com/contact -
gitee 使用 git lfs上传失败
1 2 3 4
$ git push origin mainwarning: Authentication error: Authentication required: LFS only supported repository in paid or trial enterprise. batch response: LFS only supported repository in paid or trial enterprise. Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done. error: failed to push some refs to 'https://gitee.com/msdemt/large-files.git'
解决:
删除.git/hooks/pre-push
1
rm .git/hooks/pre-push
然后执行上传
1
git push origin main