Git:无法删除版本控制中的对象

时间:2015-01-07 19:11:36

标签: git

我正在尝试使用git push origin <branchname>将我的本地分支推送到我的原始分支。 我得到了:

remote: error: File app/assets/images/title00.mp4 is 297.77 MB;

错误抱怨我超过了GitHub允许的文件大小。

它抱怨的文件不再在我的版本控制中,因为我删除了它的确切原因是因为它太大了。

所以,当我尝试遵循Git Documentations的建议

git rm <path-to-large-file>

我收到以下错误:

fatal: pathspec 'app/assets/images/title00.mp4' did not match any files

知道我该怎么办?

2 个答案:

答案 0 :(得分:2)

来自Rewriting History Git docs

  

从每个提交中删除文件

     

这种情况相当普遍。 有人意外地提交了一个没有轻率git add .的巨大二进制文件,你想在任何地方删除它。也许你不小心提交了一个包含密码的文件,并且你想让你的项目打开资源。 filter-branch是您可能想要用来清理整个历史记录的工具。要从整个历史记录中删除名为passwords.txt的文件,您可以使用--tree-filter选项filter-branch

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

在您的方案中,您可能希望这样做:

git filter-branch --tree-filter 'rm -f app/assets/images/title00.mp4' HEAD

答案 1 :(得分:0)

您可以使用优秀的BFG repo清洁工从您的回购历史记录中清除文件。 基本上,您可以执行以下步骤

首先。    安装bfg清洁剂。在MacOSX中,brew install bfg

其次,清除历史记录中的文件。

git clone --mirror git@github.com:your_github_user/your_github_repo.git
bfg --delete-files title00.mp4 your_github_repo.git
cd your_github_repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push

然后你必须清除你的非镜像repor(你的开发文件夹)并从github再次克隆它,以避免重新刷新大文件。

git clone git@github.com:your_github_user/your_github_repo.git

显然,有关BFG网站的更多信息。