首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能减少bitbucket中的.git历史记录大小?

是否有可能减少bitbucket中的.git历史记录大小?
EN

Stack Overflow用户
提问于 2020-07-29 09:14:23
回答 2查看 1.2K关注 0票数 0

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

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

这是我已经尝试过的,但并没有奏效:

  1. 运行git gc (带有像--aggressive --prune这样的标志)。它确实使我的回购规模在本地减少到大约400 my。但是我不能把它推到遥控器上,因此我的BitBucket的回购大小保持不变。我尝试使用此方法进行Bitbucket垃圾收集清理:https://stackoverflow.com/a/27868384/8610581https://stackoverflow.com/a/37253227/8610581
  2. 我尝试了浅层克隆(git clone --shallow-since=<date>--depth),这正是我所需要的。不幸的是,我无法从浅层克隆中创建一个新的存储库(git不允许这样做)。
  3. 我试着缩小我的回购规模,把许多旧的提交压缩成一个。我确实在回购中得到了较少的提交,但它并没有影响我的存储库的大小(特别是.git文件夹),并且保持不变。
  4. 删除未使用和合并的分支
EN

回答 2

Stack Overflow用户

发布于 2020-07-29 15:47:01

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

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

要将一些旧的提交和/或将大型文件从旧存储库复制到新的存储库,有许多可用的工具。Git中包含的是git filter-branch,它正在被git filter-repo取代(但是filter还没有包含在Git本身中)。您也可以使用BFG

请注意,这些工具通常是通过这个过程工作的:

  1. 克隆原始存储库。(现在,如果你无法挽回地损坏了克隆,就把它扔掉,重新开始吧!)
  2. 使用克隆人上的工具。这样就可以重写存储库了。
  3. 检查看看结果是否好。如果没有,就把这个克隆人扔掉,回到第1步。
  4. 如果有必要(例如,git filter-branch)执行一些终结步骤(使用git filter-branch,终结是删除refs/original/或克隆这个克隆;参见文献资料)。

记住,最终的结果实际上是一个全新的存储库。如果允许Git将其与旧存储库合并,您将得到所有旧的提交--您想要删除的提交--回退,并且现在有了您想要保留的提交的两个副本。

票数 0
EN

Stack Overflow用户

发布于 2020-07-29 22:00:38

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

  1. 压缩master分支的旧提交:这将删除对旧条目的引用,但将旧条目保留在.git文件夹中。
  2. 运行git gcgit prune:这将从本地.git文件夹中移除不再由新的较短Git历史记录引用的旧条目。
  3. 将新的更小的Git历史推到BitBucket:git push --force。由于历史是不同的,BitBucket拒绝正常的推送,您必须使用--force覆盖服务器上的历史记录。
  4. 所有其他也检查您的回购的计算机,例如您的CI服务器,现在都不同步。要使它们恢复同步,请运行git reset --hard origin/master或您的主要开发分支。
  5. 根据新的master分支重新设置所有打开的特性分支,以便在合并它们时不会返回旧的历史记录。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63150270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档