如何清理远程 git 仓库中的垃圾
How to cleanup garbage in remote git repo
我最近 运行 我的 Bitbucket 存储库遇到了大小限制。我遵循了无数其他回答如何清理 git 存储库的问题,并最终使用 BFG 删除了一些错误的提交。
效果很好,但是,我注意到在 运行 计算 git 之后,有大量 space 处于垃圾状态。所以我运行一个简单的git gc。然而,这对清理垃圾没有任何作用。
经过一番挖掘,我发现了以下命令:
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 \
-c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"
运行 这导致垃圾在 本地被清理 。但是,我仍然有远程回购的问题。我现在是否需要让 Bitbucket 在我的远程仓库上执行 运行 这个命令,或者有没有办法将这个更改推送到仓库?
如果其他人遇到过这种情况,那么答案是肯定的。
Bitbucket 支持运行以下内容:
git reflog expire --expire="1 hour" --all
git reflog expire --expire-unreachable="1 hour" --all
git prune --expire="1 hour" -v
git gc --aggressive --prune="1 hour"
之前和之后将远程存储库大小从 2GB 以上减少到 1GB 以下。
我们认为我们今天遇到了同样的问题,并且能够在不联系 Bitbucket 支持的情况下解决它,如下所示。请注意,该方法会丢弃 repo 中的最后一次提交 - 因此您可能希望对其进行备份。
Bitbucket 报告说我们的 repo 大约是 2.1GB,而克隆时,它在本地只占用了大约 250MB。由此,我们得出结论,它很可能来自无法访问的提交中的大文件(感谢 )。
这是在本地查看无法访问的提交的方法,我们不考虑通过 reflog 的可达性:
git fsck --unreachable --no-reflog
在本地,无法访问的提交可以通过以下方式清除:
git reflog expire --expire-unreachable="now" --all
git prune --expire="now" -v
git gc --aggressive --prune="now"
但是,我们不能 运行 在 Bitbucket 上远程执行任何这些命令。但是,他们在 the page about reducing repo size(第 删除存储库限制 部分)上说,他们 运行 git gc
自己响应 git reset --hard HEAD~1
(其中 丢弃最后一次提交 ),然后是 git push -f
。此外,他们在 垃圾收集死数据 一节中说,可以尝试以下序列:git reflog expire --expire=now --all
、git gc --prune=now
、git push --all --force
。考虑到所有这些,我决定在本地尝试以下操作,希望它能删除 reflog 并在本地执行 p运行e,然后将它们推送到远程 Bitbucket 存储库,在该存储库上启动 gc:
git reflog expire --expire-unreachable="30m" --all
git prune --expire="30m" -v
git gc --prune="30m"
git reset --hard HEAD~1
git push -f
这成功了,repo 大小立即从 2.1GB 变成了 ca。 250MB。 :)
请注意,时间参数到期/到期无法访问/p运行e 设置从现在开始测量的到期截止点。所以例如"now" 表示过期/p运行e 一切,“30m”表示除了最近 30 分钟内的变化。
我最近 运行 我的 Bitbucket 存储库遇到了大小限制。我遵循了无数其他回答如何清理 git 存储库的问题,并最终使用 BFG 删除了一些错误的提交。
效果很好,但是,我注意到在 运行 计算 git 之后,有大量 space 处于垃圾状态。所以我运行一个简单的git gc。然而,这对清理垃圾没有任何作用。
经过一番挖掘,我发现了以下命令:
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 \
-c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"
运行 这导致垃圾在 本地被清理 。但是,我仍然有远程回购的问题。我现在是否需要让 Bitbucket 在我的远程仓库上执行 运行 这个命令,或者有没有办法将这个更改推送到仓库?
如果其他人遇到过这种情况,那么答案是肯定的。
Bitbucket 支持运行以下内容:
git reflog expire --expire="1 hour" --all
git reflog expire --expire-unreachable="1 hour" --all
git prune --expire="1 hour" -v
git gc --aggressive --prune="1 hour"
之前和之后将远程存储库大小从 2GB 以上减少到 1GB 以下。
我们认为我们今天遇到了同样的问题,并且能够在不联系 Bitbucket 支持的情况下解决它,如下所示。请注意,该方法会丢弃 repo 中的最后一次提交 - 因此您可能希望对其进行备份。
Bitbucket 报告说我们的 repo 大约是 2.1GB,而克隆时,它在本地只占用了大约 250MB。由此,我们得出结论,它很可能来自无法访问的提交中的大文件(感谢
这是在本地查看无法访问的提交的方法,我们不考虑通过 reflog 的可达性:
git fsck --unreachable --no-reflog
在本地,无法访问的提交可以通过以下方式清除:
git reflog expire --expire-unreachable="now" --all
git prune --expire="now" -v
git gc --aggressive --prune="now"
但是,我们不能 运行 在 Bitbucket 上远程执行任何这些命令。但是,他们在 the page about reducing repo size(第 删除存储库限制 部分)上说,他们 运行 git gc
自己响应 git reset --hard HEAD~1
(其中 丢弃最后一次提交 ),然后是 git push -f
。此外,他们在 垃圾收集死数据 一节中说,可以尝试以下序列:git reflog expire --expire=now --all
、git gc --prune=now
、git push --all --force
。考虑到所有这些,我决定在本地尝试以下操作,希望它能删除 reflog 并在本地执行 p运行e,然后将它们推送到远程 Bitbucket 存储库,在该存储库上启动 gc:
git reflog expire --expire-unreachable="30m" --all
git prune --expire="30m" -v
git gc --prune="30m"
git reset --hard HEAD~1
git push -f
这成功了,repo 大小立即从 2.1GB 变成了 ca。 250MB。 :)
请注意,时间参数到期/到期无法访问/p运行e 设置从现在开始测量的到期截止点。所以例如"now" 表示过期/p运行e 一切,“30m”表示除了最近 30 分钟内的变化。