7

Mercurial のヘルプ テキストには、「strip コマンドは、指定された変更セットとそのすべての子孫を削除する」と書かれています。これは歴史を書き直すようなもので、誰かが突然削除された変更セットの 1 つに基づいて作業を行った場合、問題が発生するはずです。しかし、ヘルプ テキストには、このコマンドは「履歴を書き換える操作ではなく、パブリック フェーズのチェンジセットで使用できる」とも書かれています。ヘルプ テキストを書いた人は、自分が何をしているかをよく知っていたと確信しています。

4

2 に答える 2

8

重要な点は、公開チェンジセットを削除して、どこかから再度取得しても、問題は発生していないということです。元の変更セットを取得するだけです。

(たとえば) 2 つのパブリック変更セットを一緒に折りたたんでから、元の変更セットをどこかからプルすると、2 つのブランチができます。1 つは元の 2 つの変更セット、もう 1 つは折りたたまれた変更セットですが、どちらも同じ変更があります。その時点で地獄が解き放たれ、子供を食べるモンスターが地球を歩き回ります.

したがって、「歴史の書き換え」は「歴史の剥ぎ取り」と同じではありません。


davidmc24は、Matt Mackall (Mercurial の父) によるこの投稿を指摘し、基本的に同じことを言っています。

于 2012-12-07T08:44:55.007 に答える
1

断言はできませんが、「おじいちゃん」だと思います。hg stripその一部として開始され、フェーズmqの追加よりも少なくとも 3 年前にさかのぼります。

おそらくより良い言い回しは次のようになります。

*履歴書き換え操作とは*見なされず*、公開段階の変更セットで使用できます

フェーズが追加されたとき、既存のワークフローを壊さないように細心の注意が払われました。コミットはドラフト段階で開始され、プッシュされると公開されます。フェーズ認識コマンドは、コミットのフェーズをプッシュした後は公開されており、その場合は変更を許可しないことを認識しています (非公開リポジトリへのプッシュでない限り...)。

stripしかし、プッシュされた変更セットを手動またはスクリプトで削除するためにすでに使用している人々がいてstrip、アップグレード後に突然「ねえ、それが公開されていることを取り除くことはできません!」と言った場合。そうすれば、それらの人々は下位互換性の約束を破っていたでしょう。

Phases は、ほぼすべてのケースで mq よりもはるかに優れた選択肢となる、非常に驚​​くべき進化システムにゆっくりと成長していますが、Matt に mq とストリップを削除するように依頼することはできないと思います - 彼はまだ Python 2.4 との互換性を維持することを主張していますコードベースとそれは 9 歳です!

Tl;Dr:strip拡張機能は常に無効でしたが、フェーズの出現によりその動作を変更するために使用する人が多すぎます。

于 2012-12-07T03:18:32.793 に答える