0 前言
某天下午在远程工作站上装 ROS 把我搞烦了,抽时间写了个开源脚本工具 rostaller,完全一键安装,自动在线更新 YAML
文件,不用再去应对手动安装时必然会遇到的 rosdep init
报错和 rosdep update
报错。工具最初的版本包含一个 .tar.gz
格式的压缩文件,向 GitHub 进行推送时被拒绝:文件大小超限(100 MB)。对于该问题,可以使用 Git Large File Storage (LFS) 对要上传的大文件进行托管。
1 准备工作
1.1 安装 Git LFS
Windows
直接官网下载二进制文件进行安装即可。
Ubuntu
安装
curl
1
sudo apt install curl
请求并执行 Git LFS 前置脚本
1
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
安装 Git LFS
1
sudo apt install git-lfs
1.2 为当前用户配置 Git LFS
每个用户执行一次即可:
1 | git lfs install |
2 创建含有大文件的仓库
GitHub 端仓库的创建过程无异,不再赘述,对应的本地仓库的创建过程如下:
初始化
1
git init
配置远程仓库地址
1
git remote add origin git@github.com:your_username/your_repo.git
告诉 Git LFS 需要追踪哪些文件。例如,追踪
.tar.gz
格式的压缩文件1
git lfs track "*.tar.*"
上一步骤将自动生成
.gitattributes
文件,将其添加到暂存区1
git add .gitattributes
向暂存区中添加剩余变更、提交、推送
1
2
3git add --all
git commit -m "first commit"
git push orgin main
3 拉取含有大文件的 GitHub 仓库
直接 clone
即可。若在安装 Git LFS 前执行了 clone
,则拉取下来的仓库中并不包含大文件本体,取而代之的是指向其 LFS 存储对象的文件指针,此种情况下,可通过在本地仓库中执行下述命令来 拉取文件指针所指向的完整对象:
1 | git lfs pull |
4 存在的问题
Git LFS 免费用户有 1 GB 的免费存储空间和每月 1 GB 的下载带宽,下载使用的总流量超限后会导致仓库无法 clone
:
1 | Downloading rosdistro.tar.gz (105 MB) |
大意是,使用的 LFS 下载流量达到带宽限制,需要购买更多数据包。一般使用勉强够了。
参考
- Git Large File Storage
- Git LFS 的使用
- GitHub Docs - 管理仓库存档中的 Git LFS 对象
- GitHub Docs - 关于存储和带宽使用情况