在Mercurial中意外提交了大量原始数据,如何防止其过载我的bitbucket存储库?
我将大量数据从实验室文件服务器复制到笔记本电脑上,然后意外地将其提交到我用来备份论文的Mercurial存储库中 现在我有200+MB的数据,即使在我删除了这些文件之后,我也不需要占用硬盘空间。这不是一个真正的问题,但是我同步到的bitbucket存储库只给了我1GB的空间,我需要这些空间来存储数据 愚蠢的是,我删除了文件并再次提交,因此我不能只使用中描述的回滚,而不创建新的存储库,并且必须使用bitbucket重置所有内容 有没有办法解决这个问题,这样我就不会浪费四分之一的存储库空间?我可以回滚我所做的最后两次提交吗?您可以:在Mercurial中意外提交了大量原始数据,如何防止其过载我的bitbucket存储库?,mercurial,bitbucket,Mercurial,Bitbucket,我将大量数据从实验室文件服务器复制到笔记本电脑上,然后意外地将其提交到我用来备份论文的Mercurial存储库中 现在我有200+MB的数据,即使在我删除了这些文件之后,我也不需要占用硬盘空间。这不是一个真正的问题,但是我同步到的bitbucket存储库只给了我1GB的空间,我需要这些空间来存储数据 愚蠢的是,我删除了文件并再次提交,因此我不能只使用中描述的回滚,而不创建新的存储库,并且必须使用bitbucket重置所有内容 有没有办法解决这个问题,这样我就不会浪费四分之一的存储库空间?我可以回
hg strip
删除已添加文件的变更集及其所有内容
子体(请注意,这将完全删除它们,因此仅当这些文件是在此期间提交的唯一内容时才执行此操作)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扩展了吗?