1

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

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

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

4

1 回答 1

3

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


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

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

私人回购

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

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

  • 如果变更集是很久以前提交的,您可能会更新到它的父节点,移植有问题的变更集(您可能必须坚持一个虚拟变更集才能使其工作),将其导入 MQ,修改它,rebase --detach然后其余的祖先就在它上面。

公开回购

您可以对私有仓库执行相同的操作,但请记住将创建沿袭的副本:

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

即使您将A–<code>D替换为A'–<code>D',从您的 repo 中提取的每个人仍将拥有A–<code>D!你必须想办法让他们剥离这个血统。

于 2012-05-27T11:47:20.053 回答