[英]How to reduce git repo size on Bitbucket?
我的问题摘要:在向两个现有文件添加几百个字节后,我在 Bitbucket 上的一个私人存储库的大小突然增加了一倍多。 存储库现在超过 2GB,这导致 Bitbucket 将其置于只读模式。 因为它处于只读模式,所以我无法推送会减少 repo 大小的更改。 (第 22 条。)
详细信息:我的公司最近开始在 Bitbucket 上托管 git 存储库。 我负责的其中一个存储库的大小约为 973MB,令人不安地接近 1GB 的软限制。 为了减少存储库的大小,我按照 Bitbucket 文档文章将存储库分成两部分中的说明操作,并将价值约 450MB 的文档和在线帮助文件移动到他们自己的私有存储库中。 然后我按照 Bitbucket 文档文章Reduce repository size和Maintaining a git repository 中的说明进行操作,特别是:
git count-objects -vH
向我展示了一个大约 973MB 的大小包。
我运行git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD
来删除 doc 目录(这是我移动到新仓库的内容)。
我运行了以下命令来使引用过期和修剪:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
git count-objects -vH
然后向我展示了一个 881.1 MiB 的大小包, du -sh .git/objects
返回了 882M。 我很失望移动超过 450MB 将 repo 大小减少了不到 90MB,但仍然将更改推送到 Bitbucket:
git push --all --force
git push --tags --force
该存储库的 Bitbucket 副本的设置页面继续显示 973MB 的大小。 我注销,刷新浏览器,重新登录,但这没有帮助——repo 大小保持在 973MB。
今天早上(上述更改三天后)我对两个现有文件进行了一些小添加,将文件的大小总共增加了不到 1KB,将它们添加并提交到我的本地存储库,然后将更改推送到比特桶。 几分钟后,我查看了该存储库的 Bitbucket 页面,看到一个红色警告横幅,通知我“此存储库超过 2 GB 限制并且处于只读模式。” 设置页面现在显示 repo 的大小为 2.3 GB。
根据 Bitbucket 的说法,向两个文件添加几百字节的推送绝对是过去三天在远程存储库上发生的唯一活动。 这种推动可能不是回购规模增加一倍以上的原因,但这两个事件在时间上密切相关。
git reflog show
返回任何内容。
将新副本克隆到备用目录中,然后运行 git count-objects 会得到 881.29 MiB 的大小包。
本地存储库位于 CentOS 6.5 系统上。 git 版本是 1.8.5.3。
问题
我发现如果超过 2GB 限制,减少 Bitbucket 存储库大小的最简单方法是
这应该会触发 Bitbucket 在 repo 上运行git gc
。
在与 Bitbucket 技术支持商讨后,我现在可以回答我自己的一些问题:
首先,使用以下命令检查本地存储库的大小:-
git count-objects -Hv
我们可以使用以下命令
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"
现在,再次使用命令git count-objects -Hv
来注意存储库大小和垃圾的变化
这是 bitbucket 云端的一个已知错误,请参阅BCLOUD-19794 。
垃圾文件间歇性地计入存储库大小。
当推送到远程存储库时,随后会触发 GC,从而生成垃圾文件。 这个垃圾文件在下一次后续 GC 中被清除。 在这两个 GC 之间,存储库的大小在 Bitbucket UI 中显示不正确,因为垃圾文件大小间歇性地计入存储库总大小。
如变通方法部分所述,您需要联系 bitbucket 以手动运行 GC。
如果有足够多的人投票支持,Bitbucket 可能会尽早采取行动。
我相信那些熟悉的人已经知道了,但是 git 会存储您的文件版本历史记录,因此进行更改和推送文件不会减少您的存储库大小。
还有几种方法可以减少 bitbucket、GitHub、gitlab 等上的 repo 大小。最好的方法是删除分支,因为这会永久删除该分支记录的任何文件,只要它不被另一个分支跟踪即可。 但是您可能需要该分支中的最新文件,因此请执行以下操作:
--cached
删除远程分支。根据主机的不同,您可能必须运行特殊命令,但这在大多数情况下应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.