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,但实际上并没有发生这种情况.本地我的回购很苗条,但远程仍然很大.我想我只是缺少一步,但不知道该怎么做.你认为创建一个新的回购更容易吗?
实际上,我只需要联系Bitbucket 支持(他们在不到一个小时内回复)。他们做到了:
git gc
Run Code Online (Sandbox Code Playgroud)
从他们这边,我的远程仓库又回到了本地仓库的大小。
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |