繁体   English   中英

是否可以减少 bitbucket 中的 .git 历史大小?

[英]Is it possible to reduce .git history size in bitbucket?

由于我在 bitbucket 中的存储库大小随着时间的推移增加到 1GB,我想削减它并删除我不再关心的旧历史记录。

我希望将我的存储库减少到至少 100 mb(或至少当前的一半)并且有 3-5 个月的历史。 这意味着我可以在我的历史中减少提交。

这是我已经尝试过但没有用的方法:

  1. 运行git gc (带有--aggressive --prune等标志)。 它确实将我的回购大小减少到本地大约 400mb。 但是我无法将它推送到远程,因此我的 BitBucket 的存储库大小保持不变。 我尝试使用此方法进行 Bitbucket 垃圾收集清理: https://stackoverflow.com/a/27868384/8610581以及https://stackoverflow.com/a/37253227/8610581
  2. 我尝试了浅克隆( git clone --shallow-since=<date>以及--depth ),这正是我需要的。 不幸的是,我不能从浅克隆中创建一个新的存储库(git 不允许这样做)。
  3. 我尝试通过将许多旧提交压缩为一个来减小我的回购协议的大小。 我确实设法在我的回购中获得更少的提交,但这并没有影响我的存储库的大小(特别是 .git 文件夹)并且它保持不变。
  4. 删除未使用和合并的分支

删除 Git 中的历史记录(同时保留最新提交)的唯一方法是替换存储库。

替换存储库可以与原始存储库同名,但它将有一组完全不同的提交 原因是每个提交都有编号(使用 hash ID),并且编号方案合并了上一个提交的编号。 因此,如果旧存储库中总共有 1000 个提交,而新存储库中现在只有 500 个提交,则存储库中第一个提交的提交编号不同,这意味着最后一个提交的提交编号在新的存储库中也是不同的。

要复制一些旧的提交,和/或在此过程中删除大文件,从旧存储库到新存储库,有许多可用的工具。 Git 包含的那个是git filter-branch ,它正在被git filter-repo替换(但 filter-repo 尚未包含在 Git 本身中)。 您也可以使用BFG

请注意,这些工具通常按以下过程工作:

  1. 克隆原始存储库。 (现在,如果你无法挽回地损坏克隆体,你只需将其丢弃并重新开始!)

  2. 在克隆上使用该工具。 这会在适当的位置重写存储库。

  3. 检查结果是否良好。 如果不是,则丢弃此克隆并 go 返回步骤 1。

  4. 如有必要(例如git filter-branch )执行一些最终确定步骤(使用git filter-branch最终确定是删除refs/original/或克隆此克隆;请参阅文档)。

请记住,最终结果实际上是一个全新的存储库。 如果您允许 Git 将它与旧存储库合并,您将获得所有旧提交(您想要删除的那些),并且现在有两个您想要保留的提交副本。

git gc仅从 Git 历史记录中删除不再引用的条目。 要删除回购中不必要的历史条目,您必须按以下顺序进行清理:

  1. 压缩master分支上的旧提交:这会删除对旧条目的引用,但将旧条目保留在.git文件夹中。
  2. 运行git gcgit prune :这会从本地.git文件夹中删除新的较短的 Git 历史记录不再引用的旧条目
  3. 将新的较小的 Git 历史推送到 BitBucket: git push --force 由于历史不同,BitBucket 拒绝正常推送,您必须使用--force覆盖服务器上的历史。
  4. 所有其他也检查了你的 repo 的计算机,例如你的 CI 服务器,现在都不同步了。 要使它们恢复同步,请运行git reset --hard origin/master或任何您的主要开发分支。
  5. 根据新的master分支重新设置所有打开的功能分支的基线,以便在合并它们时不会取回旧的历史记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM