几个月前,我意外地将一个大约100MB的目录提交给了我的存储库。
快进到今天,我正在尝试将该存储库迁移到Github。它不会让我,因为大小的限制。
我已经使用以下帖子删除了该目录:Completely remove file from all Git repository commit history
它似乎起作用了,但是整个项目仍然重达1亿。我运行了du .,得到了以下代码行:98M ./.git/objects。
我不确定如何解决这个问题,因为我已经尝试了一些解决方案,但似乎都不起作用。
我现在该怎么做?
编辑:我设法用我上面链接的线程修复了它。特别是达伦的回答。
发布于 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目录。
发布于 2014-08-29 02:23:04
您需要在reflog中保存条目,否则它将包含对这些旧blob的引用,然后garbage collect它。
git reflog expire --expire=now --all
git gc --prune=now --aggressive如果这不起作用,请尝试使用BFG工具来清理您的存储库。按照他们说的做,首先复制一个存储库。
https://stackoverflow.com/questions/25550597
复制相似问题