2014-03-06 81 views
3

推我提交时,我收到以下错误错误而推到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: 96ddffac3fbc3ba1eb2e9f01a93 
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的文件中找到这些在我输入git状态时提交。

请您让​​我知道如何推动我的更改回购没有这些错误?我猜这些文件在github索引中。我也试过git rm --cached var/log/system.log。但没有结果。

将我的头撞到墙上!

更新1 这里请找到要旨基于从下面专家的两个答案:

UPDATE 2 请在git的下面找到我试图删除的两个文件的日志详细信息:

ANSWER奏效

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

credits to git experts VonC, Holger Just and all other experts who have provided their inputs and ofcourse to stackoverflow.

回答

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强行打开远程回购的新的历史。
+0

在尝试清理这两个文件时,是否有可能将某些其他blob> 1MB(比如说与db的种子相对应的那些blob)错误地删除?如果是的话,如何避免使用'bfg'? –

+2

@mu无当然。您可以添加过滤器(--delete-files)以获得更精确的操作。或者用'git filter-branch'完成这个难题。我想引起人们对下一步('git gc')的关注,以便强制更紧凑的重新包装,并使'git push'成为可能。 – VonC

+0

@VonC非常感谢您的回答。我尝试了上面的GIT命令,它按照你的建议工作。我用包含解决我的问题的git命令的gist更新了我的问题。等待SO让我奖励赏金。 – Haijerome

0

很明显,你正试图推动一个非常大的文件,作为错误指示。这也是一个日志文件,因此我认为它应该而不是在存储库中。

如果这是真的,这样做是为了修正这个错误:

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

我手动从我的FTP删除文件,但它似乎仍然在GIT历史上的某个地方。我尝试了你的输入,但仍然是同样的问题。请在这里找到要点:https://gist.github.com/haijerome/9405598它显示了我试过的命令和它的输出。 – Haijerome

+0

我已经更新了我的答案,下面列出了我尝试删除的这两个文件的git日志详细信息。 – Haijerome

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恢复它。

+0

我试过git rm --cached var/report/752246136671,并得到以下错误“致命:pathspec'var/report/752246136671'与任何文件都不匹配”。事实上,我已经从我的服务器手动删除了该文件。我感觉它在Git历史中的某个地方,但无法找到它。请参阅https://gist.github.com/haijerome/9405492了解更多信息。 – Haijerome

+0

我已经更新了我的答案,下面列出了我尝试删除的这两个文件的git日志详细信息。 – Haijerome

+1

正如我在我的回答(并在文章中说,链接到我引用的错误消息):如果你已经在你的git历史中添加该文件,你必须清理它以从所有提交中完全删除文件。 Github推荐BFG。请参阅我的答案更新。 –

1

眼下的问题是,尽管您已删除使用新提交的有关文件,也有对应于你回购旧提交对同一文件的斑点,而这些对象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 )。

一般情况下,它是完全通过使用您的.gitignore文件*.log项忽略来自混帐回购协议的*.log*.info和其他日志文件一个很好的做法。您可以同样忽略var/reports文件夹。

如果有些文件已经提交到回购站并且先前被推送过,则可能需要使用git rm --cached "*.log"来删除它们并提交这些更改以便永久性地解除它们。

PS:这似乎是一个magento/joomla安装到我,在这种情况下完全忽略var文件夹中.gitignore,你不从var/cachevar/session等希望对象在回购进行跟踪。

+0

我不得不尝试git filter-branch,如果我不能让BFG工作,但BFG像蛋糕一样工作。并且关于你的建议忽略var文件夹是最受欢迎的。我忽略了它。再次感谢。这个问题引起了很多专家的注意,以不同的方式解决问题。 +1为您的答案。 – Haijerome