10

Mercurial でタグの使用を開始したいと考えています。常に最新の適切なリビジョンを指す「安定した」タグを用意する予定です。

私が理解しているように、現在の変更セットにタグを付けることができhg tag stableます.

タグを移動する適切な方法は何ですか? もう一度実行しようとすると、次のようhg tag stableに表示されます。

中止: タグ 'stable' は既に存在します (強制するには -f を使用してください)

そして、強制すると、解決策やコメントのないこのバグが発生します。つまり、古いタグを複製します。そもそもなぜタグが複数回そこにある必要があるのか​​ さえわかりません。単一の変更セットを指すように更新したいだけです。

4

3 に答える 3

15

そのようなタグの移動操作は見たことがありませんが、基本的に何かをコピーして元のものを削除しているので、次のようになります。

hg tag --remove stable
hg tag -r newrevisionhash  stable

または、バージョン番号など、ある種のサフィックスをタグに追加します。また、リリースを追跡することもできます。

意見 1: 私は常に、Mercurial は履歴を保存することを目的としており、git では何かを変更できるのに対し、Mercurial では代わりに上書きする必要があると考えていました。

意見 2: 安定版リリースをマークする別の方法は、それらを 1 つのブランチに保持することです。私が働いている場所にdefaultは、安定したコードしかありません。他のすべての作業は、分離されたブランチで行われます。

タグを更新するための汚いワンライナー:

current=`hg log -l1 --template '{node}'`; hg tag --remove stable; hg tag -r $current stable

この残虐行為は、次の Mercurial エイリアスとして追加できるようです.hgrc

[alias]
movetag=!(current=`hg log -l1 --template '{node}'`; $HG tag --remove stable; $HG tag -r $current stable)

タグの削除/追加はそれ自体がコミットであるため、現在のヒントの値をキャプチャするため、ヒントを「移動」します(タグ付けについて何も問題はありませんtip-正確さのためだけです)。確かにそれをより美しくする可能性はありますが、それらは私にとってはうまくいきました.

于 2013-08-20T16:24:59.987 に答える
7

Instead of having a tag that moves, you should use named branches instead. They function almost like a moving tag.

You write in a comment above that

All work is done on other branches, but we merge them into 'default' when they're ready and then perform integration testing. There's a period where 'default' may be fubar if there's a bad merge. Thus I want to keep a stable tag on default and only move it after the integration testing is complete/verified.

To solve this you need an extra named branch — call it stable. Then merge tested and approved changesets on default into stable in your own pace. It doesn't matter if default has changesets that are still being tested, when changeset X passes the tests, you do

$ hg update stable
$ hg merge X

to promote X as a stable changeset. Descendants of X (on default) remain unchanged, i.e., they are not yet marked stable.

于 2013-08-20T22:47:11.013 に答える
4

@guessimtoolate と @Martin Geisler がすでに指摘しているように、名前付きブランチを使用してすべての適切なリビジョンに対応できます (これは、会社で hg を使用する方法でもあります)。もう 1 つの方法は、ブックマークを使用することです。ブックマークは、1 つのリビジョンに付けられた移動可能なラベルとして機能します。

于 2013-08-21T11:28:35.770 に答える