我仔细阅读了这篇文章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
从repo删除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
但情况变得更糟,现在我的远程仓库是2GB! 我怎样才能解决这种糟糕的情况? 您是否建议创建一个新的回购或者我还能做些什么来解决它?
谢谢。
编辑:我尝试更好地制定问题。几个月前,我多次向我的回购承诺了一些大文件。当我意识到这一点时,我将这些文件添加到.gitignore。然后我一直在没有这些文件的情况下承诺回购。我没有注意bitbucket警告(你的回购太大了)。现在,我需要摆脱存储在旧提交中的这些文件,包括本地和远程。我使用上述过程成功清理了本地 git目录。我的问题是,当我推送到远程主分支时,远程仓库不受本地清理的影响。
编辑2: 我在我的本地.git目录上尝试了BFG repo cleaner
java -jar bfg-1.12.3.jar --strip-blobs-bigger-than 100M
here输出。
根据这个tutorial,这应该足以删除远程仓库上的blob,但实际上这并没有发生。本地我的回购很苗条,但远程仍然很大。我想我只是缺少一步,但不知道该怎么做。你认为创建一个新的回购更容易吗?
答案 0 :(得分:0)
从评论中我了解到问题是在本地修复的,而不是在远程修复的。让我们做一些疯狂的科学来强制所有对象被解除引用并使用以下命令收集垃圾(先创建备份):
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push -f
这可能会清理远程存储库。
答案 1 :(得分:0)