推送到github repo时出错

时间:2014-03-06 14:47:30

标签: git github

我在提交提交时收到以下错误

remote: warning: File var/log/system.log is 57.82 MB; this is larger than recommended maximum file size of 50 MB
remote: error: GH001: Large files detected.
remote: error: Trace: 96d01231dffac3fbc3ba1eb2e9f01a93
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File var/report/752246136671 is 100.86 MB; this exceeds github's file size limit of 100 MB

我尝试了下面逐步列出的命令:

git push -u origin master
当我输入git status时,

无法在git文件中找到这些提交。

请您告诉我如何在没有这些错误的情况下将我的更改推送到repo?我猜这些文件都在github索引中。我还尝试了git rm --cached var / log / system.log。但没有结果。

撞到我的头!

更新1 请根据以下专家的两个答案找到Gists:

更新2 请在下面找到我试图删除的文件的git Log详细信息:

回答的问题

请找到解决我问题的最终答案的要点

  感谢git expert VonC,Holger Just以及所有其他专家提供他们的输入和堆栈溢出。

4 个答案:

答案 0 :(得分:6)

git rmgit rm --cached不足以删除存储在您的仓库中的历史记录。

你需要:

  • 使用BFG Repo Cleaner,如上所述。

    bfg --strip-blobs-bigger-than 1M  my-repo.git
    
  • 使用git gc --agrressive --prune=now(在BFG之后),详见“Reduce git repository size

  • git push -f强制您的远程仓库上的新历史记录。

答案 1 :(得分:1)

该消息包含有关两个文件的信息。 var/log/system.log生成警告,但会被推送。 var/report/752246136671太大,因此无法推动。因此,您必须至少删除后一个文件。

在Github允许您推送之前,您必须从所有提交中删除该文件。在之前添加文件后,仅在以后的提交中删除该文件是不够的。

根据消息中链接的the article,您可以执行以下两个建议操作之一:

如果您在最近的提交中添加了该文件,则可以将其更改为删除文件:

git rm --cached var/report/752246136671
# Stage our giant file for removal, but leave it on disk

git commit --amend -CHEAD
# Amend the previous commit with your change
# Simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well

git push
# Push our rewritten, smaller commit

或者您可以使用The BFG过滤存储库并从所有提交中删除该文件。如果您已将文件添加到git历史记录中(而不是仅在最近的提交中),则必须执行此操作,您必须清除历史记录。即使以后再删除它,Github也不允许在任何提交中推送大文件。这是因为在这种情况下,文件仍然是历史记录的一部分,因此会使回购文件膨胀。

您可以从https://github.com/rtyley/bfg-repo-cleaner/releases/latest安装BFG。

您可以通过运行此命令删除任何大于100MB的文件的任何指示:

cd /path/to/your/git/repo
java -jar bfg.jar --strip-blobs-bigger-than 100M
# Git history will be cleaned - files in your latest commit will *not* be touched

请注意,这将更改存储库的历史记录,从而导致潜在的强制推送。因此,您可能需要与其他开发人员协调。

此外,如果您仍然需要该文件,则应该先进行备份,因为您将无法从git恢复该文件。

答案 2 :(得分:1)

当前的问题是,虽然您使用新提交删除了相关文件,但是有一些blob对应于您的repo中相同文件的旧提交,并且这些对象中的2个的大小会向您发出警告,一个错误。为了能够再次推送,您还需要删除它。

尽管bfg-repo应该适用于大多数人来纠正这种情况,但它需要在系统上安装和配置java,并且并不总是可用。

您有2个文件var/log/system.logvar/report/752246136671超出限制,因此我建议您使用filter-branch删除它们以获取仅限git的解决方案:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch var/log/system.log var/report/752246136671' --tag-name-filter cat -- --all

您可能需要稍后强制推送更改(使用git push -f origin)。

一般情况下,最好使用*.log中的*.info条目完全忽略git仓库中的*.log.gitignore和其他日志文件文件。您也可以忽略var/reports文件夹。

如果有文件已经提交到repo并提前推送,您可能需要使用git rm --cached "*.log"删除它们并提交这些更改以永久地取消它们。

PS:对我来说这似乎是magento / joomla安装,在这种情况下,完全忽略var .gitignore文件夹,你不想要对象来自var/cachevar/session等,可在回购中跟踪。

答案 3 :(得分:0)

很明显,你正试图推送一个非常大的文件,正如错误所示。它也是一个日志文件,因此我假设应该在存储库中。

如果是这样,请执行此操作以修复错误:

$ git rm var/log/system.log
$ git commit -m "Delete system.log file"
$ git push -u origin master