Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mercurial中意外提交了大量原始数据,如何防止其过载我的bitbucket存储库?_Mercurial_Bitbucket - Fatal编程技术网

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

在Mercurial中意外提交了大量原始数据,如何防止其过载我的bitbucket存储库?,mercurial,bitbucket,Mercurial,Bitbucket,我将大量数据从实验室文件服务器复制到笔记本电脑上,然后意外地将其提交到我用来备份论文的Mercurial存储库中 现在我有200+MB的数据,即使在我删除了这些文件之后,我也不需要占用硬盘空间。这不是一个真正的问题,但是我同步到的bitbucket存储库只给了我1GB的空间,我需要这些空间来存储数据 愚蠢的是,我删除了文件并再次提交,因此我不能只使用中描述的回滚,而不创建新的存储库,并且必须使用bitbucket重置所有内容 有没有办法解决这个问题,这样我就不会浪费四分之一的存储库空间?我可以回

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

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

愚蠢的是,我删除了文件并再次提交,因此我不能只使用中描述的回滚,而不创建新的存储库,并且必须使用bitbucket重置所有内容

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

您可以:

  • 使用
    hg strip
    删除已添加文件的变更集及其所有内容 子体(请注意,这将完全删除它们,因此仅当这些文件是在此期间提交的唯一内容时才执行此操作)
  • 将这些变更集导入MQ并编辑它们
  • 使用带有选项的
    hg convert
    从Mercurial转换为Mercurial
  • 将您的存储库克隆到错误的变更集,然后从此变更集推送,如中所述

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

    我想你还没逼着我。我还假设您的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
    应该编辑(
    FILE1
    FILE2
    添加内容应该回滚),并且
    A
    和下面的内容应该保持原样

    警告:只有当
    B
    C
    尚未被推到Bitbucked(或任何其他公共回购)上时,这才有效

    您需要启用MQ扩展来实现这一点。为此,请将以下行添加到repo中的
    .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
    

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

    https://bitbucket.org/<user>/<repo>/admin/strip
    
    https://bitbucket.org///admin/strip
    
    它将提供一个选项,在特定的提交之后剥离所有更改


    注意:以前在repo config菜单中有一个链接可以访问该URL。现在访问它的唯一方法似乎是直接键入它。

    你能给我解释一下SET2吗?谢谢。@Canageek:那会很长的。在Mercurial wiki上查找MQ教程。@Cat Plus:+1回答您的问题(和OP的问题)。我打算建议选项4:克隆/推送克隆/删除原始回购。只是回滚B和C,然后重新提交所有内容会有问题吗?@Canageek唉,你只能
    回滚
    Mercurial的一个最新操作。为了澄清,我对B和C使用散列,对吧:类似于8D2C0CB0012的东西第一个问题:我尝试了你的解决方案:“hg strip 8d2c0cb0012a”得到响应“hg:unknown command‘strip’Mercurial Distributed SCM”,然后是一个基本命令列表。我想我已经安装了一个轻量级的版本或者类似的?我有Mercurial Distributed SCM@Canageek您启用了MQ扩展了吗?