6

Mercurial で軽量ブランチを含むワークフローを実現しようとしている Git ユーザーは、多くの場合 Mercurialのブックマークを参照しています。簡単に言うと、推奨事項は、git ブランチに対応する複数のヘッドを維持し、それらにブックマークを付けて名前を付けることです。

masterこのようなワークフローで一般的に望まれるのは、現在のブランチが親ブランチ (通常、または別の存続期間の長いブランチ)から分岐された時点以降に行われたすべてのコミットのリストを表示することです。git では、これは次の方法で実現できます。

git log <master>..HEAD

ここ<master>で、親ブランチの名前です。

Mercurial でブックマークを使用した場合、このコマンドに相当するものは何でしょうか?

次のプロパティを持つコマンドを探しています。

  • どのリビジョンをどのような順序で (明らかに) リストするかという点で、上記の git コマンドと同じセマンティクスを持っています。
  • git コマンドと同様に、現在の「ブランチ」(ブックマーク) の名前を入力する必要はありません。
  • 現在の「ブランチ」が親の「ブランチ」から分岐したポイントにブックマークが存在する必要はありません。親「ブランチ」のヘッドを指すブックマークの存在が必要になる場合があります。このブックマークを呼び出すことができますmaster
  • 短いです。これを行うたびに引用符で囲まなければならない長い revset 式を入力したくはありません。(とは言っても、私が望むものを与える revset 式をまだ見つけていないので、長いものでも進歩します。)
4

1 に答える 1

6

Git ログのマンページ (Git リビジョンのマンページへのリンク付き) は、次のように範囲指定を定義します。

<rev1>..<rev2>

   Include commits that are reachable from <rev2> but exclude those that are reachable from <rev1>.

順序についても次のように述べています。

By default, the commits are shown in reverse chronological order.

この仕様を考えると、Mercurial revset

reverse(ancestors(.)-ancestors(<bookmark>))

十分なはずです。

よく見ると、このリビジョンセットは仕様に完全に従っています。現在の作業コピーの親から到達可能なコミットを逆の順序で表示し、指定されたブックマーク (この場合は「マスター」) から到達可能なコミットを除外します。私は、Git の構文はこの仕様の省略形だと考えています。いわゆる revset エイリアスを使用して、Mercurial で同じこと (ショートカットの作成) を行うことができます。

次の行を .hgrc に入れます。

[revsetalias] 
range($1)=reverse(ancestors(.)-ancestors($1))

これを使用できるようにします:

hg log -r range(<bookmark>)

より柔軟にしたい場合は、.hgrc で次のように定義できます。

[revsetalias] 
range($1,$2)=reverse(ancestors($2)-ancestors($1))

以下を使用して HEAD の例を取得します。

hg log -r range(<bookmark>, .)

「範囲」という単語を入力するには多すぎる場合は、いくつかの特殊文字も使用できます。

[revsetalias] 
_($1)=reverse(ancestors(.)-ancestors($1))

結果の略記

hg log -r_(<bookmark>)

よりもさらに短い

git log <bookmark>..HEAD

しかし、もちろん、これは単なるつまらないものです。

于 2013-08-22T08:41:55.787 に答える