[英]Is it possible to reduce .git history size in bitbucket?
由于我在 bitbucket 中的存储库大小随着时间的推移增加到 1GB,我想削减它并删除我不再关心的旧历史记录。
我希望将我的存储库减少到至少 100 mb(或至少当前的一半)并且有 3-5 个月的历史。 这意味着我可以在我的历史中减少提交。
这是我已经尝试过但没有用的方法:
git gc
(带有--aggressive --prune
等标志)。 它确实将我的回购大小减少到本地大约 400mb。 但是我无法将它推送到远程,因此我的 BitBucket 的存储库大小保持不变。 我尝试使用此方法进行 Bitbucket 垃圾收集清理: https://stackoverflow.com/a/27868384/8610581以及https://stackoverflow.com/a/37253227/8610581git clone --shallow-since=<date>
以及--depth
),这正是我需要的。 不幸的是,我不能从浅克隆中创建一个新的存储库(git 不允许这样做)。删除 Git 中的历史记录(同时保留最新提交)的唯一方法是替换存储库。
替换存储库可以与原始存储库同名,但它将有一组完全不同的提交。 原因是每个提交都有编号(使用 hash ID),并且编号方案合并了上一个提交的编号。 因此,如果旧存储库中总共有 1000 个提交,而新存储库中现在只有 500 个提交,则新存储库中第一个提交的提交编号不同,这意味着最后一个提交的提交编号在新的存储库中也是不同的。
要复制一些旧的提交,和/或在此过程中删除大文件,从旧存储库到新存储库,有许多可用的工具。 Git 包含的那个是git filter-branch
,它正在被git filter-repo
替换(但 filter-repo 尚未包含在 Git 本身中)。 您也可以使用BFG 。
请注意,这些工具通常按以下过程工作:
克隆原始存储库。 (现在,如果你无法挽回地损坏克隆体,你只需将其丢弃并重新开始!)
在克隆上使用该工具。 这会在适当的位置重写存储库。
检查结果是否良好。 如果不是,则丢弃此克隆并 go 返回步骤 1。
如有必要(例如git filter-branch
)执行一些最终确定步骤(使用git filter-branch
最终确定是删除refs/original/
或克隆此克隆;请参阅文档)。
请记住,最终结果实际上是一个全新的存储库。 如果您允许 Git 将它与旧存储库合并,您将获得所有旧提交(您想要删除的那些),并且现在有两个您想要保留的提交副本。
git gc
仅从 Git 历史记录中删除不再引用的条目。 要删除回购中不必要的历史条目,您必须按以下顺序进行清理:
master
分支上的旧提交:这会删除对旧条目的引用,但将旧条目保留在.git
文件夹中。git gc
和git prune
:这会从本地.git
文件夹中删除新的较短的 Git 历史记录不再引用的旧条目git push --force
。 由于历史不同,BitBucket 拒绝正常推送,您必须使用--force
覆盖服务器上的历史。git reset --hard origin/master
或任何您的主要开发分支。master
分支重新设置所有打开的功能分支的基线,以便在合并它们时不会取回旧的历史记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.