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

时间:2016-08-29 05:33:47

标签: mercurial tortoisehg mercurial-convert

我无意中向Mercurial办理了5GB的文件登记。我们的Build服务器在克隆repo时失败了。因此,我们使用Remove命令恢复了签入的文件。但是.hg / store / data仍然包含这些文件。它的尺寸超过5GB。我们通过互联网搜索并找到了一些方法,例如:hg convert。但是hg convert正在创建新的repo,这在我们的案例中是不可取的。此外,我们无法延长构建服务器的超时时间。

如何在不将其存储在.hg / store / data中的情况下完全删除错误的签入?  要么  我们怎样才能减小.hg / store / data的大小?

2 个答案:

答案 0 :(得分:2)

以下是您需要做的事情:您需要删除这些更改集。

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

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

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

我会强调这一点:

  1. 不确定
  2. 有无
  3. 备份!
  4. 以下是步骤

    重要提示:如果您团队中的任何开发人员在本地有任何待处理的内容,例如尚未推送到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克隆的每个人都得到一个糟糕的变更集,需要废弃他们的本地克隆并重新克隆。这将删除存储库的新副本,没有糟糕的变更集。

答案 1 :(得分:1)

-r的{​​{1}}选项允许在特定修订后创建没有更改集的存储库。

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

LAST_GOOD_CHANGESET

但请注意,这将在您错误提交后丢弃所有提交,因此您必须重播重要提交(即排除那些尝试修复错误的提交)。

此外,如果您有分支,则必须将它们列为hg clone -r LAST_GOOD_CHANGESET repo repo.1 mv repo repo.bak mv repo.1 repo 的其他-r参数,否则它们也将从已清理的存储库中删除。