如何减小 Mercurial hg store 的大小。 Hg 存储大小超过 5GB,服务器在克隆前超时

How to reduce the size of Mercurial hg store. Hg store size is above 5GB and server gets timeout before cloning

我不小心将大约 5GB 的文件签入了 Mercurial。我们的构建服务器在克隆 repo 期间开始失败。因此,我们使用 Remove 命令还原了签入的文件。但是 .hg/store/data 仍然包含那些文件。它的大小超过 5GB。我们在互联网上搜索并发现了几种方法,例如:hg convert。但是 hg convert 正在创建新的 repo,这在我们的案例中是不需要的。我们也不能延长构建服务器的超时时间。

我们如何才能完全删除错误的签到而不将其存储在.hg/store/data中? 要么 我们如何减少 .hg/store/data?

的大小

hg clone-r 选项允许在特定修订后创建没有变更集的存储库。

因此您可以执行以下操作(假设 LAST_GOOD_CHANGESET 是您错误提交之前的变更集):

hg clone -r LAST_GOOD_CHANGESET repo repo.1
mv repo repo.bak
mv repo.1 repo

但是请注意,这将在您错误提交后删除所有提交,因此您将不得不重播重要的提交(即排除那些试图修复错误的提交)。

此外,如果您有分支,则必须将它们列为 hg clone 的附加 -r 参数,否则它们也会从已清理的存储库中删除。

这是您需要做的:您需要去除那些变更集。

由于您的存储库托管在 Bitbucket 上,您无法直接访问这些文件,因此您需要使用网站提供的内容。

在您的存储库项目中,在设置下,有一个用于删除变更集的部分。

请注意,这还将删除在错误变更集之上提交的所有变更集。我们将处理此问题。

我要强调一下:

  1. 制作
  2. 当然
  3. 备份!

步骤如下

重要提示:如果您团队中的任何开发人员在本地有任何待处理的内容,例如尚未推送到 bitbucket 的变更集,但他们已经 从 bitbucket 克隆了错误的变更集,然后你需要做更多的嫁接,确保你在尝试此之前了解所有需要完成的事情。

  1. 确保你有一个好的备份你的存储库的本地克隆,这是最重要的我(或 Stack Overflow)是如果您最终丢失了要在此过程中保留的变更集,则不承担任何责任。特别注意上面关于其他开发人员可能拥有的未推送变更集的警告。
  2. 在本地克隆中,首先将在错误变更集之上提交的任何和所有变更集直接移植到它之前的变更集上。

    即。如果历史看起来像这样:

    1---2---3---BAD---5---6---7
    

    您想在 3 之上嫁接 5-7,以便您之后拥有以下历史记录:

    1---2---3---BAD---5---6---7
             \
              +--5---6---7
    
  3. 然后使用以下命令删除错误的变更集(以及它后面的所有内容):

    hg strip BAD
    
    `BAD` here is the number or hash of the bad changeset
    
  4. 验证本地一切正常,然后前往 bitbucket.org
  5. 找到您的存储库,进入“设置”并找到条带变更集部分
  6. 输入错误变更集的 哈希值 并要求 bitbucket 将其删除
  7. 之后,从您的本地克隆推送,将您移植的变更集带回 bitbucket
  8. 重要:现在您需要让所有已经从 bitbucket 克隆并获得错误变更集的人需要废弃他们的本地克隆并重新克隆。这将带来存储库的新副本,没有错误的变更集。