由于二进制文件,无法推送到Git

时间:2014-10-22 20:20:22

标签: git github binaryfiles command-line-interface

因此,由于某些二进制视频文件,我一直在向我的主分支机构推出问题。当我第一次尝试推送它们时,文件太大了。所以我将它们从我正在处理的项目目录中删除。但是现在当我尝试从第一次初始推送开始就推动它并且它返回给我这个错误消息。

Compressing objects: 100% (38/38), done.
Writing objects: 100% (39/39), 326.34 MiB | 639.00 KiB/s, done.
Total 39 (delta 16), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: Trace: b7371dc6457272213ca1f568d9484c49
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File themes/SomeFile/uploads/me_582610_mountain-river.mov is 315.08 MB; this exceeds GitHub's file size limit of 100 MB
To git@github.com:UserName/Project.git

它说的文件太大,似乎仍然存在在我的目录甚至我的电脑上实际上根本就没有。我完全删除了它。这里有什么问题?这是我第一次遇到这个问题。我前往引用的Git网站寻求支持https://help.github.com/articles/working-with-large-files/,然后运行git rm --cached me_582610_mountain-river.mov并返回消息fatal: pathspec 'me_582610_mountain-river.mov' did not match any files

请任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:3)

请记住,默认情况下,您承诺使用git的所有内容都会保留在您的回购中 - 即使您"删除"它在以后的提交中

GIT的一个弱点(以及其他DVCS')是它不能很好地处理大型二进制文件。许多希望版本化大量二进制文件的团队/人员更喜欢集中式VCS'比如PerforceSubversion等,其中一个人可以更好地控制一个repo的下载部分,以及一个在repo中保留的先前提交的版本。

解决您的问题:您拥有一个您之前已提交大型二进制文件的仓库。即使你随后被删除了#34;来自你的回购,文件仍然是。要从您的仓库中完全删除它,您必须做一些手术,实际销毁添加文件的原始提交,然后重新编写您的仓库中的每个后续提交!

根据GIT Documentation on removing objects强调我的):

  

Git有很多很棒的功能,但是一个可能导致问题的功能是git clone下载项目的整个历史记录,包括每个文件的每个版本。如果整个事情都是源代码,这很好,因为Git经过高度优化,可以有效地压缩数据。但是,如果某个项目历史记录中的某个人添加了一个巨大的文件,那么所有时间的每个克隆都将被强制下载该大文件,即使它在下一次提交时已从项目中删除< / strong>即可。

你的问题的解决方案不是一个简单的过程,是破坏性的(因为它基本上重写了包含违规文件的提交之后的每个提交),并且在上面的链接中有很好的记录,我鼓励在更新官方树之前,您需要多次阅读并练习树的本地副本。

小心谨慎!

  

如果您在导入后立即执行此操作,那么在任何人开始基于提交工作之前,您都没问题 - 否则,您必须通知所有贡献者他们必须将他们的工作重新投入到您的新提交中。

坦率地说,当我在大约一年前使用我自己的回购(即不与其他人共享)时,我选择将我当前的代码库复制到一个新文件夹并从中创建一个新的GIT回购而不是试图重写我的所有历史,包装文件等。当时我失去历史不是主要问题。

祝你好运!

答案 1 :(得分:0)

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD

答案 2 :(得分:0)

查看 bfg 。 (https://rtyley.github.io/bfg-repo-cleaner/) 这是删除该大文件的最简单方法。但其他评论中提到的这样做的含义仍然适用!

答案 3 :(得分:0)

这个最不可怕的把戏一直对我有用->

  1. 找出您在此项目中修改过的文件(git状态)
  2. 备份当前克隆的目录
  3. 删除克隆的项目
  4. 创建一个新克隆
  5. 将修改后的文件复制到新克隆的目录中

然后执行git commit和git push即可。