2011-01-20 16 views
6

私は現時点でMercurialで遊んでいますが、これは決して問題にならないかもしれませんが、リポジトリを作成していくつかの変更を追加しました。私はある時点でそれをタグ付けし、別の箇所に名前付きブランチを作成しました。タグとブランチの名前は同じです。私がhg update nameを実行すると、タグ付きバージョンに切り替わります。ブランチ上のリビジョン番号を使用する以外にブランチに切り替える方法はありますか?Mercurial:タグの名前が同じ場合、名前付きブランチに切り替えるにはどうすればいいですか?

私が考えているのは、特定のリビジョンを自動的にビルドするためのスクリプトを書く場合、ビルドするタグまたはブランチを指定するだけでよいということでした。誰かがタグとブランチで同じ名前を使用した場合、正しいリビジョンを取得するスクリプトに問題が発生します。これらが一意であることを確認するための唯一の解決策ですか?あらかじめペンディングしているブランチやタグを付けて名前を付けます。 (新しいMercurialのでhg help revsetsを参照)

revsets機能を使用しています
hg update -r "limit(heads(branch(name)),1)" 

+0

+1は前方思考です。私がブランチを意味するときにタグを作成した後、タグを削除した後、ビルド/デプロイスクリプト(ブランチを引数として取る)が間違ったことをやり始めました。 – harpo

答えて

3

hg branchesの出力を解析して、ブランチのチップリビジョンを取得します。

は、このような状況(ブランチとタグ、popularという名前の両方)考えてみましょう:

$ hg branches | grep popular | awk -F ':' '{print $2}' 
:bashのようなシェルで

$ hg tags 
tip       3:afb4026bfe32 
popular      1:cea974d8cfc4 
$ hg branches 
default      3:afb4026bfe32 
popular      2:aa7ede2bb3f6 

を、あなたがpopularのチップリビジョンを取得します

タグリビジョンの取得は、hg tagsを使用して同様に動作します。

スクリプトは問題のブランチ/タグに更新できます。

+0

ありがとう、これは私が推測する(ちょうど-wをgrepに追加して完全に一致させなければならない)。代わりにbashのラインの – DaveJohnston

+1

、あなたも使用できます。 '$のHGログ-b人気-l 1 --template「{ノードを|短い} \ n'' :-) –

+0

@ChristopheMuller、私はそのことを見つけます常に機能するとは限りません。あなたは現在のリビジョンの履歴にその支部を持たなければなりません。この答えはどちらの場合でも有効ですが( 'cut -d 'を使っていますが、' awk'ではなく '-f2') – harpo

2

私はあなたがそれを行うことができると思います。

しかし私は頭と首について作成した人を打ち負かすとタグを削除するだけでした。

+0

動作していないようです。これはtip(デフォルトブランチ上にあります)に更新されます。矛盾のない別のブランチに更新しても動作します。 – DaveJohnston

関連する問題