我有一些csv文件大于github的文件大小限制为100.00 MB。我一直在尝试使用Git Large File Storage扩展。
来自LFS - "Large file versioning- Version large files—even those as large as a couple GB in size—with Git."
我在关注的文件夹中应用了以下内容:
git lfs track "*.csv"
然而,当我推动时:
remote: error: File Time-Delay-ftn/Raw-count-data-minor-roads1.csv is 445.93 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File Time-Delay-ftn/Raw-count-data-major-roads.csv is 295.42 MB; this exceeds GitHub's file size limit of 100.00 MB
当我查看相关文件夹时:
-rw-r----- 1 user staff 42B 23 Oct 12:34 .gitattributes
-rw-r--r-- 1 user staff 1.3K 19 Oct 14:32 DfT_raw_major_manipulation.py
-rw-r--r-- 1 user staff 1.2K 16 Oct 15:08 DfT_raw_minor_manipulation.py
drwxr-xr-x 21 user staff 714B 22 Oct 11:35 Driving/
-rwxr-xr-x@ 1 user staff 295M 19 Oct 14:47 Raw-count-data-major-roads1.csv*
-rwxr-xr-x@ 1 user staff 446M 16 Oct 14:52 Raw-count-data-minor-roads1.csv*
当我修改.gitattributes文件时,您可以看到lfs设置:
*.csv filter=lfs diff=lfs merge=lfs -text
我做错了什么?
更新
当我查询
时git lfs ls-files
我没有得到任何回报。这表明尽管.csv过滤器成功应用于.gitattributes文件,但lfs没有获取csv文件
答案 0 :(得分:31)
从 Git LFS 2.2.0 开始,您可以使用 git lfs migrate
命令。在您的情况下,它看起来像这样:
git lfs migrate import --include="*.csv"
在此之后,您应该能够将更改推送到原点。
有关 git lfs migrate
的更多信息可在 Git LFS 2.2.0 release note site 和 git-lfs-migrate command documentation 上找到。
答案 1 :(得分:20)
只需将git-lfs配置添加到现有存储库,就不会追溯性地将大文件转换为LFS支持。这些大文件将保留在您的历史记录中,GitHub将拒绝您的推送。
您需要重写历史记录,以便将git-lfs引入现有提交。我推荐最近使用added LFS support的BFG仓库清理工具。
您应该能够通过以下方式转换CSV文件的历史使用情况:
$ java -jar ~/bfg-1.12.5.jar --convert-to-git-lfs '*.csv' --no-blob-protection
答案 2 :(得分:8)
我昨天遇到了同样的问题而破解了它。我无法推动,似乎我的大文件都没有在lfs中。
可能有更好的方法,但这对我有用。我有一个2.5 gig数据的大型回购。
我设置了一个新的repo然后在其中设置lfs。
git lfs init
然后我配置了各种文件类型
git lfs track "*.pdb"
git lfs track "*.dll"
然后我发布了我的更改并推了推。
然后我添加了我的大文件。我使用了sourcetree,并在输出说明中说明了与我的通配符匹配的大文件,它提交的是微小的txt文件。 (对不起,我没有记录这些,但应该是显而易见的)。
然后我推了推,我看到'跳过文件',推送很快就成功了。
所以问题可能是尝试将文件添加到历史记录中已有的lfs。您只能添加新文件。您可以清理这些文件的repo。
注意:我确实发现很多与我的通配符匹配的文件没有被lfs选中。拾取了不同文件夹中的类似文件,但不是全部。我尝试使用完整路径显式添加这些文件。
git lfs track "Windows/bin/myBigFile.dll"
但这也没有帮助。最后我因时间限制而放弃了。
您还应该使用gitHub检查存储限制。我购买了额外的50gig以满足我的要求。
克隆repo现在可以单独下载文件,一切都运行良好。
答案 3 :(得分:8)
当我的某些csv文件在先前的提交中合并而github拒绝了我的推送时,我遇到了同样的问题。后来我找到了对我有用的命令。
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch fixtures/11_user_answer.json'
# for my case
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch tensorflow.csv'
答案 4 :(得分:4)
我遇到了同样的问题,但已使用filter-branch
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
如果您有大型项目,则需要一些时间, 然后推它
git push
答案 5 :(得分:1)
我遇到了这个错误:
remote:error:文件client / static / static-version / 20171221_221446.psd是223.61 MB;这超过了GitHub的文件大小限制为100.00 MB
因为我已经从这个文件夹中删除了这个文件,创建了.gitignore文件,并试图提交几次,我不知道它是缓存的,我无法推送到github。 在我的帮助下:
git filter-branch --index-filter'git rm --cached --ignore-unmatch client / static / static-version / 20171221_221446.psd'
我放置完整文件路径(从上面的错误)将其从缓存中删除。之后,推动成功
答案 6 :(得分:0)
如果您知道哪个提交引入了较大的提交,您也可以尝试将该提交与随后引入了Git LFS的提交进行压缩。
例如,如果大型提交是3之前的提交(如git status
所示),则可以执行以下操作:
git rebase -i HEAD~3
然后,在交互式对话框中将第一个之后的所有“ pick”用法替换为“ squash”。
然后
git push origin --force
答案 7 :(得分:0)
答案 8 :(得分:0)
这个解决方案在 Ubuntu 20.04 上对我有用
安装 Git 大文件存储 (git-lfs)
sudo apt-get install git-lfs
git-lfs install
要将任何预先存在的文件转换为 Git LFS,例如其他分支上的文件或您之前提交历史中的文件,请使用 git lfs migrate 命令
git lfs migrate import --include="*.ipynb"
选择要跟踪的文件类型
git lfs track "*.ipynb"
更新 git 属性
git add .gitattributes
现在推送到 git git commit -m "提交消息" git push
有关存储和带宽使用情况,请参阅
答案 9 :(得分:0)
在终端中尝试以下命令。它将解决 lfs 问题。
git lfs migrate import --include="*.csv"
答案 10 :(得分:-1)