首页 > 解决方案 > 删除分支后测试 Git 存储库大小减少

问题描述

有什么方法可以测试删除多个分支将如何影响该 git repo 的大小。我有一个 git repo,它有 10 个活跃的分支和数百个功能(短期分支)。

回购非常大,克隆速度很慢。GitLab 显示总大小为 1.4 GB,git-sizer显示 blob 总大小为 8.4 GB。

我已经尝试过使用BFG Repo Cleaner等工具来删除不需要的历史记录,但我只设法减少了 1.4 到 1 GB,这还不够。

我的策略将我的回购分成 2 份,并使用多个分叉来分隔工作流。我还将在 GitLab 中添加推送扩展和大小限制以停止推送垃圾。我们遇到了.rar.zip.jar文件、错误推送的个人备份等问题。但是我也想知道我是否可以保留我长期存在的分支的历史。所以我的问题:

  1. 如果我删除所有短暂的分支,是否可以看到大小会减少多少?
  2. 这可以在本地实现吗?
  3. 还是我只需将所有内容复制到 GitLab 上的测试存储库并删除此测试存储库上的分支?

标签: gitbfg-repo-cleanergit-gc

解决方案


我只是想发布我在遵循 AM 答案时采取的步骤:https ://stackoverflow.com/a/57074193/1860867

因为 repo 有近 600 个分支,我想测试删除近 350 个分支的效果。

  1. 我像往常一样克隆了存储库。
  2. 我需要为所有 600 个分支机构创建本地分支机构。我找到了一个脚本来做到这一点:
for i in `git branch -a | grep remote | grep -v HEAD | grep -v master`; do git branch --track ${i#remotes/origin/} $i; done
  1. 为了验证正确的分支机构数量,我跑到下面来计算本地分支机构的数量。
git branch | wc -l
  1. 我们的分支名称有一个命名约定(幸运的是),我想测试删除除以 prefix: main_开头的所有分支之外的所有分支。我能够使用以下脚本删除所有其他分支:
git branch | grep -v "main_" | xargs git branch -D

我再次运行第 3 步中的命令来检查分支的数量是否也只是git branch,看看分支名称是否都正确。

  1. 要删除我的遥控器,首先要获取所有遥控器的列表,我运行:
git remote -v

在这种情况下,获取和推送的遥控器是origin,要删除它:我跑了:

git remote rm origin

然后我再次运行git remote -v它没有返回任何内容,以检查删除是否成功。

  1. 为了清理我的本地存储库(并确定删除本地分支后的大小减少),我运行了以下命令:
git reflog expire --expire=now --all && git gc --prune=now --aggressive

运行后git gc,repo 大小减少了约 600 MB,git-sizer显示出类似的减少。


推荐阅读