git 大文件上传受限解决办法

  • 问题
  • 解决办法1
  • 花钱,购买LFS
  • 使用
  • 解决办法2
  • 放弃同步大文件


问题

我在写一个数据处理代码的手,由于处理的csv文件大小为1.3G,处理完之后更大了,然后像往常一样,我把代码通过git做版本控制,准备传到github上的时候,问题出现了。

添加的时候就已经出现了警告

gitlab 项目导入导出 gitlab导入项目太大限制_git


然后在push的时候,我等了好一会,传了700多MB的时候提示失败。xxx.csv文件超出100MB限制。

解决办法1

花钱,购买LFS

大文件存储功能,Git Large File Storage (LFS),可用于处理项目中的大文件,在git中只会记录对此大文件的引用,不会将其加入.git文件夹中,使得项目体积不会猛增,checkout和add时速度更快。LFS合适用于psd,视频等。
与LFS同步时使用特殊命令git lfs fetch 分支名。在git lfs install之后,使用以下格式的命令git lfs track "*.iso"来追踪大文件,此命令会将相关信息存入.gitattributes文件中。之后所有放入的iso都会正常放入LFS中。git add时不用手工做特殊处理。上传时会显式提示使用了LFS功能。

使用

安装LFS:https://git-lfs.github.com/ 在Repo中初始化。

git lfs install

然后 跟踪一下你要push的大文件的文件或指定文件类型 git lfs track "*.csv", 当然还可以直接编辑.gitattributes文件
以上已经设置完毕, 其余的工作就是按照正常的 add , commit , push 流程就可以了 。

目前 Git LFS的总存储量为1G左右,超过需要付费。

gitlab 项目导入导出 gitlab导入项目太大限制_github_02

解决办法2

放弃同步大文件

1、当被跟踪的文件里面有不想跟踪的文件时,使用命令git rm删除文件。如:
git rm --cached xxx.csv 删除readme1.txt的跟踪,并保留在本地。
git rm --f xxx.csv 删除readme1.txt的跟踪,并且删除本地文件。
然后git commit即可。但是git status查看状态时还是会列出来。
2、每次用git status查看状态时总是列出未被跟踪的文件,可以通过.gitignore文件达到目的。
git init的目录下建立.gitignore文件,使用如下语法进行填写文件即可。

  • /dataset/ 过滤整个文件夹
  • *.zip 过滤所有.zip文件
  • /dataset/xxx.csv 过滤某个具体文件