2012-12-07 29 views
6

Mercurialのヘルプテキストには、 "stripコマンドは指定されたチェンジセットとそのすべての子孫を削除します"と表示します。これは、私に履歴を書き換えるのと非常によく似ています。誰かが突然削除されたチェンジセットの1つに自分の仕事を基づいていれば、問題を引き起こすはずです。しかし、ヘルプテキストには、このコマンドは「履歴書き換え操作ではなく、公開フェーズのチェンジセットで使用できる」とも書かれています。私は、ヘルプテキストを書いた人が彼が何をしているかをよく知っていたと確信しています。だから私はこれを理解するために何が欠けていますか?Mercurialのstripコマンドで履歴が書き換えられないのはなぜですか?

答えて

1

私はそれを確実に言うことはできませんが、私の推測では、それは "祖父がいる"ということです。 hg stripは、mqの一部として開始し、フェーズの少なくとも3年の追加に先立って開始しています。

多分、より良い言い回しは、次のようになります。

が*履歴書き換え動作*考えられないし、相が膨大な量を添加すると、パブリック相

にチェンジセットで使用することができます誰も既存のワークフローを壊さないよう注意が払われました。コミットはの段階から開始し、公開が一度押されると開始します。位相認識コマンドは、コミットのフェーズを実行した後にpublicであり、プッシュが非パブリッシングリポジトリへのものでない限り、変更を許可しないことを知っています。

しかし、すでにstripを手動で使用していて、プッシュされたチェンジセットを削除するスクリプトで、アップグレード後にstripが突然「こんにちは、あなたは公開できない」と言った人がいました。それらの人々は後方互換性の約束を崩してしまいます。

位相はゆっくりとかなり驚くほど大きくなります。evolveシステムは、ほぼすべてのケースでmqよりはるかに優れた選択肢になりますが、私はまだMattがmqとストリップを取り除くことに疑いを持ちます。 Python 2.4と互換性のあるコードベースで、それは9歳です!

Tl; Dr:stripは常に無効になっていますが、あまりにも多くの人がそれを使用してフェーズの到来とともに動作を変更しています。

+0

おかげRy4anを言うているマット・マッコール(Mercurialの父親)によってthis postを指摘しました。私は訂正と説明を感謝します。 –

+1

これは、 'strip'がチェンジセットを削除しないで、それらを隠すことを意味しますか?私は出版前に開発から100%_remove_マイナーコミットする方法を模索していました。これは安全で非常に重要な機能です。開発者はローカルコミットを頻繁に行う必要があります(これはDVCSの利点の1つです)。そして、 "機能ごとに1つのコミット"チェンジセットをマスターにマージしますブランチ(これは、すべてのマスターブランチがどのように見えるかです(例えば、Python、Sphinxなどのもの)。 Mercurialで "Phases"を使って明確な方法で達成できる方法はありますか? – Iodnas

+0

ストリップ**は**それらを削除します。私の主張は、それが3年前にそれを前にしていたので、それがフェーズシステムの範囲外にあることでした。 –

7

重要なポイントは、パブリックチェンジセットを削除した後、別の場所から再度プルすると問題が発生していないことです。元のチェンジセットを元に戻すだけです。

2つの公開チェンジセットをまとめて折りたたんで、元の場所から元の場所に戻すと、2つのブランチが作成されます。元の2つのチェンジセットを持つものと、変更されたチェンジセットを持つものですが、どちらも同じ変更を行います。その地点で地獄はゆるやかな子供の食べるモンスターを破壊し、地球を歩き回ります。

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


davidmc24彼は基本的に同じこと

+0

私は子供が怪物を食べるのが大好きです。 –

関連する問題