意外地在Mercurial中提交了大量原始数据,如何防止它超载我的bitbucket存储库?

时间:2011-12-11 19:13:42

标签: mercurial bitbucket

我将大量数据从我的实验室文件服务器复制到我的笔记本电脑,然后意外地将其提交到我用来备份我的论文的Mercurial存储库。

现在我有200多MB的数据,即使在我删除文件后,我也不需要在硬盘上占用空间。这不是一个真正的问题,但我同步的bitbucket存储库只给我1 GB的空间,我将需要我的数据。

然后我愚蠢地删除了文件并再次提交,因此我不能像https://stackoverflow.com/a/3290523/961959中所述那样使用回滚而不创建新的存储库并且不得不使用bitbucket重置所有内容。

有没有办法解决这个问题,所以我不会浪费四分之一的存储库空间?我可以回滚我做的最后两次提交吗?

3 个答案:

答案 0 :(得分:5)

你可以:

  1. 使用hg strip删除已添加文件及其所有文件的变更集 后代(请注意,这将完全删除它们,所以只有这些文件是在此期间提交的唯一文件时才这样做。)
  2. 将这些变更集导入MQ并进行编辑。
  3. 使用--filemap选项将Mercurial中的hg convert用于Mercurial。
  4. 将您的存储库克隆到错误的变更集,然后按照FAQ中的描述推送此变更集。

答案 1 :(得分:4)

如果我想回滚两个最近的提交,我将描述我会做什么。

我认为你还没有推到Bitbucked。我还假设您在DAG之上有这些变更集:

o  C: Deleted files FILE1 and FILE2
|
o  B: Some nice changes; also added large files FILE1 and FILE2
|
o  A: Some good changeset

此处,C应该完全删除,B应该被修改(FILE1FILE2添加应该回滚),A及以下应保持原样。

警告:仅当BC未被推送到Bitbucked(或任何其他公共回购)时才有效。

您需要启用MQ扩展来执行此操作。为此,请将这些行添加到您的仓库中的.hg/hgrc文件中:

[extensions]
mq=

步骤

首先,我剥离C

$ hg strip C

现在,C已被删除,父级为B。我导入B作为Mercurial Queues 补丁进行编辑:

$ hg qimport -r B -n B.patch

现在我的队列顶部有一个补丁,它是从B创建的。我删除了大文件,然后刷新补丁:

$ hg forget FILE1 FILE2 
$ hg qrefresh

现在B.patch不再包含大文件。然而,它们仍然在磁盘上,尽管不受Mercurial控制。我现在用MQ完成我的工作:

$ hg qfinish -a

这就是我现在所拥有的:

o  B1: Some nice changes, no big files here
|
o  A: Some good changeset

答案 2 :(得分:0)

如果更改已经推送到BitBucket,它确实提供了从服务器中删除更改集的选项。在本地执行 strip 后,您应该访问url:

https://bitbucket.org/<user>/<repo>/admin/strip

它将提供在特定提交后删除所有更改的选项。

注意:曾经有一个链接可以在repo配置菜单中访问该URL。现在访问它的唯一方法似乎是直接输入它。