几个月前,我意外地向我的存储库提交了一个重约100MB的目录。
快进到今天,我正在尝试将该回购迁移到Github。由于尺寸限制,它不会让我。
我使用以下帖子删除了该目录:Completely remove file from all Git repository commit history
它似乎已经奏效,但整个项目仍然重达100M。
我已经运行du .
并得到以下行:98M ./.git/objects
。
我不知道如何解决这个问题,因为我尝试了一些解决方案,但似乎都没有。
我现在该怎么办?
编辑:我设法使用我上面链接的线程修复它。特别是达伦的回答。
答案 0 :(得分:1)
您需要在reflog中输入expire
个条目,否则它将保留对这些旧blob的引用,然后garbage collect
。
git reflog expire --expire=now --all
git gc --prune=now --aggressive
如果不起作用,请尝试使用BFG工具清理您的仓库。按照他们的说法,首先制作存储库的副本。
答案 1 :(得分:1)
我设法使用上面链接的线程修复它。具体来说,我做了类似Darren的回答。为方便起见,我会把它放在这里:
这是最好的方法:
http://github.com/guides/completely-remove-a-file-from-all-revisions请务必先备份文件的副本。
修改强>
[Neon] [1]的编辑在审核过程中遗憾地被拒绝了。看到 下面的霓虹灯,它可能包含有用的信息!
[1]:https://stackoverflow.com/users/309261/neon
E.g。删除意外提交到git的所有
*.gz
个文件 存储库:$ du -sh .git ==> e.g. 100M $ git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.gz' HEAD $ git push origin master --force $ rm -rf .git/refs/original/ $ git reflog expire --expire=now --all $ git gc --prune=now $ git gc --aggressive --prune=now
那对我来说仍然没有用? (我目前正在使用git版本1.7.6.1)
$ du -sh .git ==> e.g. 100M
不知道为什么,因为我只有一个主分支。无论如何,我终于 让我的git repo真正清理干净,推入一个新的空的裸露 git仓库,例如
$ git init --bare /path/to/newcleanrepo.git $ git push /path/to/newcleanrepo.git master $ du -sh /path/to/newcleanrepo.git ==> e.g. 5M
(是!)
然后我将其克隆到一个新目录并移过它的.git文件夹 进入这个。 e.g。
$ mv .git ../large_dot_git $ git clone /path/to/newcleanrepo.git ../tmpdir $ mv ../tmpdir/.git . $ du -sh .git ==> e.g. 5M
(是的!终于清理干净了!)
在验证一切正常后,您可以删除
../large_dot_git
和../tmpdir
目录(可能是一对 从现在开始的几个月或几个月,以防万一...)
简而言之:我过滤了分支,创建了一个新的裸仓库,将主机推送到它,将其克隆到一个新目录中,并用克隆中的git目录替换了我的项目的git目录。