几个月前我做了一些糟糕的提交后,我的bitbucket repo 变得很大(1.6 GB)。我没有意识到情况有多严重(傻瓜..),因为一个同事试图克隆它并失败了(太大)。
我仔细阅读了Why is my git repository so big?这篇文章,并做了以下工作(如@Vi建议):
git rev-list --all --objects | sed -n $(git rev-list --objects --all | \
cut -f1 -d' ' | \
git cat-file --batch-check | \
grep blob | \
sort -n -k 3 | \
tail -n40 | \
while read hash type size; do
echo -n "-e s/$hash/$size/p ";
done) |
sort -n -k1
假设其中一个胖文件是mybigfile.gz
git filter-branch -f --index-filter \
'git rm --force --cached --ignore-unmatch mybigfile.gz' \
-- --all
rm -Rf .git/refs/original && \
git reflog expire --expire=now --all && \
git gc --aggressive && \
git prune
实际上,它可以正常工作,因为现在我的本地repo目录为850MB。
问题是远程存储库没有更改大小。
然后我试图
git push origin --force --all
但是情况变得更糟,现在我的远程 repo 是2GB!
我该如何解决这种可怕的情况?
您是否建议创建一个新的仓库,还是可以做些其他的事情来解决呢?
谢谢你。
编辑:我试图更好地阐述问题。几个月前,我多次 promise 要 repo 一些大文件。当我意识到这一点时,我将这些文件添加到了.gitignore中。然后,我继续提交没有这些文件的 repo 协议(protocol)。我没有注意位桶警告(您的存储库太大)。现在,我需要删除存储在本地和远程的旧提交中的这些文件。我使用上述步骤成功清理了本地git目录。我的问题是,当我推送到远程主分支时,远程 repo 不受本地清理的影响。
编辑2:
我在本地.git目录中尝试了BFG repo 清洁器
java -jar bfg-1.12.3.jar --strip-blobs-bigger-than 100M
here输出。
根据这个tutorial,这应该足以除去远程 repo 上的 Blob ,但是实际上这没有发生。在本地,我的存储库很小,但是从远程来看,它仍然很大。我想我只想走一个步骤,但是不知道该怎么做。您认为仅创建一个新的 repo 协议(protocol)会更容易吗?
最佳答案
从评论中我了解到问题是在本地解决的,而不是在远程解决的。让我们做一些疯狂的科学,以强制使用以下命令取消所有对象的引用和垃圾回收(首先创建备份):
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push -f
也许这将清理远程存储库。
关于git - 如何从Bitbucket中的旧提交中删除大文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33013500/