11

私はMercurialに不慣れで、まだ評価プロセスにあるので、これらの4つの概念は私にとってちょっと混乱しています。Gitのステージング/インデックスの概念と同等であると言われているものもあれば、Gitのステージングよりも優れているものもあります。

4つのコマンドhg graft、、、および(および、ただしhg record、これはすでにGraftとTransplantで説明されています)は互いにどのように比較され、キューdirstateの概念はどのようになりますか?どのユースケースで一方が他方よりも選択されますか?hg qrecordhg shelvehg transplant

それぞれにヘルプページがあることは知っていますが、VCSは一般的に私にとって新しいトピックであるため、それぞれが何をするのかを理解するのは依然として困難です。

4

1 に答える 1

17

Mercurialの設計には、ステージング領域の概念が含まれていません。つまり、ローカル変更とコミットの間に中間状態はありません。

あなたが言及した各概念の概要は次のとおりです。

hg graftと同等ですgit cherry-pick。あるブランチから別のブランチにコミットをコピーします。この機能の一般的な使用例は、あるリリースブランチから別のリリースブランチにバグ修正をコピーすることです。このコマンドは、古い(現在は廃止された)hg transplant拡張機能を置き換えます。

hg recordhg qrecordに似ていgit add --patchます。コミットするハンクをインタラクティブに選択できます。したがって、1つのファイルの複数の異なる領域を変更した場合、実際にコミットする領域(つまり、ハンク)と、ローカル変更として残す領域を選択できます。

qrecord有効にしている場合にのみ使用できますmqmq標準のコミットではなく、パッチにコミットします。

hg shelveに似ていgit stashます。それはあなたがあなたのファイル(またはファイルの塊)へのローカルな変更を一時的に取っておくことを可能にします。これらの変更は、unshelved準備ができたときに行うことができます。

dirstateMercurialソースコードの内部クラスです。ユーザーには公開されません。

Mercurial Queues(としても知られていmqます)は、おそらくMercurialのステージングエリアに最も近い場所です。Mercurialwikiの説明は次のとおりです。

変更は、Mercurialにコミットされるパッチとして維持されます。コミットは削除または並べ替えることができ、作業ディレクトリで行われた変更に基づいて、基になるパッチを更新できます。パッチディレクトリはリビジョン管理下に置くこともできるので、パッチに加えられた変更の個別の履歴を持つことができます。

mqローカルでテストしているが、パブリックな場所にプッシュしていないコミットを洗練/再加工するためによく使用されます。一部の人々はまた、サードパーティのコードへの一連の変更を維持するためにそれを使用します。

于 2012-11-29T17:42:55.640 に答える