web-dev-qa-db-ja.com

hgタグとhgブックマークの違いは何ですか?

Mercurialの tagbookmark の違いは何ですか?この2つがどのように異なるのかについての議論は見当たらないようです。

65
Jason S

リポジトリを「choose your own adventure books」と見なし、さまざまな視点から見てみましょう。

  • tagは、編集者が原稿に「OK、私たちはあなたの現在のtraceを保持するように付けたスタンプのようなものですたわごとが起こった場合に備えて」
  • 名前付きブランチは章になります。あなたが書く必要がある章をある時点で選択する必要があり、それらは留まるためにそこにあります。一部は元に戻り、一部は終了します(すみません、あなたは亡くなりました。)
  • bookmarkはブックマークです。あなたが本を読んでいる(コミットしている)間、それはあなたに従います。それはあなたが「あなたがその時に読んでいたもの」を追跡するのに役立ちますので、それらを削除し、別の「章」に移動することができます。ブックを共有する場合(プッシュ)、明示的に共有しない限り、通常はブックマークを共有しません。つまり、ライフサイクルは名前付きブランチよりも短いため、通常は匿名ブランチで使用します。
33
gizmo

実際に使用する5つの概念があります。

  • タグ
  • ローカルタグ
  • ブックマーク
  • 軽量ブランチ
  • 名前付きブランチ

Mercurialを使用するだけで軽量ブランチが実現します。リポジトリの履歴は分岐し、物事を変更して履歴内を移動するとマージされることがあります。

他の4つは、軽量ブランチとそれらを構成するチェンジセットに注釈を付ける方法です。

名前付きブランチとタグはMercurialのみの概念であり、ブランチ名とタグは、リポジトリへのコミットを増やすことで実際にリポジトリに記録されます。それらは、必ずしも明白ではない方法で他のリポジトリに伝播する傾向があります。

ローカルタグとブックマークは、gitがタグとブランチを呼び出すものに非常に似ています。これらは、バージョン管理されたオブジェクトと混合されるのではなく、メタデータです。そのため、それらはリポジトリ履歴の一部として表されません。それらはリポジトリに対してローカルである傾向があり、意図的に伝播しない限り伝播しません。

少なくとも私はそれがそれらすべてが機能する方法だと思います。 Mercurialを毎日約12か月使用した後、私は実際にそのモデルを理解することができませんでした。誰かが私よりよく知っている場合は、この回答が正しいように自由に編集してください。


実際にこれらを実際に使用する方法。

私は他の約20人と単一の共有リポジトリに取り組んでいます。私は自分のプライベートリポジトリで多くの実験と軽量ブランチを作成し、メインの中央リポジトリには決してプッシュされません。時折、実験がうまくいったら、メインラインを変更し、チェンジセットを中央リポジトリにプッシュします。中央リポジトリから、他の人のマシンへの道を見つけます。

Mercurialの動作に慣れているユーザーの場合は、一部のチェンジセットを同僚にプッシュすることがあります。しかし、何人かの人々はそれを少し怖がっており、パッチを適用できる差分を送信することを好んでいます。

私は短命でプライベートであると期待する実験のために、軽量ブランチをそれらが発生する可能性のある場所に発生させ、何が起こっているかを覚えています。 twigそれが少し前からあった)について私の記憶が滑っているのを感じたら、ブックマークする.

ローカルタグを使用して、いつか戻ってきたいリビジョンにマークを付けます。それらは興味深い過去の状態を見つけやすくします。

私自身、ローカル以外のタグや名前付きブランチを作成することはほとんどありません(偶然の場合を除き、作成した場合は破棄します)。しかし、私たちの解放の人々はそうします。私たちのリリースされたメジャーバージョンはすべて、メインラインから離れた独自の名前付きブランチを持ち、マイナーバージョンはそれらのブランチにタグがあります。これにより、これらの重要なブランチとタグが誰にとっても同じように見えます。

繰り返しますが、これがMercurialの使用方法であるかどうかはわかりませんが、チームの規模に応じてうまく機能するモデルのようです。

3人または4人が実験で共同作業をしたい場合、それはおそらく名前付きブランチの価値があるでしょう。どれだけうまくいくかわかりません!

24

ブックマークは、作業の進行中に変化するコミットIDを指すニーモニック(foo_feature)が必要な場合に使用されます。それらは通常のMercurialブランチよりも軽量で、gitブランチの動作方法にいくぶん似ています。

タグは通常、固定されたコミットIDを指します。それらは手動で再割り当てできますが、これはお勧めできません。

23

最大の違いは、コミットするとブックマークが自動的に前に移動することです。次に例を示します。

hg init
..edit a file..
hg commit -m 'my commit' # creates revision 0
hg tag -r 0 mytag     # creates revision 1
hg bookmark -r 0 mybookmark   # doesn't create a revision
hg update 0   # get back to r0
..edit a file..
hg commit -m 'another commit'  # creates revision 2

その時点では、mytagはまだリビジョン0を指しており、mybookmarkはリビジョン2を指しています。また、タグ付けはチェンジセットを作成しましたが、ブックマークは変更セットを作成しませんでした。

また、もちろん、ブックマークはrevisioを作成しました

12
Ry4an Brase