我无意中向Mercurial办理了5GB的文件登记。我们的Build服务器在克隆repo时失败了。因此,我们使用Remove命令恢复了签入的文件。但是.hg / store / data仍然包含这些文件。它的尺寸超过5GB。我们通过互联网搜索并找到了一些方法,例如:hg convert。但是hg convert正在创建新的repo,这在我们的案例中是不可取的。此外,我们无法延长构建服务器的超时时间。
如何在不将其存储在.hg / store / data中的情况下完全删除错误的签入? 要么 我们怎样才能减小.hg / store / data的大小?
答案 0 :(得分:2)
以下是您需要做的事情:您需要删除这些更改集。
由于您的存储库托管在Bitbucket上,因此您无法直接访问这些文件,因此您需要使用网站提供的内容。
在您的存储库项目中,在设置下,有一个用于删除更改集的部分。
请注意,这也会删除在错误的变更集之上提交的所有变更集。我们将处理此问题。
我会强调这一点:
以下是步骤
重要提示:如果您团队中的任何开发人员在本地有任何待处理的内容,例如尚未推送到bitbucket的更改集,但他们 克隆了来自bitbucket的错误更改集,然后你需要做更多的嫁接,确保你在尝试之前理解需要完成的一切。
在本地克隆中,首先将在错误更改集之上提交的任何和所有更改集移植到直接位于其之前的变更集上。
即。如果历史看起来像这样:
1---2---3---BAD---5---6---7
你希望在3之上移植5-7,以便你以后拥有这段历史:
1---2---3---BAD---5---6---7
\
+--5---6---7
然后使用以下命令删除错误的变更集(及其后面的所有内容):
hg strip BAD
`BAD` here is the number or hash of the bad changeset
答案 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
参数,否则它们也将从已清理的存储库中删除。