如何在Mercurial中删除特定版本的文件?

时间:2012-05-27 10:41:55

标签: mercurial

我需要在我的仓库中删除特定版本的版本化文件,但我不知道该怎么做。

我可以使用hg cat --rev [version] [file-name]查看该文件,但我不知道要删除它。

任何人都知道如何删除特定文件版本?

1 个答案:

答案 0 :(得分:3)

简短回答:如果您的回购是公开的,那就很难了。如果它是私人的,更容易。


长答案:Mercurial是一个面向变更集的CVS,实际上并不存储文件修订版。相反,它存储修订(差异)之间的变化。

除此之外,每个变更集ID都根据修订内容计算为加密哈希。这意味着如果您更改了单个变更集,则会更改其每个后代变更集。这是Mercurial重写历史的代价。

私人仓库

如果您需要更改的更改集未被推送到任何位置(或者repo本身是私有的),那么您可以根据需要更改历史记录。

  • 如果变更集是最近的变更集,请考虑使用Mercurial Queues:您可以将变更集导入队列,转到相关变更集,撤消对某个特定文件的更改,然后重新应用其余文件队列。

  • 如果变更集很久以前就已提交,您可能会更新其父级graft违规变更集(您可能必须坚持使用虚拟变更集才能使其正常工作),将其导入MQ,修改它,然后rebase --detach其余的祖先。

公共回购

您可以使用私人仓库执行相同操作,但请记住将创建血统的副本:

-- 1 -- 2 -- A -- B -- C -- D    original A and its descendants
         \
          A' -- B' -- C' -- D'   modified A' and its descendants

即使您将A - D替换为A' - D',从您的回购中提取的所有人仍然会A - {{1} }!你必须找到一种方法让它们剥离这个血统。