7

Mercurial 帮助文本说,“strip 命令删除指定的变更集及其所有后代”。对我来说,这听起来很像改写历史,如果有人将他的工作基于突然被删除的变更集之一,它一定会引起问题。但帮助文本还说该命令“不是历史重写操作,可用于公共阶段的变更集。” 我确信编写帮助文本的人非常清楚他在做什么,那么我缺少什么来理解这一点?

4

2 回答 2

8

关键是,如果你剥离一个公共变更集,然后从某个地方再次拉取它,你并没有引起任何问题。您只需取回原始变更集。

如果您(例如)将两个公共变更集折叠在一起,然后从某个地方拉出原始变更集,那么您现在有两个分支。一个包含原始的两个变更集,一个包含折叠的变更集,但两者都具有相同的更改。在那一点上,地狱爆发了,吃孩子的怪物在地球上漫游。

因此,“历史重写”与“历史剥离”不同。


davidmc24指出了Matt Mackall(Mercurial 的父亲)的这篇文章,他在其中说的基本相同

于 2012-12-07T08:44:55.007 回答
1

我不能肯定地说,但我猜它是“祖父”。hg strip开始作为mq其中的一部分,比增加阶段至少早三年。

可能更好的措辞是:

不是*考虑*历史重写操作,可用于公共阶段的变更集

在添加阶段时,我们会非常小心地破坏任何人的现有工作流程。提交从草稿阶段开始,一旦推送就会公开。任何阶段感知命令都知道,在推送提交的阶段之后是公开的,并且如果它不允许修改(除非推送到非发布存储库......)。

但是,有些人已经在使用strip手动和脚本来删除已推送的变更集,如果strip在升级后突然说“嘿,你不能剥夺它是公开的!” 那么这些人的向后兼容性承诺就会被打破。

Phases 正在慢慢成长为一个相当惊人的进化系统,在几乎所有情况下,这将是比 mq 更好的选择,但我仍然怀疑我们是否会让 Matt 删除 mq 并剥离——他仍然坚持保持与 Python 2.4 兼容代码库,那是 9 岁!

Tl;Dr:尽管strip它一直是一个禁用的扩展程序,但有太多人使用它来改变它的行为,随着阶段的到来。

于 2012-12-07T03:18:32.793 回答