首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git -如何从提交历史记录中删除大文件,以便推送存储库?

Git -如何从提交历史记录中删除大文件,以便推送存储库?
EN

Stack Overflow用户
提问于 2014-08-28 21:54:12
回答 2查看 622关注 0票数 4

几个月前,我意外地将一个大约100MB的目录提交给了我的存储库。

快进到今天,我正在尝试将该存储库迁移到Github。它不会让我,因为大小的限制。

我已经使用以下帖子删除了该目录:Completely remove file from all Git repository commit history

它似乎起作用了,但是整个项目仍然重达1亿。我运行了du .,得到了以下代码行:98M ./.git/objects

我不确定如何解决这个问题,因为我已经尝试了一些解决方案,但似乎都不起作用。

我现在该怎么做?

编辑:我设法用我上面链接的线程修复了它。特别是达伦的回答。

EN

回答 2

Stack Overflow用户

发布于 2014-08-29 02:23:37

我设法用我上面链接的线程修复了它。具体地说,我做了一些与Darren的答案类似的事情。为了方便起见,我把它放在这里:

这是最好的方法:

http://github.com/guides/completely-remove-a-file-from-all-revisions

只需确保先备份这些文件的副本。

编辑

Neon的编辑在审查过程中不幸被拒绝了。请看下面的霓虹灯帖子,它可能包含有用的信息!

1:https://stackoverflow.com/users/309261/neon

例如,要删除意外提交到git存储库的所有*.gz文件:

$ du -sh .git ==>例如100M $ git .git-==> --index-filter 'git rm --cached --忽略-不匹配*.gz‘HEAD $ git推送原始主机--force $ rm -rf .git/refs/==>/$ git reflog expire --expire=now --all $ git gc --prune=now $ git gc -rf --prune=now

对我还是不起作用?(我目前使用的是git版本1.7.6.1)

$ du -sh .git ==>,例如1亿

不知道为什么,因为我只有一个主分支。无论如何,我最终通过推入一个新的空的和空的git库来清理我的git代码库。

$ git init --bare /path/to/newleanrepo.git$ git推送/path/to/newleanrepo.git master $ du -sh /path/to/newleanrepo.git ==>,例如5M

(是的!)

然后,我将其克隆到一个新目录中,并将它的.git文件夹移到下面的目录中。例如:

$ mv ../large_dot_git $ git .git /path/to/newleanrepo.git../tmpdir$mv../tmpdir/.git。$ du -sh .git ==>,例如500万

(是的!终于清理干净了!)

在确认一切正常后,您可以删除../large_dot_git../tmpdir目录(可能在几周或几个月后,以防万一……)

简而言之:我过滤了分支,创建了一个新的裸存储库,将主存储库推入其中,将其克隆到一个新目录中,并用克隆中的git目录替换了项目的git目录。

票数 2
EN

Stack Overflow用户

发布于 2014-08-29 02:23:04

您需要在reflog中保存条目,否则它将包含对这些旧blob的引用,然后garbage collect它。

代码语言:javascript
复制
git reflog expire --expire=now --all
git gc --prune=now --aggressive

如果这不起作用,请尝试使用BFG工具来清理您的存储库。按照他们说的做,首先复制一个存储库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25550597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档