如何从bitbucket中的旧提交中删除大文件

use*_*892 5 git github bitbucket

几个月前我做了一些糟糕的提交后,我的bitbucket repo变得非常大(1.6 GB).我没有意识到情况有多严重(noob ..),因为一个同事试图克隆它并且失败了(太大了).

我仔细阅读了这篇文章为什么我的git存储库如此之大?并做了以下(如@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
    
    Run Code Online (Sandbox Code Playgroud)

    假设其中一个胖文件是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
    
    Run Code Online (Sandbox Code Playgroud)

实际上,从现在起我的本地repo目录是850MB.问题是远程存储库没有改变大小.然后我试着

git push origin --force --all
Run Code Online (Sandbox Code Playgroud)

但情况变得更糟,现在我的远程仓库是2GB!我怎样才能解决这种糟糕的情况?您是否建议创建一个新的回购或者我还能做些什么来解决它?

谢谢.

编辑:我试图更好地制定问题.几个月前,我多次向我的回购承诺了一些大文件.当我意识到这一点时,我将这些文件添加到.gitignore.然后我一直在没有这些文件的情况下承诺回购.我没有注意bitbucket警告(你的回购太大了).现在,我需要摆脱存储在旧提交中的这些文件,包括本地和远程.我用上面描述的过程成功清理了我的本地 git目录.我的问题是,当我推送到远程主分支时,远程仓库不受本地清理的影响.

编辑2:我在我的本地.git目录上尝试了BFG repo清理器

java -jar bfg-1.12.3.jar --strip-blobs-bigger-than 100M
Run Code Online (Sandbox Code Playgroud)

这里的输出.

根据本教程,这应该足以删除远程仓库上的blob,但实际上并没有发生这种情况.本地我的回购很苗条,但远程仍然很大.我想我只是缺少一步,但不知道该怎么做.你认为创建一个新的回购更容易吗?

use*_*892 0

实际上,我只需要联系Bitbucket 支持(他们在不到一个小时内回复)。他们做到了:

 git gc
Run Code Online (Sandbox Code Playgroud)

从他们这边,我的远程仓库又回到了本地仓库的大小。