hg

ソースコード管理システム Mercurial

Author: Matt Mackall <mpm@selenic.com>
Organization: Mercurial
Manual section:1
Manual group:Mercurial Manual

Contents

概要

hg command [option]... [argument]...

説明

hg コマンドは、 Mercurial のコマンドラインインタフェースです。

コマンド行指定での凡例

files...
1つ以上の、ファイル名あるいは相対パスの指定; パターン指定の詳細は、 ファイル名パターン を参照してください。
path
ローカルホスト上のパスの指定
revision
リビジョン番号、 タグ名、 一意なチェンジセットハッシュ値など、 リビジョンを特定するための識別値の指定
repository path
ローカルホスト上のリポジトリへのパスや、 連携先リポジトリの URI の指定

オプション

-R, --repository <リポジトリ>
 リポジトリのルート位置、 またはバンドルファイルのパス
--cwd <ディレクトリ> 作業領域の変更
-y, --noninteractive
 問い合わせ無しで、 最初の選択肢を自動的に選択
-q, --quiet 出力を抑止
-v, --verbose 付加的な出力を有効化
--config <設定[+]>
 オプション設定を指定/上書き(指定形式は 'section.name=value')
--debug デバッグ出力を有効化
--debugger デバッガを開始
--encoding <文字コード>
 文字エンコーディングの設定 (既定値: UTF-8)
--encodingmode <モード>
 文字エンコーディングのモード設定 (既定値: strict)
--traceback 例外発生の際に常にトレースバックを表示
--time コマンド実行の所要時間を計測
--profile コマンド実行のプロファイルを表示
--version バージョン情報を表示して終了
-h, --help ヘルプ情報を表示して終了
--hidden 不可視状態のリビジョンも対象に含める

[+] 印付きのオプションは複数回指定可能です

コマンド

add

指定ファイルの追加登録予約:

hg add [OPTION]... [FILE]...

構成管理へのファイルの追加登録を予約します。

指定されたファイルは、 次回のコミットから構成管理対象となります。 追加登録のコミット前取り消しは hg help forget を参照してください。

ファイル名指定が無い場合、 作業領域中の全ファイルが対象となります。

以下の実行例は、 hg add 実行における(未知のファイルの)自動的な 追加の例です:

$ ls
foo.c
$ hg status
? foo.c
$ hg add
foo.c を追加登録中
$ hg status
A foo.c

全てのファイルの登録が成功した場合のコマンド終了値は 0 です。

オプション:

-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-S, --subrepos サブリポジトリへの再帰的適用
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

addremove

新規ファイルの追加登録、 および不在ファイルの登録除外:

hg addremove [OPTION]... [FILE]...

作業領域中の新規ファイルの追加登録、 および全不在ファイルの登録除外を 行ないます。

.hgignore に記述されたパターンに合致する新規ファイルは 無視されます。 hg add と同様に、 実行効果が発揮されるのは 次回コミット時点です。

ファイルの改名を検知するには -s/--similarity を使用します。 これは、 0 (改名比較無し) から 100 (完全一致で判定) の範囲で、 類似度を指定 するオプションです (パーセンテージ指定)。 0 より大きい指定値の場合、 全ての追加/除外ファイル対象として、 改名の有無が判定されます。 改名判定には、 相応の時間を要する場合があります。 判定結果の確認は、 本コマンドの実行後に hg status -C 出力を参照してください。 -s/--similarity 未指定の場合、 100 が指定されたものとみなされ、 内容が完全に一致するファイルのみが、 改名とみなされます。

全てのファイルの登録が成功した場合のコマンド終了値は 0 です。

オプション:

-s, --similarity <類似度>
 ファイル改名推定の際の類似度(0 以上 100 以下)
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

annotate

ファイル行毎のリビジョン情報表示:

hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...

ファイルの各行毎に、 その内容が由来するリビジョンIDを表示します。

本コマンドは、 変更の実施者または実施時期を特定するのに有用です。

-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果の有用性の有無に関わらず 全てのファイルが処理対象となります。

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン>
 当該リビジョン時点での由来情報を表示
--follow 複製/改名元ファイルの履歴追跡と、 ファイル名の表示(非推奨)
--no-follow 複製/改名元ファイル履歴の追跡を抑止
-a, --text 全ファイルをテキストファイルと仮定
-u, --user ユーザ名を表示(-v 指定時は詳細表示)
-f, --file ファイル名を表示
-d, --date 日付を表示(-q 指定時は簡略表示)
-n, --number リビジョン番号を表示(既定動作)
-c, --changeset
 ハッシュ値を表示
-l, --line-number
 由来リビジョンでの初出時の行番号を表示
-w, --ignore-all-space
 差分判定の際に空白文字を無視
-b, --ignore-space-change
 差分判定の際に空白文字の数を無視
-B, --ignore-blank-lines
 差分判定の際に空白行を無視
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

別名: blame

archive

特定リビジョン時点のアーカイブのリポジトリ外への生成:

hg archive [OPTION]... DEST

特に指定が無い場合、 作業領域の親リビジョンが使用されます。 他のリビジョンを指定する場合は -r/--rev を使用します。

アーカイブ種別は、 出力先ファイルの拡張子から自動的に判定されますが -t/--type で強制することも可能です。

例:

  • 1.0 版時点のファイルを格納した zip ファイルの生成:

    hg archive -r 1.0 project-1.0.zip
    
  • .hg で始まるファイルを除外した tar ファイルの生成:

    hg archive project.tar.gz -X ".hg*"
    

有効種別一覧:

files:展開済みアーカイブのイメージ(無指定時)
tar:非圧縮の tar アーカイブ形式
tbz2:bzip2 圧縮の tar アーカイブ形式
tgz:gzip 圧縮の tar アーカイブ形式
uzip:非圧縮の zip アーカイブ形式
zip:deflate 圧縮の zip アーカイブ形式

アーカイブ生成先となるファイル名またはディレクトリ名の指定には 置換指定を使用することができます。 置換指定に関する詳細は hg help export を参照してください。

アーカイブ生成の際には、 展開時の格納先ディレクトリ名が記録されます。 -p/--prefix によりディレクトリ名を指定できます(置換指定可能)。 特に指定が無い場合、 アーカイブファイルへのパスの末尾要素から、 拡張子を除いたものが記録されます。

成功時のコマンド終了値は 0 です。

オプション:

--no-decode デコード処理を回避
-p, --prefix <接頭辞>
 アーカイブファイルのディレクトリ接頭辞
-r, --rev <リビジョン>
 アーカイブ対象リビジョン
-t, --type <種別>
 アーカイブ種別
-S, --subrepos サブリポジトリへの再帰的適用
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

backout

以前のリビジョンにおける変更の打ち消し:

hg backout [OPTION]... [-r] REV

対象リビジョンでの変更を打ち消す効果を持つ変更を、 作業領域で作成します。

対象リビジョンが、 作業領域の親リビジョンの場合、 新規作成された打ち消しリビジョンは、 自動的にコミットされます。 それ以外の場合は、 マージが実施されますが、 マージ結果はコミットされません。

Note

hg backout による打消し機能は、マージ実施リビジョンに対しては、 適用できません。

特に指定が無い場合、 打ち消しリビジョンは、 単一の親リビジョンしか持たない、 一直線の履歴となるように作成されます。 --merge を指定した場合は、 2つの親リビジョンを持つようになります。 一方の親は作業領域の親リビジョン、 もう一方は、 打ち消しリビジョン (= 打ち消し対象の新規子リビジョン) です。

1.7 版より前の本コマンドの --merge 無し時挙動は、 打消しを --merge 付きで実行した後に hg update --clean . 実行したものと等価です。 ここでの hg update --clean . 実行は、 マージ実施をキャンセルし、 後から別途マージできるように、 打ち消しリビジョンを、 ヘッドのまま残す働きをします。

-d/--date での日時表記は hg help dates を参照してください。

成功時のコマンド終了値は 0、 打消しが必要なリビジョンが無い場合や、 未解消の衝突が発生した場合は 1 です。

オプション:

--merge 打ち消しリビジョンを現親リビジョンとマージ
--parent <リビジョン>
 打ち消しリビジョンとのマージ対象 (非推奨)
-r, --rev <リビジョン>
 打ち消し対象リビジョン
-t, --tool <値> マージツールの指定
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録

[+] 印付きのオプションは複数回指定可能です

bisect

リビジョンの二分探索:

hg bisect [-gbsr] [-U] [-c CMD] [REV]

問題発生契機となるリビジョンを探索します。 使用開始の際には、 問題が発生する既知のリビジョンのうち、 最古のものを bad とマークし、 問題が発生しない既知のリビジョンのうち、 最新のものを good とマーク します。 本コマンドは、 検証対象リビジョンで作業領域を更新します(-U/ --noupdate 指定時除く)。 当該リビジョンを検証したなら、 bad あるいは good でマークしてください。 本コマンドは、 次の検証候補リビジョンで 作業領域を更新するか、 問題契機リビジョンを特定できた旨を出力します。

簡便な手順としては、 作業領域を更新せず、 リビジョン指定を使用して、 リビジョンを good または bad にマークすることもできます。

コマンドが指定された場合、 自動的なリビジョン検証に使用されます。 コマンド実行時には、 環境変数 HG_NODE に検証対象リビジョンの ID が格納されます。コマンドの終了コードは、 リビジョンに対する bad または good のマーク付けに使用されます。終了コード 0 は good、 125 はリビジョンのスキップ、 127 (コマンド不在) は探索の中止、 その他の非 0 終了コードは bad とみなされます。

例:

  • 既知の bad なリビジョン 34 と good なリビジョン 12 から探索開始:

    hg bisect --bad 34
    hg bisect --good 12
    
  • 現リビジョンを good または bad 化して探索を継続:

    hg bisect --good
    hg bisect --bad
    
  • 現リビジョンまたは特定のリビジョンをスキップ (例: 別な問題により、 当該リビジョンの検証ができない):

    hg bisect --skip
    hg bisect --skip 23
    
  • foobar の両方を変更したリビジョン以外をスキップ:

    hg bisect --skip "!( file('path:foo') & file('path:bar') )"
    
  • 現行の探索状態をクリア:

    hg bisect --reset
    
  • 最初の問題リビジョン探索の自動化に 'make && make tests' を利用:

    hg bisect --reset
    hg bisect --bad 34
    hg bisect --good 12
    hg bisect --command "make && make tests"
    
  • 現在の探索において、 状態の判明しているリビジョン全てを表示:

    hg log -r "bisect(pruned)"
    
  • 現在の検証対象リビジョンを表示 (特に -U/--noupdate 併用時に有用):

    hg log -r "bisect(current)"
    
  • 現在の探索対象範囲のリビジョン全てを表示:

    hg log -r "bisect(range)"
    
  • ASCII文字による履歴ツリー表示も可能:

    hg log --graph -r "bisect(range)"
    

bisect() の詳細は hg help revsets を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-r, --reset 探索状態のリセット
-g, --good 対象リビジョンの探索状態を good 化
-b, --bad 対象リビジョンの探索状態を bad 化
-s, --skip 対象リビジョンの検証作業を省略
-e, --extend 探索範囲の拡張
-c, --command <コマンド>
 good/bad 検証用コマンド
-U, --noupdate 対象リビジョンによる作業領域内容の更新を抑止

bookmarks

移動可能なマーキングによる履歴進展の追跡:

hg bookmarks [OPTIONS]... [NAME]...

ブックマーク (bookmark) は、 コミット操作に追従して移動する、 リビジョン特定用の情報です。 ブックマークのリポジトリ間伝播は、 自動的には行われません。 ブックマークに対しては、 改名/複製/削除が可能です。 hg mergehg update へのリビジョン指定において、 ブックマークを使用することが可能です。

hg bookmark NAME を実行することで、 作業領域の親リビジョンに、 指定された名前で、 ブックマークが設定されます。 -r を使用して、 対象リビジョンを指定した場合 (対象指定自体にも、 ブックマークを使用可能) そのリビジョンにブックマークが設定されます。

ブックマークは、 リポジトリ間での取り込みや反映が可能です (hg help push および hg help pull 参照)。 但し、 連携するリポジトリの両方が、 ブックマーク機能に対応している必要があります 1.8 版より前の Mercurial の場合、 bookmarks エクステンションを有効にしてください。

ブックマーク '@' が設定されている場合、 特に指定がなければ、 複製先の作業領域は、 そのリビジョンで更新されます (ブックマーク '@' はアクティブになります)

-i/--inactive 指定のある場合、 作成された新規ブックマークは、 アクティブにはなりません。 -r/--rev 指定のある場合、 -i/--inactive 指定が無くても、 新規ブックマークはアクティブになりません。 -i/--inactive 指定時に、 ブックマーク名指定が無い場合は、 現在アクティブなブックマークが、 非アクティブ化されます。

オプション:

-f, --force 強制実施
-r, --rev <リビジョン>
 リビジョン
-d, --delete 指定ブックマークの削除
-m, --rename <名前>
 指定ブックマークの改名
-i, --inactive

ブックマークを非アクティブ化

別名: bookmark

branch

ブランチ名の設定、 または現ブランチ名の表示:

hg branch [-fC] [NAME]

Note

ブランチ名の情報は永続的で、 他リポジトリにも伝搬されます。 軽量な名前付けが必要なら、 hg bookmark でブックマークを作成してください。 名前付きブランチと、 ブックマークの詳細に関しては、 hg help glossary を参照してください。

引数無しの場合、 現ブランチ名を表示します。 引数が1つ指定された場合、 作業領域のブランチ名を設定します(次回コミット時まで、 ブランチは生成 されません)。 作業時に基本とするブランチには、 'default' ブランチを 使用することをお勧めします。

-f/--force 指定が無い場合、 例えそれが非アクティブなものであっても、 既存ブランチと同じ名前は設定できません。

-C/--clean を指定することで、 以前のブランチ名設定を無効にして、 作業 領域の親リビジョンのブランチ名に戻します。

作業領域の内容を既存ブランチのもので更新する場合は hg update を 使用してください。 現ブランチを閉鎖する場合は hg commit --close-branch を使用してください。

成功時のコマンド終了値は 0 です。

オプション:

-f, --force 同名既存ブランチが存在する場合でもブランチ作成を実施
-C, --clean ブランチ名設定を解消し、 親リビジョンのブランチに戻る

branches

リポジトリ中の名前付きブランチの一覧:

hg branches [-ac]

リポジトリ中の名前付きブランチを、 非アクティブ (inactive) か否かと共に一覧表示します。 -c/--closed 指定時には、 閉鎖済みのブランチ (hg commit --close-branch 参照) も表示されます。

-a/--active 指定時には、 アクティブなブランチのみが表示されます。 リポジトリ中にヘッドを持つものがアクティブなブランチとみなされます。

作業領域の内容を既存ブランチのもので更新する場合は hg update を 使用してください。

コマンドの終了値は 0 です。

オプション:

-a, --active 未マージなヘッドを持つブランチのみを表示
-c, --closed 閉鎖済みヘッドも表示

bundle

バンドルファイルの生成:

hg bundle [-f] [-t TYPE] [-a] [-r REV]... [--base REV]... FILE [DEST]

連携対象リポジトリに存在しないリビジョンの情報をまとめて、 圧縮形式のバンドルファイルを生成します。

連携対象リポジトリが無指定の場合、 --base 指定されたリビジョンが、 連携対象リポジトリ側に存在するものと仮定します。 -a/--all (または --base null) 指定により、 全リビジョンを含むバンドルファイルが生成できます。

圧縮形式は -t/--type で指定可能です。 利用可能な圧縮形式は none (無圧縮), bzip2, gzip です (無指定時は bzip2 圧縮)。

バンドルファイルは hg unbundle または hg pull によって、 他リポジトリに取り込めるので、 変更内容を任意の方法で伝播できます。 バンドルファイルによる伝播は、 hg push/hg pull での直接転送や、 リポジトリ全体の公開が、 できない/望ましく無い場合に有用です。

バンドルファイルによる取り込みでは、 権限設定、 複製/改名、 変更履歴等を含む全ての更新内容が取り込まれます。

成功時のコマンドの終了値は 0、 変更が検出できない場合は 1 です。

オプション:

-f, --force 連携先が無関係なリポジトリでも実行
-r, --rev <リビジョン[+]>
 バンドルに含めたいリビジョン
-b, --branch <ブランチ[+]>
 バンドルに含めたいブランチ
--base <リビジョン[+]>
 連携先リポジトリに存在することを仮定するリビジョン
-a, --all リポジトリ中の全リビジョンをバンドルに含める
-t, --type <種別>
 バンドルファイルの圧縮形式 (既定値: bzip2)
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

cat

指定されたリビジョン時点のファイル内容の出力:

hg cat [OPTION]... FILE...

指定されたリビジョン時点でのファイル内容を出力します。 リビジョンが 指定されない場合は、 作業領域の親リビジョン時点の内容を表示します。

出力先指定(置換指定可能)がある場合、 出力はファイルに保存されます。 置換指定として以下のものが使用可能です:

%%:"%" 文字そのもの
%s:対象ファイルパスの末尾要素
%d:対象ファイルの格納ディレクトリ、 または '.'(ルートの場合)
%p:対象ファイルのリポジトリルートからの相対パス
%H:ハッシュ値(40 桁 16 進数)
%R:リビジョン番号
%h:短縮形式ハッシュ値(12 桁 16 進数)
%r:ゼロ詰めのリビジョン番号
%b:対象リポジトリパスの末尾要素

成功時のコマンド終了値は 0 です。

オプション:

-o, --output <書式>
 ファイル内容の保存先
-r, --rev <リビジョン>
 出力対象リビジョン
--decode デコード処理を実施
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

clone

既存リポジトリの複製:

hg clone [OPTION]... SOURCE [DEST]

既存リポジトリを、 新規ディレクトリに複製します。

複製先ディレクトリ指定が無い場合、 複製元パス名の末尾要素を使用します。

後々の hg pull 実施に備えて、 複製先リポジトリの .hg/hgrc ファイルには、 複製元リポジトリ位置が default 名義で記録されます。

複製先に指定可能なのは、 ローカルファイルシステム上のパスと、 ssh:// 形式 URL のみです。 ssh:// 形式 URL を指定した場合、 作業領域の更新や、 .hg/hgrc の生成は行われません。

-r/--rev でのリビジョン指定や、 -b/--branch でのブランチ指定により、 一部のリビジョンのみを取り込むことができます。 複製先のリポジトリは、 指定リビジョンと、 その祖先のみを保持します。 これらのオプション指定 (あるいは hg clone src#rev dest 形式での複製) がある場合、 同一ファイルシステム上のリポジトリの複製でも、 --pull 指定時と、 同様に振舞います。 タグ名でリビジョンを指定した場合、 タグ「対処」リビジョンは、 複製先に取り込まれますが、 タグ「実施」リビジョンは、 複製先に取り込まれません。

複製元リポジトリにブックマーク '@' が設定されている場合、 特に指定がなければ、 複製先の作業領域は、 そのリビジョンで更新されます。

特定のリビジョンで、 作業領域を更新する場合は -u/--update を、 作業領域にデータを持ちたくない場合は -U/--noupdate を指定します。

複製元/複製先が、 同一ファイルシステム上にある場合、 資源効率の点から、 (リポジトリの内部管理データに対してのみ) ハードリンクが使用されます。 ハードリンク実装が不適切な、 ファイルシステム (例: AFS) は、 ハードリンク使用時に、 エラー通知がありません。 このような場合には --pull を指定することで、 ハードリンク使用を抑止してください。

リポジトリの内部管理データと作業領域中のファイル全てに対する、 ハードリンクによる複製の作成には、 以下の方法が使えるかも知れません:

$ cp -al REPO REPOCLONE

この方法は最速の複製方法かもしれませんが、 常に安全とは限りません。 操作の単一性は保障されません (複製中のリポジトリの変更防止は、 利用者責務) し、 利用するエディタのファイル変更時の振る舞いが、 ハードリンクを破棄するものである必要があります (Emacs および多くの Linux 系ツールは、 そのように振舞います)。 この制約は、 MQ エクステンションのように、 .hg ディレクトリ配下に、 管理情報を格納するツールとは相容れません。

Mercurial は、 以下の一覧中で最初に利用可能なリビジョンを用いて、 作業領域を更新します:

  1. -U が指定されるか、 元リポジトリ履歴が空の場合は null リビジョン
  2. -u . が指定され、 且つ元リポジトリが同一ホストの場合、 元リポジトリの作業領域の第1親リビジョン
  3. -u で指定されたリビジョン (ブランチ名が指定された場合、 当該ブランチの最新ヘッドリビジョン)
  4. -r で指定されたリビジョン
  5. -b で指定sれたブランチの最新ヘッドリビジョン
  6. url#branch 形式で指定されたブランチの最新ヘッドリビジョン
  7. ブックマーク '@' が存在する場合は、そのリビジョン
  8. default ブランチの最新ヘッドリビジョン
  9. tip

例:

  • 遠隔ホストのリポジトリを、 新規 hg/ ディレクトリ配下に複製:

    hg clone http://selenic.com/hg
    
  • 同一ホスト上のリポジトリを軽量複製:

    hg clone project/ project-feature/
    
  • SSH 接続先から絶対パス指定で複製 (ダブルスラッシュに注意):

    hg clone ssh://user@server//home/projects/alpha/
    
  • LAN 経由での高速複製と、 特定リビジョンでの作業領域更新:

    hg clone --uncompressed http://server/repo -u 1.5
    
  • 特定リビジョンまでしか含まないリポジトリの生成:

    hg clone -r 04e544 experimental/ good/
    
  • 特定の名前付きブランチ限定での複製:

    hg clone http://selenic.com/hg#stable
    

URL 記述の詳細は hg help urls を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-U, --noupdate 作業領域の更新無し(管理領域のみの複製)
-u, --updaterev <リビジョン>
 作業領域更新用リビジョン(タグ名/ブランチ名)
-r, --rev <リビジョン[+]>
 複製対象に含めるリビジョン
-b, --branch <ブランチ[+]>
 指定ブランチのみを複製
--pull メタデータ複製に pull プロトコルを使用
--uncompressed 非圧縮での転送(LAN での高速転送用)
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

commit

指定ファイルまたは全ての変更内容のリポジトリへの記録:

hg commit [OPTION]... [FILE]...

指定されたファイルの変更内容を、 管理領域に記録 (コミット) します。 中央集権的な構成管理ツールと異なり、 この操作で変更が記録されるのは、 手元の管理領域に対してのみです。 能動的な変更伝播に関しては、 hg help push を参照してください。

ファイル指定が省略された場合、 hg status により検出される全ての 変更内容がコミットされます。

hg merge 結果をコミットする場合、 ファイル名または -I/-X の、 いずれも指定しないでください。

コミットログが指定されない場合、 メッセージ入力用のプログラムが、 設定に従って起動されます。 コミット処理が失敗した場合でも、 入力したメッセージは .hg/last-message.txt に保存されます。

--amend を指定した場合、 作業領域の親リビジョンの持つ変更内容に、 hg status が表示する変更内容 (変更がある場合) を加えたもので、 作業領域の親リビジョンを改変します。 改変前のリビジョンの内容は、 バンドル形式で .hg/strip-backup にバックアップされます。 (復旧方法は hg help bundle および hg help unbundle を参照). (※ 訳注: --amend 指定時は、 対象ファイルを指定しても、 追加記録分の選択にのみ使用され、 記録済みファイルの取捨選択には、 影響しません。 MQ エクステンションの hg:qrefresh における --short 指定と同等な挙動となります。)

コミットログ、 ユーザ名、 記録日付は、 明示的な指定が無い限り、 改変対象のリビジョンのものが再利用されます。 コマンド行において、 コミットログが指定されない場合、 改変前のメッセージを使って、 エディタが起動されます。

public フェーズ (hg help phases 参照) のリビジョンや、 既に子リビジョンを持つリビジョンは、 改変できません

-d/--date での日時表記は hg help dates を参照してください。

成功時のコマンドの終了値は 0、 変更が検出できない場合は 1 です。

オプション:

-A, --addremove
 新規/不在ファイルを、コミット前に登録/除外対象化
--close-branch ブランチを閉鎖し、 ブランチ一覧での表示から除外
--amend 作業領域の親リビジョンの改変
-s, --secret secret フェーズでコミット中
-e, --edit 指定されたコミットログをエディタで更に編集
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

別名: ci

config

全設定ファイルによる最終的な設定内容の表示:

hg config [-u] [NAME]...

引数指定が無い場合、 全ての設定項目に対して、 名前と値を表示します。

'section.name' 形式に合致する引数を1つだけ指定した場合、 その設定項目 値のみを表示します。

複数の引数が指定された場合、 それらをセクション名とみなし、 該当する セクションの設定項目を全て表示します。

--edit 指定のある場合、 ユーザ毎設定ファイルの編集を開始します。 --global 指定のある場合は、 システムワイド設定ファイルが、 --local 指定のある場合は、 リポジトリ毎設定ファイルが、 編集対象になります。

--debug 指定がある場合、 設定項目毎に記述位置(ファイル名と行番号)が 表示されます。

設定ファイルに関する詳細は hg help config を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-u, --untrusted
 信頼できない設定項目も表示
-e, --edit ユーザ毎設定ファイルの編集
-l, --local リポジトリ毎設定ファイルの編集
-g, --global

システムワイド設定ファイルの編集

別名: showconfig debugconfig

copy

指定されたファイルの複製:

hg copy [OPTION]... [SOURCE]... DEST

対象ファイルが複製元からの複製であることを記録します。 複製先指定が ディレクトリの場合、 ディレクトリ内に複製が作成されます。 複製先指定が ファイルの場合、 複製元は1つしか指定できません。

特に指定が無い場合、 複製元ファイルの内容を持つ複製先ファイルを作業 領域に作成します。 -A/--after 指定がある場合、 「複製」操作は記録され ますが、 ファイルの複製は行われません。

本コマンドの実行結果は次回のコミットの際に効果を発揮します。 複製操作のコミット前取り消しは、 hg help revert を参照して ください。

成功時のコマンドの終了値は 0、 エラー発生時は 1 です。

オプション:

-A, --after 手動で複製済みのファイルに対して、 複製の旨を記録
-f, --force 同名の登録済みファイルが存在しても複製を実施
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

別名: cp

diff

作業領域全体(または指定ファイル)の差分抽出:

hg diff [OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...

指定されたファイルに対して、 リビジョン間の差分を表示します。

差分は unified diff 形式で表示されます。

Note

マージ実施リビジョンに対する本コマンドの差分出力が、 期待と異なる場合があるのは、 対象リビジョンが無指定の場合に 比較対象となるのが、 作業領域の第1親に固定されているためです。

リビジョンが2つ指定された場合、 指定リビジョン間の差分が表示されます。 リビジョンが1つ指定された場合、 作業領域との間の差分が表示されます。 リビジョンが指定されない場合、 作業領域と親との差分が表示されます。

指定リビジョンと、 その第1親との間の差分を見るには、 -c/--change で 対象リビジョンを指定する方法も使用できます。

-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果に関わらず全てのファイルが 処理対象となります。

git 拡張差分形式で表示するには -g/--git を指定します。 詳細は hg help diffs を参照してください。

例:

  • 作業領域のファイルを親リビジョンと比較:

    hg diff foo.c
    
  • 2つのリビジョン時点でのディレクトリ内容を比較 (改名情報付き):

    hg diff --git -r 1.0:1.2 lib/
    
  • 指定日時時点からの差分の統計情報を表示:

    hg diff --stat -r "date('may 2')"
    
  • 指定キーワードを含む全新規追加ファイルの差分を表示:

    hg diff "set:added() and grep(GNU)"
    
  • 指定リビジョンとその親を比較:

    hg diff -c 9353         # 第1親との比較
    hg diff -r 9353^:9353   # 上記と等価な revset 文法記述
    hg diff -r 9353^2:9353  # 第2親との比較
    

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン[+]>
 リビジョン
-c, --change <リビジョン>
 当該リビジョンにおける変更内容の表示
-a, --text 全ファイルをテキストファイルと仮定
-g, --git git 拡張差分形式の使用
--nodates 差分表示の際に日付情報の表示を抑止
-p, --show-function
 差分表示の際に関数名情報を表示
--reverse 変更を取り消すための差分を生成
-w, --ignore-all-space
 差分判定の際に空白文字を無視
-b, --ignore-space-change
 差分判定の際に空白文字の数を無視
-B, --ignore-blank-lines
 差分判定の際に空白行を無視
-U, --unified <数値>
 差分コンテキストの行数
--stat diffstat 形式の変更概要を出力
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

export

1つ以上のリビジョンに対するヘッダおよび変更内容の出力:

hg export [OPTION]... [-o OUTFILESPEC] [-r] [REV]...

指定リビジョンに対して、 ヘッダ情報および変更内容を表示します。 リビジョン指定が無い場合は、 作業領域の第1親指定とみなします。

ヘッダ情報として表示される情報は:作成者/日付/ (default 以外の場合は)ブランチ名前/ハッシュ値/親リビジョン/コミットログ

Note

本コマンドの差分出力が、 マージ実施リビジョンに対しては、 期待と異なる場合があります。 差分出力の際の比較対象が、 指定リビジョンの第1親に固定されているためです。

出力先指定(置換指定可能)がある場合、 出力はファイルに保存されます。 置換指定として以下のものが使用可能です:

%%:"%" 文字そのもの
%H:ハッシュ値(40 桁 16 進数)
%N:生成されるファイルの総数
%R:リビジョン番号
%b:対象リポジトリパスの末尾要素
%h:短縮形式ハッシュ値(12 桁 16 進数)
%m:コミットログの1行目 (英数字限定)
%n:1から始まるゼロ詰めの通し番号
%r:ゼロ詰めのリビジョン番号

-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果に関わらず、 全てのファイルが 処理対象となります。

git 拡張差分形式で出力するには -g/--git を指定します。 詳細は hg help diffs を参照してください。

--switch-parent を指定することで、 比較対象が第2親になります。 これはマージのレビューの際などに有効です。

例:

  • export と import の併用による現ブランチ上への変更の移植:

    hg export -r 9353 | hg import -
    
  • 指定リビジョン間の全変更 (改名情報付き) をファイルに出力:

    hg export --git -r 123:150 > changes.txt
    
  • 可読性ある名前の一連のファイルに変更内容を分割格納:

    hg export -r "outgoing()" -o "%n-%m.patch"
    

成功時のコマンド終了値は 0 です。

オプション:

-o, --output <書式>
 ファイル内容の保存先
--switch-parent
 第2親との差分を使用
-r, --rev <リビジョン[+]>
 対象リビジョン
-a, --text 全ファイルをテキストファイルと仮定
-g, --git git 拡張差分形式の使用
--nodates 差分表示の際に日付情報の表示を抑止

[+] 印付きのオプションは複数回指定可能です

forget

次回コミットにおける指定ファイルの登録除外:

hg forget [OPTION]... FILE...

指定ファイルの次回コミットにおける登録除外を予約します。

本コマンドでの登録除外は、 現ブランチにおける登録除外のみを意味し、 履歴そのものは保持され続けますし、 作業領域からも削除されません。

登録除外操作のコミット前取り消しは、 hg help add を参照して ください。

例:

  • 新規追加のバイナリファイルを登録除外:

    hg forget "set:added() and binary()"
    
  • .hgignore による無視対象ファイルを登録除外:

    hg forget "set:hgignore()"
    

成功時のコマンド終了値は 0 です。

オプション:

-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

graft

別ブランチ上から現行ブランチへの指定リビジョンの複製:

hg graft [OPTION]... [-r] REV...

本コマンドは、 あるブランチから別のブランチへ、 Mercurial のマージ機能でリビジョンを複製しますが、 履歴上はマージされません。 これは 'backport' または 'cherry-picking' と呼ばれる機能です。 特に指定の無い場合、 ユーザ名、 日付、 コミットログは、 元リビジョンのものを再利用します。

現行リビジョンの祖先、 既に移植 (graft) 済みのリビジョン、 マージ実施リビジョンは、 複製対象から除外されます。

--log が指定された場合、 以下の形式のコメントがログに付加されます:

(grafted from 移植元リビジョンのハッシュ値)

本コマンドのマージ処理で衝突が検出された場合、 処理が中断されるので、 手動で衝突を解決してください。 全ての衝突が解消されたならば、 -c/--continue 指定により、 未完了の移植を再開してください。

Note

-c/--continue でも、 以前のオプション指定までは再現されません。

例:

  • コミットログを改変しつつ単一リビジョンを stable へ複製:

    hg update stable
    hg graft --edit 9393
    
  • 日付を更新しつつ、2091 を除く指定範囲中のリビジョンを複製:

    hg graft -D "2085::2093 and not 2091"
    
  • 衝突解消後における、未完了の移植の再開:

    hg graft -c
    
  • 複製元リビジョンの表示:

    hg log --debug -r .
    

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン[+]>
 移植対象リビジョン
-c, --continue 中断された未完了の移植を再開
-e, --edit コミットログ入力にエディタを起動
--log コミットログへの移植情報の付与
-D, --currentdate
 現時刻をコミット日時として記録
-U, --currentuser
 現ユーザをコミットユーザとして記録
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-t, --tool <値> マージツールの指定
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

grep

特定のパターンに合致するファイルとリビジョンの検索:

hg grep [OPTION]... PATTERN [FILE]...

正規表現に合致するファイルを含むリビジョンを検索します。

本コマンドの挙動は Unix の grep とは異なります。 解釈可能な正規表現は Python/Perl 形式のものだけです。 検索対象はリポジトリ内のデータのみで、 作業領域は検索対象には含まれません。 パターンに合致する内容が現れたリビジョンを表示します。

特に指定が無い場合、 本コマンドはパターンに合致する内容が最初に現れた リビジョンを各ファイル毎に表示します。 パターンに合致する変更のあった 全てのリビジョンを表示する場合、 --all を指定します(パターン合致部が 削除操作なら "-"、 追加操作なら "+" が検索結果に表示)。

パターン合致がある場合のコマンドの終了値は 0、 それ以外は 1 です。

オプション:

-0, --print0 各フィールドの区切りにNUL文字(0x00)を使用
--all 合致するリビジョンを全て表示
-a, --text 全ファイルをテキストファイルと仮定
-f, --follow 複製元や改名元の履歴も遡る
-i, --ignore-case
 大文字小文字を無視して検索
-l, --files-with-matches
 合致の際にファイル名とリビジョンのみを表示
-n, --line-number
 合致した行番号を表示
-r, --rev <リビジョン[+]>
 指定リビジョン範囲のみを検索
-u, --user ユーザ名を表示(-v 指定時は詳細表示)
-d, --date 日付を表示(-q 指定時は簡略表示)
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

heads

ブランチヘッドを表示:

hg heads [-ct] [-r STARTREV] [REV]...

引数指定が無い場合、 リポジトリ中の未閉鎖ブランチヘッドを、 全て表示します。 「ブランチヘッド」とは、 同一名前付きブランチ上に、 子リビジョンを持たないリビジョンのことです。 新規の変更内容は、 このようなリビジョンに記録されますので、 update や merge 操作での、 対象として指定される機会が多いです。

1つ以上のリビジョンが指定された場合、 指定リビジョンが属する、 名前付きブランチの、 未閉鎖ブランチヘッドのみを表示します。 例えば hg heads . 実行では、 作業領域が属する名前付きブランチの、 未閉鎖ブランチヘッドにみが表示されます。

-c/--closed 指定時には、 閉鎖済みのブランチ (hg commit --close-branch 参照) も表示されます。

「開始リビジョン」が指定された場合、 指定された開始リビジョンの 子孫となるヘッドのみが表示されます。

-t/--topo 指定時には、 名前付きブランチに関する判定は無視され、 構造的 (topological) ヘッド (子リビジョンを一切持たないリビジョン) が表示されます。

合致するヘッドがある場合のコマンドの終了値は 0、 それ以外は 1 です。

オプション:

-r, --rev <開始リビジョン>
 指定リビジョンの子孫となるヘッドのみを表示
-t, --topo 構造的なヘッドのみを表示
-a, --active アクティブなブランチヘッドのみを表示 (非推奨)
-c, --closed 閉鎖済みヘッドも表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ

help

指定されたトピックのヘルプや、 ヘルプ概要の表示:

hg help [-ec] [TOPIC]

引数指定が無い場合、 コマンドの一覧と概要を表示します。

トピックやコマンド名が指定された場合、 指定対象のヘルプを表示します。

成功時のコマンド終了値は 0 です。

オプション:

-e, --extension
 エクステンションのヘルプのみを表示
-c, --command コマンドに関するヘルプのみを表示
-k, --keyword <値>
 キーワードに合致するトピック一覧を表示

identify

作業領域または特定リビジョンの識別情報表示:

hg identify [-nibtB] [-r REV] [SOURCE]

1つまたは2つの親リビジョンのハッシュ値を使用して、 指定リビジョンにおける要約情報を表示します。 親リビジョンハッシュに続けて、 作業領域の変更が未コミットの場合は "+" 、 default 以外のブランチであればブランチ名、 付与されているタグの一覧、 および付与されているブックマークの一覧が表示されます。

リビジョン指定無しで起動された場合は、 作業領域の状態を表示します。

パス指定有りでの起動の際には、 他のリポジトリまたはバンドルファイルの 状態を表示します。

例:

  • 作業領域のビルド識別情報の生成:

    hg id --id > build-id.dat
    
  • タグに対応するリビジョンの特定:

    hg id -n -r 1.3
    
  • 連携先リポジトリにおける最新リビジョンの確認:

    hg id -r tip http://selenic.com/hg/
    

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン>
 当該リビジョンの識別情報を表示
-n, --num リビジョン番号を表示
-i, --id ハッシュ値を表示
-b, --branch ブランチ名を表示
-t, --tags タグを表示
-B, --bookmarks
 ブックマークの表示
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure

サーバ証明書の検証省略(web.cacerts 設定の無視)

別名: id

import

パッチの順次取り込み:

hg import [OPTION]... PATCH...

列挙されたパッチの取り込みおよびコミットを (--no-commit 指定が無い限り) 個別に行います。

取り込み作業は作業領域で実施されるため、 未コミット変更がある場合は、 取り込み操作は中断されます。

添付ファイル形式 (但し text/plain または text/x-patch 型限定) を含めて、 電子メールからもパッチを取り込めます。 作成者/コミットログが無い場合、 電子メールの From および Subject ヘッダ値を使用します。 差分データに先立つ text/plain パートは、 コミットログに追記されます。

hg export により生成されたパッチを取り込む場合、 電子メールの ヘッダやボディの情報よりも、 パッチに含まれる情報の方が優先します。 コマンドラインでの -m/--message または -u/--user 指定は、 これらよりも更に優先します。

--exact 指定時には、 作業領域をパッチの親リビジョンに更新してから、 パッチを適用しますが、 パッチにより作成されたリビジョンのハッシュ値が、 パッチに記録された値と異なる場合、 パッチの取り込みは中断されます。 この問題の原因として考えられるのは、 文字符号化形式の不一致や、 パッチ内容の欠損などです。

--bypass 指定時は、 作業領域内容の変更無しに、 履歴に記録します。 --exact 指定が無い場合、 変更は作業領域の親リビジョンに適用されます。

-s/--similarity が指定された場合、 hg addremove と同様な方針で、 パッチによる変更結果から、 改名や複製を検出します。

標準入力からパッチを取り込むには、 パッチ名に "-" を指定します。 URL が指定された場合、 パッチを当該 URL からダウンロードします。 -d/--date での日時表記は hg help dates を参照してください。

例:

  • ウェブサイトから入手した標準的なパッチの適用と改名の判定:

    hg import -s 80 http://example.com/bugfix.patch
    
  • hgweb サーバからの指定リビジョンの取り込み:

    hg import http://www.selenic.com/hg/rev/5ca8c111e9aa
    
  • Unix 形式 mbox ファイル中の全パッチの取り込み:

    hg import incoming-patches.mbox
    
  • export されたリビジョンの厳密適用 (常に成功するとは限りません):

    hg import --exact proposed-fix.patch
    

成功時のコマンド終了値は 0 です。

オプション:

-p, --strip <数値>
 パス要素除去数(patch コマンドの同名オプションと同機能) (既定値: 1)
-b, --base <パス>
 基底パス (非推奨)
-e, --edit コミットログ入力にエディタを起動
-f, --force 作業領域中の未コミット変更の確認を省略 (非推奨)
--no-commit 作業領域の更新のみで、 コミット実施を抑止
--bypass 作業領域の内容を変更せずにパッチを適用
--exact パッチ作成時と同じ親リビジョンに対して適用
--import-branch
 パッチ中のブランチ情報を利用(--exact 指定時は自動適用)
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-s, --similarity <類似度>
 

ファイル改名推定の際の類似度(0 以上 100 以下)

別名: patch

incoming

指定リポジトリ中の未取り込みリビジョンの検索:

hg incoming [-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]

ファイルパス、 URL または hg pull の無指定時連携先リポジトリ中の、 未取り込みリビジョンを検索します。 これらのリビジョンは hg pull を実行した際に、 取り込み対象となります。

--bundle での書き出し結果を利用した hg pull の実施は、 hg pull での再度のデータ転送を抑止できるため、 (データ転送コストの高い) 遠隔ホストとの連携では特に有用です。

対象リポジトリの指定形式は hg help pull を参照してください。

例:

  • 取り込み対象リビジョン群の変更内容・コミットログ全体も表示:

    hg incoming -vp
    
  • マージ以外の取り込み対象リビジョン群の表示とバンドルへの格納:

    hg in -vpM --bundle incoming.hg
    hg pull incoming.hg
    
  • バンドル内のリビジョン群の簡易表示:

    hg in changes.hg -T "{desc|firstline}\n"
    

取り込み対象がある場合のコマンド終了値は 0、 それ以外は 1 です。

オプション:

-f, --force 連携先が無関係なリポジトリでも実行
-n, --newest-first
 新しいリビジョンから先に表示
--bundle <ファイル>
 バンドルファイルの書き出し先
-r, --rev <リビジョン[+]>
 取り込み対象リビジョン
-B, --bookmarks
 ブックマークの比較
-b, --branch <ブランチ[+]>
 取り込み対象の名前付きブランチ
-p, --patch パッチ形式での表示
-g, --git git 拡張差分形式の使用
-l, --limit <数値>
 最大表示リビジョン数
-M, --no-merges
 マージ実施リビジョンの表示抑止
--stat diffstat 形式の変更概要を出力
-G, --graph 履歴ツリーの表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

別名: in

init

指定されたディレクトリでの新規リポジトリの作成:

hg init [-e CMD] [--remotecmd CMD] [DEST]

指定されたディレクトリに新規リポジトリを作成します。 指定された ディレクトリが存在しない場合には、 ディレクトリを作成します。

ディレクトリが指定されない場合、 現ディレクトリが初期化されます。

複製先として ssh:// URL 形式を指定することも可能です。 詳細に関しては、 hg help urls を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

locate

指定されたパターンに合致する名前を持つファイルの特定:

hg locate [OPTION]... [PATTERN]...

構成管理対象となるファイルの中から、 指定されたパターンに合致する 名前のファイルを特定します。

特に指定が無い場合、 本コマンドは構成管理対象となる作業領域中の 全ディレクトリを検索対象とします。 現ディレクトリとその配下のみを検索 対象とする場合は "--include ." を指定します。

パターン指定が無い場合、 本コマンドは構成管理対象下にある作業領域中の 全てのファイル名を表示します。

本コマンドの出力を "xargs" コマンドへと渡す場合、 本コマンドと "xargs" コマンドの両方に "-0" を指定してください。 空白文字を 含む単一のファイル名を、 "xargs" が複数のファイル名に解釈して しまう問題は、 このオプションにより解消されます。

パターン合致がある場合のコマンドの終了値は 0、 それ以外は 1 です。

オプション:

-r, --rev <リビジョン>
 当該リビジョン時点のファイル一覧から検索
-0, --print0 ファイル名をNUL文字(0x00)で終端(xargs との併用向け)
-f, --fullpath ファイルシステムのルートからの絶対パスで表示
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

log

リポジトリ全体またはファイルの変更履歴の表示:

hg log [OPTION]... [FILE]

特定のファイルまたはリポジトリ全体の変更履歴を表示します。

特に指定されない場合、 対象となるリビジョンの範囲は tip:0 とみなされますが、 --follow が指定された場合は、 作業領域の 親リビジョンが開始リビジョンとみなされます。

ファイルの履歴表示では、 改名/複製時の元ファイルにまでさかのぼった 履歴は表示しません。 元ファイルの履歴をさかのぼる場合は、 ファイル名 と一緒に -f/--follow を使用します。 --follow 指定の際にファイル名が 指定されない場合は、 開始リビジョンに連なるリビジョンのみを表示 します。

特に指定が無い場合、 本コマンドが出力する情報は - リビジョン番号、 識別用ハッシュ値、 タグ、 (リビジョン番号の離れた) 親リビジョン、 作成者、 作成日時およびコミットログの1行目 - です。 -v/--verbose が指定された場合、 変更対象ファイル一覧と、 コミットログの全文も表示されます。

--graph 指定がある場合、 最新リビジョンを上にした履歴グラフ (DAG) を、 ASCII アートで描画します。 履歴グラフにおける 'o' はリビジョン、 '@' は作業領域の親、 'x' は廃止 (obsoleted) リビジョンを意味します。 また '+' は、 同一行の 'o' が '+' 下方のリビジョンを親としたマージで、 且つこのマージによって、 履歴が枝分かれしていることを表します。

Note

-p/--patch 指定による差分出力が、 マージ実施リビジョンに対しては、 期待と異なる場合があります。 差分出力の際の比較対象が、 指定リビジョンの第1親に固定されているためです。 ファイル一覧が、 期待と異なる場合もあります。 更新対象ファイル一覧に列挙されるのは、 マージ対象リビジョンの間で、 内容が異なるファイルのみが、 更新対象として列挙されるためです。

Note

ファイル名指定付きでの実行では、 複数ブランチ上での同一変更や、 登録除外実施リビジョンは、 性能的な点から表示しません。 重複変更や登録除外を含め、 全てのリビジョンを表示する場合、 --removed を指定してください。

例:

  • 全リビジョンのコミットログとファイル一覧の表示:

    hg log -v
    
  • 作業領域の祖先の表示:

    hg log -f
    
  • 現行ブランチにおける直近の 10 リビジョンの表示:

    hg log -l 10 -b .
    
  • 登録除外を含む、ファイルに対する全変更の表示:

    hg log --removed file.c
    
  • マージ以外での、ディレクトリ配下への全変更の差分付き表示:

    hg log -Mp lib/
    
  • 指定キーワードに合致する全リビジョン番号の表示:

    hg log -k bug --template "{rev}\n"
    
  • 指定リビジョンが指定タグ時点において含まれているかを確認:

    hg log -r "a21ccf and ancestor(1.9)"
    
  • 指定期間における指定ユーザによる全変更の表示:

    hg log -k alice -d "may 2008 to jul 2008"
    
  • 最後のタグ付け以降の全変更の概要の表示:

    hg log -r "last(tagged())::" --template "{desc|firstline}\n"
    

-d/--date での日時表記は hg help dates を参照してください。

リビジョン指定の詳細は hg help revisions および hg help revsets を参照してください。

同梱されているスタイルや、テンプレートのカスタマイズ等の詳細は、 hg help templates を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-f, --follow 複製元や改名元の履歴も遡る
--follow-first マージの際には第1親のみを遡る (非推奨)
-d, --date <日時>
 指定日時に合致するリビジョンを表示
-C, --copies 複製されたファイルを表示
-k, --keyword <テキスト[+]>
 指定キーワードによる検索(大文字小文字は無視)
-r, --rev <リビジョン[+]>
 指定された単一、 またはリビジョン区間の表示
--removed ファイルが登録除外されたリビジョンを含める
-m, --only-merges
 マージ実施リビジョンのみを表示 (非推奨)
-u, --user <ユーザ[+]>
 当該ユーザによるリビジョンを表示
--only-branch <ブランチ[+]>
 指定の名前付きブランチに属するリビジョンを表示 (非推奨)
-b, --branch <ブランチ[+]>
 指定の名前付きブランチに属するリビジョンを表示
-P, --prune <リビジョン[+]>
 当該リビジョンとその祖先の表示を抑止
-p, --patch パッチ形式での表示
-g, --git git 拡張差分形式の使用
-l, --limit <数値>
 最大表示リビジョン数
-M, --no-merges
 マージ実施リビジョンの表示抑止
--stat diffstat 形式の変更概要を出力
-G, --graph 履歴ツリーの表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

別名: history

manifest

現時点または指定時点でのリポジトリマニフェストの出力:

hg manifest [-r REV]

指定リビジョンにおける構成管理対象ファイルの一覧を表示します。 リビジョン指定が無い場合、 作業領域の(第1)親リビジョンか、 作業領域の更新前なら null が使用されます。

-v が指定された場合、 ファイルアクセス権やシンボリックリンク、 実行可能ビットといったものも表示されます。 --debug が指定された場合、 各ファイルのリビジョンのハッシュ値が 表示されます。

--all が指定された場合、 リビジョンに関わる全ファイルが表示されます。 この場合、 削除/改名対象ファイルも含まれます。

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン>
 表示対象リビジョン
--all 関連する全ファイルの表示

merge

作業領域の内容と他のリビジョンのマージ:

hg merge [-P] [-f] [[-r] REV]

現時点での作業領域の内容を、 指定されたリビジョンへと至るまでの 共通の親リビジョンからの変更内容とマージします。

両方の親リビジョンに対して差分のあるファイルは、 次回コミットの際には 変更されたものとして記録されますので、 必要以上の変更が実施される前に コミットを実施してください。 このコミット時に生成されるリビジョンは、 親リビジョンを2つ持つリビジョンとなります。

--tool を使用することで、 ファイルのマージに使用するコマンドを指定可能です。 このオプションによる指定は、 HGMERGE 環境変数や設定ファイルによる指定を上書きします。 指定の詳細に関しては、 hg help merge-tools を参照してください。

マージ対象リビジョンの指定が無く、 作業領域の親リビジョンがヘッドで、 且つ現行ブランチがもう1つだけヘッドを持つ場合、 そのヘッドがマージ 対象となります。 それ以外の場合は、 明示的なリビジョン指定が必要です。

衝突未解消なファイルは hg resolve での衝突解消が必要です。

コミット前にマージ処理を取り消す場合は、 hg update --clean . が使用できますが、 マージ前の親リビジョンの内容で上書きするため、 作業領域中の全ての変更内容が失われます。

成功時のコマンド終了値は 0、 未解消ファイルがある場合は 1 です。

オプション:

-f, --force 作業領域中の未コミット変更ごとマージを実施 (非推奨)
-r, --rev <リビジョン>
 マージ対象リビジョン
-P, --preview マージ対象リビジョンの確認(マージ処理は未実施)
-t, --tool <値> マージツールの指定

outgoing

連携先リポジトリに含まれないリビジョンの表示:

hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]

指定された連携先リポジトリ (または、 無指定時の hg push 先リポジトリ) に含まれないリビジョンを表示します。 ここで表示されるリビジョンは、 hg push 実施の際に、 連携先へと反映されます。

有効なリポジトリ指定形式は hg pull を参照してください。

反映可能リビジョンがある場合のコマンド終了値は 0、 それ以外は 1 です。

オプション:

-f, --force 連携先が無関係なリポジトリでも実行
-r, --rev <リビジョン[+]>
 反映対象とするリビジョン
-n, --newest-first
 新しいリビジョンから先に表示
-B, --bookmarks
 ブックマークの比較
-b, --branch <ブランチ[+]>
 反映対象とする名前付きブランチ
-p, --patch パッチ形式での表示
-g, --git git 拡張差分形式の使用
-l, --limit <数値>
 最大表示リビジョン数
-M, --no-merges
 マージ実施リビジョンの表示抑止
--stat diffstat 形式の変更概要を出力
-G, --graph 履歴ツリーの表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

別名: out

parents

作業領域(または指定リビジョン)の親リビジョンの表示:

hg parents [-r REV] [FILE]

作業領域の親リビジョンを表示します。 -r/--rev でのリビジョン指定が ある場合、 指定リビジョンの親リビジョンを表示します。 ファイルが指定 された場合、 (作業領域の親リビジョン、 または --rev 指定のリビジョン 以前のもので)そのファイルを最後に更新したリビジョンを表示します。

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン>
 親リビジョンの表示対象
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ

paths

連携先リポジトリの別名一覧の表示:

hg paths [NAME]

指定されたシンボル名に相当する連携先リポジトリを表示します。 シンボル名が指定されない場合、 全ての別名定義が表示されます。

-q/--quiet が指定された場合、 シンボル名検索の過程における表示は抑止され、 結果表示もシンボル名のみが表示されます。

シンボル定義は、 個人の設定ファイルや /etc/mercurial/hgrc 等の [paths] セクションに記述されます。 作業領域での実行の場合は .hg/hgrc での記述も参照されます。

default および default-push は特別な意味を持ちます。 push/pull の際にコマンド行で連携先リポジトリが指定されない場合、 これらのパスが使用されます。 default-push が設定されている場合、 default-pushhg push で使用され、 defaulthg pull で使用されます。 default-push が未設定であれば、 push/pull 共に default を使用します。 リポジトリの複製では、 複製元リポジトリが default として .hg/hgrc に記録されます。 default および default-push は全ての取り込み (例: hg incoming) および反映 (例: hg outgoinghg email および hg bundle) 操作において適用されます。

詳細は hg help urls を参照してください。

成功時のコマンド終了値は 0 です。

phase

現行フェーズ状態の変更または表示:

hg phase [-p|-d|-s] [-f] [-r] REV...

引数無しの場合、 指定リビジョンのフェーズ名を表示します。

-p/--public、 -d/--draft または -s/--secret が指定された場合、 指定リビジョンのフェーズを指定値に変更します。

-f/--force が指定されない限り、 低い方から高い方へのフェーズ変更は、 実施できません。 フェーズの高低は以下のように定義されています:

public < draft < secret

成功時のコマンドの終了値は 0、 フェーズ状態変更が無い、あるいは、 変更に失敗した場合は 1 です。

オプション:

-p, --public リビジョンのフェーズを public 化
-d, --draft リビジョンのフェーズを draft 化
-s, --secret リビジョンのフェーズを secret 化
-f, --force フェーズ境界の移動を伴う強制実行
-r, --rev <リビジョン[+]>
 対象リビジョン

[+] 印付きのオプションは複数回指定可能です

pull

指定リポジトリからの変更履歴の取り込み:

hg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]

連携先リポジトリから手元のリポジトリに変更履歴を取り込みます。

パスや URL で指定される連携先リポジトリ中の、 全てのリビジョンが (-R 指定が無い場合は現在の) リポジトリへの取り込み対象となります。 特に指定が無い場合、 このコマンドによる作業領域の更新はありません。

hg incoming を使用することで、 実際の取り込みをせずに、 hg pull による取り込み対象を確認することができます。 表示された 内容の取り込みを決断したならば、 hg incoming 実行で表示された 最後のリビジョンを -r の引数にして hg pull -r X を実行します。

連携先が省略された場合、 'default' パスが連携先として使用されます。 詳細は hg help urls を参照してください。

成功時のコマンド終了値は 0、 作業領域更新により、 衝突未解消ファイルが生じる場合は 1 です。

オプション:

-u, --update 新規取り込みの際は、 新規ブランチヘッドで、 作業領域を更新
-f, --force 連携先が無関係なリポジトリでも実行
-r, --rev <リビジョン[+]>
 取り込み対象リビジョン
-B, --bookmark <ブックマーク[+]>
 取り込み対象ブックマーク
-b, --branch <ブランチ[+]>
 取り込み対象の名前付きブランチ
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

push

指定リポジトリへの変更履歴の反映:

hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]

手元のリポジトリから指定連携先リポジトリに変更履歴を反映します。

これは hg pull と対称的な操作です:連携先リポジトリにおいて、 現リポジトリに対する hg pull を行った場合と同一の効果を持ちます。

特に指定の無い場合、 複数ヘッド状態は、 どのヘッドが妥当なものであるか 混乱するため、 連携先に新規ヘッドが作成される反映は許可されません。 このような場合、 hg push 実施前に、 hg pull および hg merge を実施することをお勧めします。

連携先に存在しない名前付きブランチを新規作成する場合は --new-branch を使用します。 このオプションは、 新規ブランチの作成のみを許可します。

Note

-f/--force を指定した場合、 対象ブランチ上の全ヘッドリビジョンが、 連携先に反映されます。 この挙動は多くの場合、 共同作業者の間で、 無用な混乱の原因となりますので、 指定の際には十分な注意が必要です。

-r/--rev が指定された場合、 指定リビジョンとその祖先のリビジョン群が、 連携先リポジトリへと反映されます。

-B/--bookmark が指定された場合、 指定ブックマークのリビジョンと、 その祖先のリビジョン群、 およびブックマークが、 連携先へと反映されます。

ssh:// URL 形式の詳細は、 hg help urls を参照してください。 連携先が省略された場合、 'default' パスが連携先として使用されます。

反映成功時のコマンド終了値は 0、 何も反映されなかった場合は 1 です。

オプション:

-f, --force 反映先にヘッドが増える場合でも実施
-r, --rev <リビジョン[+]>
 反映対象とするリビジョン
-B, --bookmark <ブックマーク[+]>
 反映対象ブックマーク
-b, --branch <ブランチ[+]>
 反映対象とする名前付きブランチ
--new-branch 新規ブランチの反映を許可
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

recover

中断されたトランザクションの取り消し:

hg recover

commit や pull が中断された場合の復旧を行います。

本コマンドは、 操作が中断された際のリポジトリ状態の修復を行います。 本コマンドの実行は、 Mercurial が実行を促した場合のみで十分です。

成功時のコマンド終了値は 0、 修復不要または修復失敗時は 1 です。

remove

次回コミットにおける指定ファイルの登録除外:

hg remove [OPTION]... FILE...

現ブランチでの、 構成管理対象からのファイルの除外を予約します。

指定ファイルは、 次回のコミットで登録除外されます。 コミット前に、 登録除外の取り消しは hg help revert を、 構成管理登録の取り消しは hg forget を参照してください。

手動削除したファイルの事後的な登録除外では -A/--after を、 強制的に登録除外するには -f/--force を、 登録除外の際に、作業領域中のファイルを削除しない場合には -Af を指定します。

ファイルの状態 (横) と、 オプション指定 (縦) の組み合わせと挙動は、 以下の一覧を参照してください。 ファイルの状態は、 hg status の表示に倣い、 追加 (Added) [A]、 変更無し (Clean) [C]、 変更有り (Modified) [M] および不在 (Missing) [!] で表します。 挙動は、 警告 (Warn) [W]、 構成管理からの登録除外 (Remove) [R] および作業領域からの削除 (Delete) [D] で表します:

オプション/状態 A C M !
無指定 W RD W R
-f R RD RD R
-A W W W R
-Af R R R R

作業領域における追加 [A] 状態のファイルに関しては、 --force を指定しなくても、 登録除外操作によって破棄されることはありません。

成功時のコマンド終了値は 0、 警告検出時は 1 です。

オプション:

-A, --after 手動で削除済みのファイルに対して、 登録除外の旨を記録
-f, --force 追加登録/変更対象であっても登録除外(ファイルは削除)
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

別名: rm

rename

ファイルの改名(copy + remove と等価):

hg rename [OPTION]... SOURCE... DEST

改名元の複製として改名先を追加登録し、 改名元を登録除外します。 改名先がディレクトリの場合、 ディレクトリ内に複製が作成されます。 改名先がファイルの場合、 改名元は1つしか指定できません。

特に指定が無い場合、 複製元ファイルの内容を持つ複製先ファイルを作業 領域に作成します。 -A/--after 指定がある場合、 「複製」操作は記録され ますが、 ファイルの複製は行われません。

本コマンドの実行結果は次回のコミットの際に効果を発揮します。 改名 操作のコミット前取り消しは hg help revert を参照してください。

成功時のコマンドの終了値は 0、 エラー発生時は 1 です。

オプション:

-A, --after 手動で改名済みのファイルに対して、 改名の旨を記録
-f, --force 同名の登録済みファイルが存在しても複製を実施
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

別名: move mv

resolve

マージの再実施、 または各ファイルのマージ状況管理:

hg resolve [OPTION]... [FILE]...

未解消の衝突の多くは internal:mergediff3 などを使用した 非対話的なマージに由来します。 本コマンドは、 hg merge 実行後から hg commit 実行にかけて、 マージに関与するファイルを管理します。 (この際には、 作業領域は2つの親リビジョンを持つ必要があります) マージツール設定の詳細は hg help merge-tools を参照してください。

本コマンドは、 以下の形式で使用されます:

  • hg resolve [--tool TOOL] FILE...: 指定ファイルのマージを 再度実施します。 この際には、 直前までの変更内容は破棄されます。 衝突解消済みのファイルに対しては、 マージは再実施されません。 全ての未解消ファイルに適用する場合は --all/-a を指定します。 --tool を使用することで、 ファイルのマージに使用するコマンドを 指定可能です。 このオプションによる指定は、 HGMERGE 環境変数や 設定ファイルによる指定を上書きします。 以前のファイルの内容は、 .orig 拡張子のフィルに保存されます。
  • hg resolve -m [FILE]: 指定ファイルを衝突解消済みとみなします (例: 手動での修正後に実施)。 特に指定が無い場合、 全ての未解消 ファイルを解消済みとみなします。
  • hg resolve -u [FILE]...: 指定ファイルを衝突未解消とみなします。 特に指定が無い場合、 全ての解消済みファイルを未解消とみなします。
  • hg resolve -l: 衝突が検出されたファイルの解消状況を表示します。 一覧表示において U は未解消(Unresolved)を、 R は解消済み(Resolved)を意味します。

衝突未解消のファイルがある間はコミットできません。 マージにおける衝突解消の際には、 コミット前に hg resolve -m ... を実施してください。

成功時のコマンド終了値は 0、 衝突解消失敗がある場合は 1 です。

オプション:

-a, --all 衝突未解消の全ファイルを処理対象にする
-l, --list マージの必要なファイルの解消状態一覧
-m, --mark 当該ファイルを衝突解消済み状態に設定
-u, --unmark 当該ファイルを衝突未解消状態に設定
-n, --no-status
 状態記号の表示を抑止
-t, --tool <値> マージツールの指定
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

revert

親リビジョンの状態でファイルを復旧:

hg revert [OPTION]... [-r REV] [NAME]...

Note

指定リビジョンでの作業領域の更新は hg update 対象リビジョン で行います。 マージ途中での取り消しは hg update --clean . で行います (マージにおける修正内容は破棄されます)。

リビジョン指定が無い場合は、 指定されたファイル/ディレクトリを、 作業領域の親リビジョン時点の内容へと復旧します。 本コマンドは対象ファイルに対して、 状態を「変更無し」とし、 add/remove/copy/rename の実施予定を取り消します。 作業領域が複数の親リビジョンを持つ場合、 いずれかのリビジョンを明示的に指定して下さい。

-r/--rev が指定された場合、 指定されたファイル/ディレクトリを、 指定されたリビジョン時点の内容へと復旧します。 以前の変更内容の一部または全部を、 取り消す用途にも使用できます。 -d/--date での日時表記は hg help dates を参照してください。

変更ありのファイルを復旧した場合、 .orig 拡張子を付けたファイルに、 復旧前の内容が保存されます。 この保存は --no-backup で無効化されます。

-d/--date での日時表記は hg help dates を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-a, --all 引数指定が無い場合に、 全ファイルの内容を復旧
-d, --date <日時>
 当該日時の最新リビジョンを使用
-r, --rev <リビジョン>
 当該リビジョン時点の内容で復旧
-C, --no-backup
 取り消し実施前内容のバックアップを抑止
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止

[+] 印付きのオプションは複数回指定可能です

rollback

直前のトランザクションの巻き戻し (要注意) (非推奨):

hg rollback

直前のコミットをやり直す場合は、 rollback の代わりに、極力 hg commit --amend を使用してください。

本コマンドの使用には注意を要します。 巻き戻しは1段階限りで、 巻き戻し後の再実施はできません。 直前のトランザクション時点の、 作業領域状態が復元され、 その時点以後の変更は全て失われます。 但し、 作業領域の内容は変更されません。

トランザクションとは、 コマンド実行による、 新規リビジョンの作成や、 外部からのリビジョンの取り込みといった、 リポジトリ操作を、 ひとまとめにするものです。

例えば、 以下のコマンドはいずれもトランザクションを形成するため、 本コマンドにより、 その効果を巻き戻し可能です:

  • commit
  • import
  • pull
  • push (現リポジトリが、 反映対象として指定された場合)
  • unbundle

データが永遠に失われるのを回避するため、 コミットの巻き戻し操作は、 作業領域の親リビジョン以外に対しては、 失敗するようになっています。 この回避挙動は --force 指定により抑止されます。

本コマンドは、 公開リポジトリでの実行を想定していません。 一旦他の ユーザから hg pull 可能な状態になってしまったなら、 公開リポジトリ でトランザクションを巻き戻しても(既に他のユーザが複製している可能性 があるので)効果を持ちません。 その上、 リポジトリからの情報読み取りに 際して、 競合が発生し得ます。 例えば、 併走している hg pull 処理が 巻き戻しによって失敗してしまう可能性があります。

成功時のコマンド終了値は 0、 巻き戻せるデータが無い場合は 1 です。

オプション:

-n, --dry-run 実施予定の処理内容の表示のみで処理実施は抑止
-f, --force 安全判定を無視

root

作業領域のルート(最上位)ディレクトリ位置の表示:

hg root

現リポジトリのルートディレクトリ位置を表示します。

成功時のコマンド終了値は 0 です。

serve

独立したウェブサーバの実行開始:

hg serve [OPTION]...

リポジトリ参照と hg pull のための HTTP サーバを起動します。 この HTTP サーバを用いることで、 リポジトリの共有/参照を、 即席で行うことができます。 リポジトリを長期間公開する際には、 通常のウェブサーバの使用をお勧めします。

本コマンドで起動されるサーバは、 アクセス制御が実装されていません。 特に設定が無い場合、 誰もがリポジトリを参照可能で、 且つリポジトリは 誰にも更新できない状態にあります。 web.allow_push 設定を * に設定することで、 誰もがリポジトリに hg push できます。 ユーザ認証が必要な場合は、 通常のウェブサーバを使用してください。

特に指定が無い場合、 サーバはアクセスログを標準出力に、 エラーを標準エラー出力に表示します。 ログをファイルに記録する場合は、 -A/--accesslog や -E/--errorlog で指定します。

サーバに空きポート番号の検出および使用をさせる場合、 ポート番号には 0 を指定します。 この場合、 使用するポート番号が表示されます。

成功時のコマンド終了値は 0 です。

オプション:

-A, --accesslog <ファイル>
 アクセスログの書き出し先ファイル
-d, --daemon バックグラウンドでのサーバ実行
--daemon-pipefds <数値>
 (バックグラウンド実行時での内部用途向け)
-E, --errorlog <ファイル>
 エラーログの書き出し先ファイル
-p, --port <ポート番号>
 要求受け付けポート番号(既定値: 8000)
-a, --address <アドレス>
 要求受け付けアドレス(既定値: 全インタフェース)
--prefix <接頭辞> 公開パス接頭辞(既定値: ルート)
-n, --name <名前>
 表示名(既定値: 作業領域のパス)
--web-conf <ファイル>
 hgweb 設定ファイル位置("hg help hgweb" 参照)
--webdir-conf <ファイル>
 hgweb 設定ファイル位置 (非推奨)
--pid-file <ファイル>
 プロセスIDの書き出し先ファイル
--stdio (ホスト間連携での内部用途向け)
--cmdserver <モード>
 (ホスト間連携での内部用途向け)
-t, --templates <テンプレート>
 当該テンプレートで表示をカスタマイズ
--style <スタイル> 当該スタイルで表示をカスタマイズ
-6, --ipv6 IPv4 に加えて IPv6 を使用
--certificate <ファイル>
 SSL 証明書ファイル

status

作業領域のファイル操作状況の表示:

hg status [OPTION]... [FILE]...

作業領域のファイル状態を表示します。 名前(パターン)指定のある場合、 その名前に合致するファイルのみが表示されます。 変更無し(clean)、 無視(ignored)または複製(copy)・改名(rename)の元ファイルに関しては、 それぞれ -c/--clean、 -i/--ignored または -C/--copy が指定されるか、 あるいは -A/--all が指定されない限り表示されません。 いずれの表示対象選択オプションも指定されない場合、 -m -a -r -d -u が指定されたものとみなします。

-q/--quiet 指定がある場合、 -u/--unknown または -i/--ignored が明示的に指定されない限り、 未登録ファイルは表示されません。

Note

権限設定の変更やマージが行われた場合、 状態表示の結果が、 差分表示から期待される結果とは、 異なる可能性があります。 標準的な差分形式は、 権限変更の情報を含みませんし、 マージ実施リビジョンでの差分表示は、 差分出力の際の比較対象が、 指定リビジョンの第1親に固定されているためです。

1つのリビジョンが指定された場合、 比較元リビジョンとして扱われます。 2つのリビジョンが指定された場合、 両リビジョン間で状態を比較します。 --change 指定を使うことで、 第1親から変更されたファイル一覧を簡単に 表示させることができます。

ファイルの状態を表す記号は以下の通り:

M = 変更有り(Modified)
A = 追加登録予定(Added)
R = 登録除外予定(Removed)
C = 変更無し(Clean)
! = 構成管理対象にも関わらず作業領域にファイルが無い(missing)
? = 構成管理対象外(unknown)
I = 無視(Ignored)
  = 直前に表示される新規登録予定ファイル(A)の複製元

例:

  • 作業領域と指定リビジョンとの間での状態変更を表示:

    hg status --rev 9353
    
  • 指定リビジョンにおける状態変更 (複製元含む) を表示:

    hg status --copies --change 9353
    
  • 追加登録されたファイルの NUL 区切り一覧の表示 (xargs 向け):

    hg status -an0
    

成功時のコマンド終了値は 0 です。

オプション:

-A, --all 全ての状態を表示
-m, --modified 変更されたファイルを表示
-a, --added 追加登録されたファイルを表示
-r, --removed 登録除外されたファイルを表示
-d, --deleted 削除されたファイル(登録除外は未実施)を表示
-c, --clean 変更の無いファイルを表示
-u, --unknown 構成管理対象外のファイルを表示
-i, --ignored 無視対象のファイルを表示
-n, --no-status
 状態記号の表示を抑止
-C, --copies 複製元ファイルを表示
-0, --print0 ファイル名をNUL文字(0x00)で終端(xargs との併用向け)
--rev <リビジョン[+]>
 当該リビジョンとの差分で状態を判定
--change <リビジョン>
 指定リビジョンにおける変更対象ファイルの一覧
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

別名: st

summary

作業領域状態の概要表示:

hg summary [--remote]

親リビジョン、 ブランチ、 想定コミット結果や、 作業領域更新候補等を含む 作業領域状態の概要を表示します。

--remote が指定された場合、 default 連携先に対する取り込み/反映に 関する概要も表示します。 この処理には時間を要する場合があります。

成功時のコマンド終了値は 0 です。

オプション:

--remote

push/pull 実施結果の確認

別名: sum

tag

現リビジョンまたは指定リビジョンへのタグの付与:

hg tag [-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...

特定のリビジョンに、 指定された名前を付けます。

タグの用途は、 リポジトリ中の特定リビジョンへの名前付けであり、 リビジョン間での比較や、 重要なリビジョンの参照、 リリース時の分岐点に対する目印、 などの用途に使用できます。 既存タグの改変は、 通常ではできません。 -f/--force の指定が必要です

対象リビジョンが指定されない場合、 作業領域の親リビジョンが、 タグ付けの対象となります。

分散構成管理におけるタグ付けの集約を容易にするために、 構成管理下にある他のファイルと同様に、 タグの情報は ".hgtags" ファイルで管理され、 必要であれば手動での編集も可能です。 これは、 タグ付け操作が、 コミット処理を伴うことを意味します。 ローカルタグは '.hg/localtags' で管理されます (リポジトリ間で共有されることはありません)

タグ付け操作は、 ブランチのヘッドにおいて実施されるのが一般的です。 作業領域の親リビジョンが、 ブランチのヘッドでは無い場合、 hg tag 実行は中断されます。 ヘッド以外のリビジョンにおいて、 タグ付けを実施する場合は、 -f/--force を指定してください。

-d/--date での日時表記は hg help dates を参照してください。

リビジョン特定において、 タグ名はブランチ名よりも優先度が高いので、 既存ブランチと同名のタグの使用は止めましょう。

成功時のコマンド終了値は 0 です。

オプション:

-f, --force タグ付けの強制実施
-l, --local ローカルタグとして作成
-r, --rev <リビジョン>
 タグ付け対象リビジョン
--remove タグの削除
-e, --edit コミットログの編集
-m, --message <テキスト>
 指定文字列をコミットログとして使用
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録

tags

リポジトリ中のタグ一覧の表示:

hg tags

本コマンドは、 通常のタグおよびローカルタグの両方を一覧表示します。 -v/--verbose が指定された場合、 ローカルタグには "local" 表示の 第3のカラムが追加されます。

成功時のコマンド終了値は 0 です。

tip

tip リビジョンの表示 (非推奨):

hg tip [-p] [-g]

tip リビジョン (一般には単に tip と表記) とは、 リポジトリにおける、 最新の追加リビジョンです (最新の変更されたヘッドでもあります)

コミットした直後であれば、 生成されたリビジョンが tip となります。 他のリポジトリから変更履歴の取り込みをした直後であれば、 連携先 リポジトリでの tip が現リポジトリの tip となります。 "tip" タグは 特別なタグで、 改名や、 他のリビジョンへの付け替えはできません。

本コマンドは非推奨です。 hg heads を使用してください。

成功時のコマンド終了値は 0 です。

オプション:

-p, --patch パッチ形式での表示
-g, --git git 拡張差分形式の使用
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ

unbundle

バンドルファイルの適用:

hg unbundle [-u] FILE...

hg bundle コマンドで生成されたバンドルファイルを適用します。

成功時のコマンド終了値は 0、 衝突未解消ファイルがある場合は 1 です。

オプション:

-u, --update 新規取り込みの際は、 新規ブランチヘッドで、 作業領域を更新

update

作業領域の内容更新(またはリビジョンの切り替え):

hg update [-c] [-C] [-d DATE] [[-r] REV]

指定されたリビジョン時点の内容で、 作業領域を更新します。 対象リビジョンが指定されない場合、 作業領域と同じ名前付きブランチの、 最新リビジョンで更新した上で、 ブックマークの更新を行います。 (詳細は hg help bookmarks 参照)

作業領域の親リビジョンを、 指定されたリビジョンに更新します (hg help parents 参照)。

指定リビジョンが、 作業領域の祖先/直系の子孫のいずれでもでない場合、 作業領域の更新は中断されます。 -c/--check が指定された場合、 作業領域中の未コミット変更の有無を確認し、 変更が無かった場合には、 作業領域を指定リビジョンで更新します。

作業領域の変更が未コミットの場合、 以下の規則が適用されます:

  1. -c/--check も -C/--clean も指定されず、 指定リビジョンが、 作業領域の親リビジョンの、 直系の祖先または子孫であった場合、 未コミット変更の内容は、 指定リビジョンへとマージされ、 マージ結果は、 未コミットのまま作業領域に残ります。 別の (名前無し) ブランチ上にあるリビジョンなど、 直系の祖先/子孫以外が指定された場合、 更新は中断され、 未コミット変更は、 作業領域に残ります。
  2. -c/--check が指定された場合、 更新は中断され、 未コミット変更は、 作業領域に残ります。
  3. -C/--clean が指定された場合、 未コミット変更は破棄され、 作業領域は指定のリビジョンで更新されます。

マージ実施を途中で取り消す場合は hg update --clean . を実行してください (マージにおける修正内容は破棄されます)。

作業領域中のファイルを削除する場合は、 リビジョンに null を指定します (hg clone -U と同等)。

特定のファイルだけを以前の状態に戻す場合は、 hg revert [-r リビジョン] ファイル名 を使用してください。

-d/--date での日時表記は hg help dates を参照してください。

成功時のコマンド終了値は 0、 未解消ファイルがある場合は 1 です。

オプション:

-C, --clean 未コミット変更内容の破棄(保存無し)
-c, --check 未コミット変更が無い場合、 ブランチ横断でも更新を実施します
-d, --date <日時>
 当該日時の最新リビジョンを使用
-r, --rev <リビジョン>
 

リビジョン

別名: up checkout co

verify

リポジトリの整合性検証:

hg verify

現リポジトリの整合性を検証します。

本コマンドは、 リポジトリの整合性に関する広範な検証を行います。 変更履歴・マニフェスト・各構成管理対象ファイルにおけるハッシュ値 およびチェックサム、 相互関連付けおよびインデックス等の整合性が 検証されます。

リポジトリ破損時の復旧に関する詳細は、 以下の URL を参照してください。 http://mercurial.selenic.com/wiki/JapaneseRepositoryCorruption

成功時のコマンドの終了値は 0、 エラー発生時は 1 です。

version

バージョンおよび著作権情報の表示:

hg version

バージョンおよび著作権情報の表示

日時表記

以下のコマンドで日時指定が可能です:

有効な日時指定形式は沢山あります。 以下にいくつかの例を示します:

最後に、 Mercurial 固有の内部形式を示します:

これは日時の内部表現形式です。 最初の数値は、 基準時 (1970年1月1日 00:00 UTC) からの経過秒数です。 次の数値は、 UTC に対するローカルタイムゾーンのオフセット値 (単位: 分) です (UTC よりも東側の地域は負値)

log コマンドには、 日時範囲指定可能です:

差分形式

無指定時に Mercurial が2つのリビジョンを比較して差分表示する際の形式は GNU diff の unified 形式互換のもので、 GNU patch をはじめとする多くの 標準的なツールで使用できるものです。

この標準的な形式は概ね十分なのですが、 以下のような情報は含まれません:

Mercurial は、 別の構成管理ツールである git に由来する拡張差分形式にも 対応しており、 この形式は従来の差分形式の持つ制限を解消しています。 但し、 普及しているツールの幾つかが git 差分形式に対応していないため、 Mercurial は指定が無い場合はこの形式では出力しません。

つまり、 Mercurial が(hg export 等で)生成した標準の差分形式は、 他のリポジトリに対して適用した場合、 上述した情報の欠落があることから、 ファイルの複製・改名をはじめとする上記の制限に類する操作に関しては、 十分注意する必要があります。 hg pushhg pull のような Mercurial の内部形式で実施される操作に関しては、 バイナリ形式で変更 情報の授受を行うことから、 情報の欠落に関しては心配する必要はありません。

Mercurial から git 拡張差分形式の出力を得るには、 受理可能なコマンドに 対して --git を指定するか、 設定ファイルの [diff] セクションに 'git = True' 記述を追加してください。 hg import や mq エクステンションを使用する場合は、 この指定は不要です。

環境変数

HG
'hg' コマンドへのパス。 フック/エクステンション、 または外部ツールの起動の際に自動的に設定されます。 未設定や空の場合は、 frozen 形式の hg 実行可能ファイルの名前が設定されるか、 'hg' という名前の実行可能ファイルが検索されます (Windows の場合、 PATHEXT 環境変数に設定された COM/EXE/BAT/CMD 等の拡張子付き)。
HGEDITOR

コミットの際のメッセージ入力を行うためのエディタの名前。 EDITOR 環境変数についても参照してください。

(非推奨: 設定ファイル経由で指定してください)

HGENCODING
Mercurial によるロケール自動検出の上書き。 この設定は、 ユーザ名、 コミットログ、 タグ名およびブランチ名の、 記録の際に使用されます。 この環境変数設定は、 コマンドラインでの --encoding 使用により、 更に上書きすることができます。
HGENCODINGMODE
ユーザからの指定値を内部データ形式に変換する際に、 指定の符号化と 合致しない文字が検出された場合の Mercurial の挙動の指定。 無指定時は、 「指定の符号化と合致しない場合は処理中断」を意味する "strict" が指定 されたものとみなします。 他には、 「未知の文字の置き換え」を意味する "replace" と、 「未知の文字の切り捨て」を意味する "ignore" が指定 できます。 この環境変数設定は、 コマンドラインでの --encodingmode 使用により、 更に上書きすることができます。
HGENCODINGAMBIGUOUS
表示幅が"曖昧な"文字に対する Mercurial の挙動を決定します。 例えば、 east asian 文字集合における、 アクセント付きの Latin 文字などがこれに該当します。 指定が無い場合、 Mercurial は曖昧な文字の幅を 1文字分 (narrow) とみなします。 この手の文字が表示上の問題となる場合は、 本環境変数を "wide" に設定してください。
HGMERGE

マージの際の衝突解消に使用するコマンド。 指定されたコマンドの起動には、 作業領域のファイル、 マージ対象別リビジョンのファイル、 両者の親リビジョンのファイルを表す、 3つの引数が指定されます。

(非推奨: 設定ファイル経由で指定してください)

HGRCPATH

設定ファイル読込のための、 ファイルまたはディレクトリの一覧の指定。 一覧要素の区切り記号は、 Unix なら ":"、 WIndows なら ";" です。 HGRCPATH 環境変数が設定されていない場合、 各稼働環境に応じた 読み込み先から読み込まれます。 空の値が設定されている場合、 現リポジトリの .hg/hgrc のみが読み込まれます。

指定された一覧の各要素に対して、 以下のように振舞います:

  • ディレクトリなら、 配下の ".rc" で終わる名前のファイルを読み込む
  • ファイルなら、 そのファイル自身を読み込む
HGPLAIN

この環境変数が設定された場合、 Mercurial の表示設定を変更し得る 設定ファイル中の記述が全て無視されます。 encoding や defaults の指定、 verbose モード、 debug モード、 quiet モード、 トレースバック表示設定や各国語設定が対象となります。 ユーザ設定を温存したままで、 ツール等から Mercurial を使用する場合に有用です。

コマンドラインや環境変数によって、 同等のオプションが、 明示的に指定された場合には、 こららは無視されません。

HGPLAINEXCEPT

HGPLAIN による設定無効化の際でも、 継続して利用したい機能名を、 カンマ区切りで列挙します。 現在利用可能な機能名は "i18n" のみで、 国際化関連機能が維持されます。

HGPLAINEXCEPT に何らかの設定 (空設定でも可) をした場合、 設定無効化が機能します。

HGUSER

コミット時に記録する、 リビジョン作成者名の指定。 作成者名として採用される値は、 以下の順序で決定されます:

  • HGUSER 環境変数値(非推奨)
  • (HGRCPATH 環境変数で指定される)設定ファイル中の設定
  • EMAIL 環境変数値
  • 対話的な入力
  • LOGNAME 環境変数値(@hostname が付与されます)

(非推奨: 設定ファイル経由で指定してください)

EMAIL
リビジョン作成者としてこの環境変数値が記録される可能性があります。 詳細は HGUSER の記述を参照してください。
LOGNAME
リビジョン作成者としてこの環境変数値が記録される可能性があります。 詳細は HGUSER の記述を参照してください。
VISUAL
コミット時のメッセージを編集するエディタ名の指定。EDITOR 環境変数 についても参照してください。
EDITOR
コミットログ入力時のように、 エディタでファイルを開き、 ユーザによる編集を促す状況があります。 そこで使用されるエディタは、 HGEDITOR、 VISUAL あるいは EDITOR 環境変数に設定されたものを(この順序で)使用します。 最初の空で無い値に設定された環境変数の値を使用します。 いずれも未設定 (あるいは空) の場合は、 'vi' が使用されます。
PYTHONPATH
Mercurial が当該システムの共有領域にインストールされていない場合、 Python が必要なモジュールを読み込むためには、 この環境変数の設定が 必要です。

拡張機能(エクステンション)の使用

Mercurial には、 新規機能を「エクステンション」という機構を用いて 追加する仕組みが備わっています。 エクステンションでは、 コマンドの 新規追加、 既存コマンドへのオプションの追加、 コマンドの挙動の変更、 フックの実装といったことが可能です。

"foo" というエクステンションを有効化するには、 Mercurial 同梱のものであろうと、 Python の検索パス中のものであろうと、 設定ファイルにおいて以下のような記述が必要です:

[extensions]
foo =

エクステンションへのフルパスを記述することも可能です:

[extensions]
myfeature = ~/.hgext/myfeature.py

設定ファイルに関する詳細は hg help config を参照してください。

様々な事情から、 特に指定の無い場合にはエクステンションは読み込まれ ません。 付加的な読み込みは、 起動時間の増加を意味します。 上級用途 限定のものもあります。 (履歴の破壊や改変などの)潜在的な危険性を持つ 場合もあります。 実験的なものであるかもしれません。 これまでの Mercurial の振る舞いを変えてしまうかもしれません。 エクステンションを 必要に応じて有効化するのは利用者の責務です。

明示的にエクステンションを無効化する場合、 適切な設定ファイルにおいて パス指定部分に '!' を記述します:

[extensions]
# /path/to/extension/bar.py にあるエクステンション bar の無効化
bar = !/path/to/extension/bar.py
# こちらはパス指定無しでの baz エクステンションの無効化
baz = !

無効化されているエクステンション:

acl:リポジトリにおけるアクセス制御用のフック集
blackbox:リポジトリにおけるイベントの記録(デバッグ用)
bugzilla:Bugzilla バグ管理システムとの連携用フック集
children:子リビジョン表示のコマンド (非推奨)
churn:変更履歴の統計情報表示のコマンド
color:コマンド出力のカラー化
convert:他の構成管理ツールから Mercurial への履歴取り込み
eol:管理対象ファイルにおける改行形式の自動管理
extdiff:リビジョン間差分表示での外部コマンドの利用
factotum:factotum での http 認証
fetch:pull, update, merge の一括実行 (非推奨)
gpg:リビジョンへの署名および検証コマンド
graphlog:端末での履歴ツリー表示のコマンド (非推奨)
hgcia:CIA.vc 通知サービスとの統合向けのフック集
hgk:グラフィカルな UI によるリポジトリ参照
highlight:hgweb におけるシンタックスハイライト (要 Pygments)
histedit:対話的な履歴改変
keyword:構成管理対象ファイル中のキーワード展開
largefiles:大容量バイナリファイルの管理
mq:パッチ併用の管理
notify:電子メールによる push 通知送信用フック集
pager:コマンド出力に対する外部ページャーの使用
patchbomb:電子メールによる変更内容パッチ送付のコマンド
progress:処理における進捗率の表示
purge:作業領域中の未登録ファイルを削除するコマンド
rebase:履歴上の異なる位置への一連のリビジョンの移動
record:commit や qrefresh における対話的な変更取り込みの選択
relink:複製リポジトリ間でのハードリンクの再生成
schemes:連携先リポジトリ群に対する略記指定の拡張
share:複数作業領域による履歴情報領域の共有
shelve:作業領域中の変更内容の退避および復旧
strip:指定リビジョンと子孫の履歴からの破棄
transplant:別ブランチからのリビジョンの移植
win32mbcs:問題ある文字コードをパス名に使用する場合の対処
win32text:改行形式の自動変換 (非推奨)
zeroconf:ローカルネットワーク上でのリポジトリの検出/公開

ファイル群の指定

Mercurial はファイル指定のための問い合わせ言語を提供しています。

他のファイルパターン指定と同様に、 パターン種別が定められていて、 'set:' 接頭辞で記述を始めます。 問い合わせ言語は「述語」 (predicate) (※ 訳注: いわゆる「関数」的なもの) を提供しており、 二項演算子による結合や、 括弧によるグループ化も可能です。

ファイル名やパターンが、 [.*{}[]?/\_a-zA-Z0-9\x80-\xff] 以外の文字や、 既存の述語と一致する場合、 引用符(') または二重引用符(") で囲ってください。 この仕様は、 glob 対象や述語の引数以外の、 全てのファイルパターンに適用されます。

エスケープ表記により、 引用符中の文字列中で、 特殊文字を使用可能です。 例: \n は改行文字扱い。 特殊文字として解釈させたくない場合は、 文字列指定の冒頭に r を付けます。 例: r'...'.

使用可能な前置単項演算子を以下に列挙します:

not x
ファイル群 x に含まれないファイル。 ! x とも表記可能。

使用可能な二項演算子を以下に列挙します:

x and y
ファイル群 x と y の共通部分。 x & y とも表記可能。
x or y
ファイル群 x と y の総和。 x | y 又は x + y とも表記可能。
x - y
ファイル群 x のうち、 y に属さないもの。

使用可能な述語を以下に列挙します:

added()
追加ステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
binary()
バイナリと思われるファイル (NUL バイトを含むファイル)
clean()
変更無しステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
copied()
複製先ステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
deleted()
不在ステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
encoding(name)
指定エンコーディング方式でデコード可能なファイル。 ASCII や UTF-8 以外のエンコーディングに対しては、 無益かもしれません。
eol(style)
指定形式 (dos, unix, mac) の改行を含むファイル。 バイナリファイルは除外されます。 複数形式が混在するファイルは、 複数の形式指定に合致します。
exec()
実行可能ビットが立っているファイル
grep(regex)
正規表現 regexp に合致する内容を持つファイル
hgignore()
有効な .hgignore パターンに合致するファイル
ignored()
無視ステータスを持つファイル。 本述語が指定された時のみ、 無視対象ファイルが Mercurial の取り扱い対象になります。
modified()
変更ステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
removed()
登録除外ステータスを持つファイル (※ 訳注: 未コミット時点でのみ判定可能)
resolved()
マージステータスが解消済みのファイル
size(expression)

サイズが指定条件に合致するファイル。条件例:

  • 1k (1024 〜 2047 バイトのファイル)
  • < 20k (20480 バイト未満のファイル)
  • >= .5MB (524288 バイト以上のファイル)
  • 4k - 1MB (4096 〜 1048576 バイトのファイル)
subrepo([pattern])
パターンに合致するパスに位置するサブリポジトリ。
symlink()
シンボリックリンクとみなされているファイル
unknown()
未知ステータスを持つファイル。 本述語が指定された時のみ、 未知ファイルが Mercurial の取り扱い対象になります。
unresolved()
マージステータスが未解消のファイル

問い合わせの記述例:

hg help patterns も参照してください。

用語集

Ancestor
[祖先] 指定されたリビジョンから、 親リビジョン伝いに到達可能な、 任意のリビジョン。 より正確には、 あるリビジョンにとっては、 直接の親リビジョンは祖先であり、 祖先(=直接の親リビジョン含む) の親リビジョンも祖先となります。 'Descendant' も参照してください。
Bookmark

[ブックマーク] コミットの都度移動しつつ、 一定のリビジョンを指す、 一種のポインタです。 リビジョン指定の際には、 タグと同様に、 常にブックマーク名を使用できます: 例 hg update 対象。 タグとの違いは、 コミットの都度、 ブックマークが移動することです。

ブックマークは、 改名、 複製および削除可能です。 リポジトリ間で、 明示的な反映/取り込みをしない限り、 ブックマークは伝播しません。 ブックマークの反映/取り込みにより、 他のメンバーとの連携の際に、 名前付きブランチの代替として、 ブックマークが使用可能となります。

Branch

(名詞) [ブランチ] ヘッドではない (= 他に子リビジョンを持つ) リビジョンを親として、 作成された子リビジョン。 これは 「構造的 (topological) ブランチ」 と呼ばれます。 ('Branch, topological' 参照) 構造的ブランチが名前を持つ場合は 「名前付きブランチ」、 名前を持たない場合は「名前無しブランチ」 と呼ばれます。 (※ 訳注: 名前を「持つ/持たない」は、 「親と異なる名前」を持つ/持たない、 を意味します) 'Branch, anonymous' および 'Branch, named' も参照してください。

連携先リポジトリで生成されたリビジョンが、 リポジトリ間連携 (反映/取り込み) の際に、 新規ヘッドとして取り込まれることで、 ブランチが生成される場合もあります。 「ブランチ」という呼称は、 複数の要件に対して、 個別に作業が行われる状況を指す場合もあります。 このような作業は、 明示的に名前付きブランチを作成した上で、 実施されることもあれば、 ローカルホスト上で、 ブックマーク機能や、 リポジトリ複製と名前無しブランチによって、 実施される場合もあります。

例: "実験的な(開発用)ブランチ"

(動詞) [ブランチする/分岐する/枝分かれする] あるリビジョンにおいて、 2つ目以降の子リビジョンを作成する操作。

例: "リビジョン X からブランチする"

Branch, anonymous
[名前無しブランチ/匿名ブランチ] 新規に作成されたリビジョンが、 ヘッドではない (= 子リビジョンを他に持つ) リビジョンを親に持ち、 親と同じブランチに属する場合、 それを名前無しブランチとみなします。 (※ 訳注: 良くある誤解が、 『default に属する場合のみが名前無し』 というものです。 default も 『default』 という名前のブランチです。 枝分かれの際に、 親と異なるブランチに属するか否かが、 名前付きと、 名前無しの差異になります。)
Branch, closed
[閉鎖(された)ブランチ] 全てのヘッドが閉鎖された、 名前付きブランチ。
Branch, default
[デフォルトブランチ] 所属する名前付きブランチが、 明示されない場合に、 新規リビジョンが属する名前付きブランチ。 (※ 訳注: 親リビジョンが、 既に default 以外の名前付きブランチに属する場合、 所属ブランチは、 明示されているものとして扱われます)
Branch head
'Head, branch' を参照してください。
Branch, inactive

[非アクティブなブランチ] 構造的なヘッドが無い名前付きブランチは、 非アクティブなブランチとみなされます。 例えば default ブランチに、 機能実装用の名前付きブランチがマージされると、 機能実装用ブランチは、 非アクティブになります。 hg branches は、 --active 指定が無い場合、 非アクティブなブランチも表示します。

備考: 履歴ツリー構造を元にした、 暗黙的な状況を元にしていることから、 この概念の常用は非推奨です。 不要になった名前付きブランチは、 hg commit --close-branch により、 明示的に閉鎖してください。

Branch, named

[名前付きブランチ] 同一のブランチ名を持つリビジョンの集合。 名前付きブランチに属するリビジョンは、 その子リビジョンも、 同じ名前付きブランチに属します。 別な名前付きブランチを、 明示的に指定することで、 次のコミットで生成される子リビジョンの、 所属ブランチを変更できます。 ブランチ管理の詳細は、 hg help branchhg help branches および hg commit --close-branch を参照してください。

名前付きブランチは、 リポジトリの履歴を構成するリビジョン群を、 重複の無い部分集合へと分割する、 名前空間の一種とも言えます。 名前付きブランチは、 必ずしも構造的ブランチである必要はありません。 ある名前付きブランチ (default でも可) のヘッドとなるリビジョンを親に、 別の名前付きブランチを新規生成した場合、 元ブランチに対して、 以後の新規リビジョン追加が無ければ、 元ブランチは (構造的な意味で) 『分岐』したのではなく、 名前が付いているだけと言えます。

Branch tip
'Tip, branch' 参照してください。
Branch, topological
[構造的ブランチ] ヘッドではない (= 他に子リビジョンを持つ) リビジョンを親として、 新規に作成されたリビジョンは、 構造的ブランチとなります。 構造的ブランチに名前が与えられた場合、 それは名前付きブランチとなります。 (※ 訳注: 名前付きブランチは、 必ずしも構造的ブランチとは限りません) 名前が与えられない場合は、 現行の名前付きブランチ (一般的には default) における、 名前無しブランチとなります。
Changelog
[変更履歴] 各リビジョンの内容を、 リポジトリ登録順に記録したもの。 記録内容には、 識別用ハッシュ値、 作成者名、 コミットログ、 日付、 および変更対象ファイルの一覧が含まれます。
Changeset
[チェンジセット] 変更記録のためのリポジトリ状態のスナップショット。 (※ 訳注: 歴史的な経緯から、 チェンジセットとリビジョンは、 同じ意味で使用されるケースが多いです。 Mercurial の翻訳では、 概ね 「リビジョン」 と訳していますが、 一部に不統一な部分もあります。 'Revision' も参照してください。)
Changeset, child
[子(リビジョン)] 「親(リビジョン)」 の対義語。 リビジョン P がリビジョン C の親である場合、 C は P の子となります。 親に対する子の数には上限がありません。
Changeset id
[リビジョンID/識別用ハッシュ値] リビジョンを一意に識別する SHA-1 ハッシュ値。 40桁16進数として表現される 「完全長」 のものと、 12桁16進数として表現される 「短縮」 形式があります。
Changeset, merge
[マージリビジョン] 親リビジョンを2つ持つリビジョン。 hg merge 実施結果を、 コミットすることで生成されます。
Changeset, parent
[親(リビジョン)] 子リビジョンの由来元となるリビジョン。 より明確には、 リビジョン C の親は、 (旧→新順の) 履歴ツリーにおいて、 リビジョン C の直前のリビジョンを指します。 各リビジョンの親は、 最大で2つです。
Checkout

[チェックアウト] (名詞) 指定リビジョンの内容で、 更新された作業領域。 同等の意味を表す場合、 「リビジョン」 の方が妥当なので、 この用法での使用は避けましょう。

例: "チェックアウトした X を使用する。"

(動詞) 指定リビジョンでの作業領域の更新。 hg help update も参照してください。

例: "リビジョン X をチェックアウトする。"

Child changeset
'Changeset, child' を参照してください。
Close changeset
'Head, closed branch' を参照してください。
Closed branch
'Branch, closed' を参照してください。
Clone

(名詞) [複製(リポジトリ)] あるリポジトリの全体、 または一部から、 複製されたリポジトリ。 部分複製リポジトリの持つ変更履歴は、 指定リビジョンと、 その祖先から構成されます。

例: "あなたの複製(リポジトリ)は最新ですか?"

(動詞) [(リポジトリの)複製] 複製リポジトリを作成する操作。 hg clone を使用します。

例: "リポジトリを複製します。"

Closed branch head
'Head, closed branch' を参照してください。
Commit

[コミット] (名詞) リビジョンの別称。

例: "最新のコミットで、 バグは修正されていますか?"

(動詞) 変更内容をリポジトリに記録する操作。 コミットの際には、 コミット対象ファイルの、 作業領域中の内容と、 親リビジョンにおける内容から、 差分が取られ、 リポジトリにおいて、 新規リビジョンが作成されます。

例: "その変更は、 すぐにコミットすべきです。"

Cset
「チェンジセット」の略記。
DAG
分散構成管理システム (DVCS) のリポジトリにおけるリビジョン群は、 リビジョンに相当するノード (node) と、 親〜子の関係に相当するエッジ (edge) から成る、 非循環有向グラフ (directed acyclic graph:DAG) として表すことができます。 このグラフは、 hg log --graph などにより可視化できます。 各リビジョンは最大2つの親しか持てない、 というのが、 Mercurial の DAG における制約です。(※ 訳注: 多くのケースで DAG は 「履歴ツリー」 的なニュアンスで用いられるため、 基本的には「履歴ツリー」と訳しています)
Default branch
'Branch, default' を参照してください。
Descendant
[子孫] 指定されたリビジョンから、 子リビジョン伝いに到達可能な、 任意のリビジョン。 より正確には、 あるリビジョンにとって、 直接の子リビジョンは子孫であり、 子孫の子リビジョンも子孫となります。 'Ancestor' も参照してください。
Diff

(名詞) [差分] 2つのリビジョン、 または作業領域とリビジョン間での、 ファイルの内容と属性の差異。 差分の表現は、 "diff" または "patch" と呼ばれる形式で表現されます。 ファイルの複製/改名や属性の変更は、 "diff" や "patch" の形式では表現できないため、 "git diff" 形式を使って表現されます。

例: "私の修正の差分を見てもらえましたか?"

(動詞) [差分を取る] 2つのリビジョン間で差分を取る行為は、 "diff" や "patch" 形式を生成することを意味します。

Example: "リビジョン X との差分を取れば、 私の意図がわかります。"

Directory, working
[作業領域] 作業領域は、 次のコミットによって記録される、 Mercurial 管理下のファイルの状態を保持します。 初期状態では、 (親リビジョンと呼ばれる) 既存のリビジョンと同じ内容を持ちます。 'Parent, working directory' を参照してください。 マージや、 ファイルへの変更操作によって、 状態が変更されます。 リポジトリのメタデータは、 作業領域中の .hg ディレクトリ配下に、 格納されています。
Draft
draft フェーズのリビジョンは、 publishing リポジトリ間で、 共有されないことから、 履歴改変エクステンションを適用可能です。 hg help phases を参照してください。
Graph
用語集の DAG の項目および hg log --graph 出力を参照してください。
Head

[ヘッド] 使用する文脈に応じて、 ブランチのヘッドと、 リポジトリのヘッドの、 2つの意味で使用されます。 それぞれの詳細は、 'Head, branch' および 'Head, repository' を参照してください。

開発において、 ヘッドは日常的に発生し、 作業領域更新や、 マージ操作の対象となります。

Head, branch
[ブランチ(の)ヘッド] 同一名前付きブランチ上に、 子を持たないリビジョン。
Head, closed branch

[閉鎖(された)ブランチ(の)ヘッド] ヘッドへの閉鎖を実施したリビジョン。 (※ 訳注: 閉鎖操作(commit)の実施は、 閉鎖対象リビジョン上で行うため、 閉鎖実施リビジョン = 閉鎖ブランチヘッドとなります) 閉鎖済みヘッドは hg heads で列挙されません。 全てのヘッドが閉鎖されると、 その名前付きブランチは閉鎖済みとみなされ、 以降の hg branches で名前が列挙されなくなります。

閉鎖ブランチのヘッドに対して、 新規の子リビジョンを生成することで、 当該ヘッドの閉鎖状態が解消されます。

Head, repository
[リポジトリ(の)ヘッド] 閉鎖されていない、 構造的なヘッド。
Head, topological
[構造的(な)ヘッド] リポジトリ内に、 子を持たないリビジョン。
History, immutable
[改変不能(な)履歴] 一旦コミットされたリビジョンは、 改変できません。 履歴改変機能を謳うエクステンションは、 実際には履歴の改変ではなく、 新規リビジョンによる、 既存リビジョンの置き換え (破棄を含む) を行っています。 公開リポジトリ上でこの操作を行った場合、 既存のものと同一内容のリビジョンが、 履歴上に現れることになります。
History, rewriting
[履歴(の)改変] リポジトリに記録された履歴は、 改変不能です。 しかし Mercurial のエクステンションには、 既存リビジョンの内容を、 ある種の方法で改変できる (ように見せる) ものがあります。
Immutable history
'History, immutable' を参照してください。
Merge changeset
'Changeset, merge' を参照してください。
Manifest
[管理対象/マニフェスト] 各リビジョンにおける、 管理対象ファイルの一覧。
Merge
[マージ] 枝分かれした作業成果を統合する操作。 リビジョンを指定して、 作業領域を更新した上で、 別なリビジョンとのマージを行った場合、 後者の履歴における成果を、 作業領域に持ち込むことになります。 衝突が解消された (及び、その旨明示された) ならば、 履歴ツリーにおける2つの枝別れを、 1つに統合するリビジョンとして、 マージ結果をコミットできます。
Named branch
'Branch, named' を参照してください。
Null changeset
[空リビジョン] 作業領域が更新されていない、 新規リポジトリにおける、 親リビジョン。 以上のことから、 ルートリビジョンの親であり、 ID '000000000000' と別名 'null' のどちらでも指定可能です。
Parent
'Changeset, parent' を参照してください。
Parent changeset
'Changeset, parent' を参照してください。
Parent, working directory
[作業領域の親] 作業領域は、 hg parents が表示するリビジョン (未コミットマージの場合は2つ) = 作業領域の親に対する、 仮想的な子リビジョンです。 作業領域の親は hg update で変更します。 他にも hg summaryhg id で作業領域の親を知ることが可能です。 "." という別名でも記述可能です。
Patch

(名詞) [パッチ] 差分取得操作で得られる出力。

例: "私のパッチを送りました。"

(動詞) [パッチ(を)当て(る)] あるリビジョン時点の内容に対する、 パッチ適用による変更操作 (※ 訳注: 暗に新規リビジョンの生成を想定)。

Example: "そのリビジョンへのパッチ当てが必要です。"

Phase
[フェーズ] リビジョン毎に管理されている、 共有可否の情報。 hg help phases を参照してください。
Public
public フェーズのリビジョンは、 publishing リポジトリ間で、 共有されることから、 改変不能リビジョンとみなされます。 hg help phases を参照してください。
Pull
[(リビジョンの)取り込み] 手元のリポジトリに無いリビジョンを、 連携先リポジトリから取り込む操作。 特定のオプション指定が無ければ、 この操作はリポジトリのみを更新し、 作業領域は更新しません。。 hg help pull を参照してください。
Push
[(リビジョンの)反映] 手元のリポジトリにしか無いリビジョンを、 連携先リポジトリに反映する操作。 手元のリポジトリにおいて、 コミットされたリビジョンを、 連携先に追加するだけです。 未コミットの変更は反映されません。 hg help push を参照してください。
Repository
[リポジトリ] 管理対象ファイルの状態を記録したメタデータ。 記録された状態によって、 リビジョンが表現されます。 リポジトリは、 通常 (「常に」ではありません) であれば、 作業領域の .hg 配下にあります。 記録された状態は、 特定のリビジョンを指定した "updating" によって、 作業領域に再現されます。
Repository head
'Head, repository' を参照してください。
Revision
[リビジョン] ある時点におけるリポジトリの状態。 hg update により、 以前のリビジョン時点における内容で、 作業領域を更新できます。 'Revision number' および 'Changeset' も参照してください。
Revision number
[リビジョン番号] 当該リポジトリのリビジョンを、 一意に識別する整数。 リポジトリへの追加順で、 各リビジョンに 0 から番号を振ったものです。 リビジョン番号は、 リポジトリの複製毎に異なり得ます。 複数のリポジトリ間で、 リビジョンを一意に識別する方法は、 'Changeset id' を参照してください。
Revlog
Mercurial における履歴記録の形式。 各リビジョンに相当する差分と、 一定間隔での完全なデータから、 構成されています。 管理対象データと、 データ参照用のインデックスを格納しています。
Rewriting history
'History, rewriting' を参照してください。
Root
[ルート(リビジョン)] 親が空リビジョンのみのリビジョン。 一般的なリポジトリでは、 ルートリビジョンは1つだけです。
Secret
secret フェーズのリビジョンは、 push/pull/clone の対象外です。 hg help phases を参照してください。
Tag
[タグ] リビジョンに割り当てられた別名。 リビジョン指定の際には、 常にタグ名を使用できます: 例 hg update 対象。 タグの生成は履歴に記録され、 反映/取り込みによって、 他のリポジトリに伝播します。
Tip
最大のリビジョン番号を持つリビジョン。 当該リポジトリにおいて、 最も最後に追加されたリビジョン。
Tip, branch
[ブランチ(の) tip] リビジョン番号が最大な、 指定ブランチのヘッド。 リビジョン指定の際に、 ブランチ名が指定された場合、 ブランチ tip 指定とみなされます。 'Branch, head' も参照してください。 リビジョン番号は、 リポジトリの複製毎に異なり得るため、 ブランチ tip もリポジトリ毎に異なる可能性があります。
Update

(名詞) [更新内容] リビジョンの言い換え。

例: "更新内容を反映しておきました。"

(動詞) [更新] 作業領域を、 特定リビジョン時点の内容で書き換える操作。 hg help update を参照してください。

例: "(作業領域の)更新が必要です。"

Working directory
'Directory, working' を参照してください。
Working directory parent
'Parent, working directory' を参照してください。

Mercurial の無視指定ファイルの文法

概要

Mercurial では、リポジトリのルート直下に置かれた .hgignore と呼ばれるファイルを使用して、構成管理対象からの ファイルの除外を制御します。

説明

Mercurial の作業領域には、 構成管理対象にしたくないファイルも 多数存在し得ます。 例えば、 エディタの作成するバックアップファイルや コンパイラが生成する中途/最終成果物等です。 作業領域のルート直下に置いた .hgignore ファイルにおいて、 対象ファイルの名前を列挙することで、 これらを無視することができます。 .hgignore は明示的に手動で作成しなければなりません。 一般的には、 このファイルも構成管理対象に含めますので、 履歴の反映や取り込みによって、 設定内容は他のリポジトリにも伝播します。

未登録ファイルが、 作業領域のルートからの相対パス、 またはそのパスの先頭部分が、 .hgignore に記述されたパターンと合致する場合、 そのファイルは Mercurial からは無視されます。

例えば、 未登録ファイル file.c が、 作業領域の a/b/file.c に位置すると仮定します。 a/b/file.ca/b または a といったパターンが .hgignore に記述されている場合、 Mercurial はこの file.c を無視します。

作業領域毎の無視設定に加えて、 ユーザ毎、 またはシステム毎の 無視設定ファイルを指定することが可能です: これらのファイルの設定に関する詳細は、 hg help config[ui] セクションにおける ignore 設定キーの説明を参照してください。

既に構成管理下にあるファイルに対して、 Mercurial コマンドの実施要否を制御するには、 多くのコマンドでサポートされている -I および -X の使用が便利です。 詳細に関しては、 hg help <command> および hg help patterns を参照してください。

既に管理対象となっているファイルは、 .hgignore 中の指定が合致しても、 無視の対象とはなりません。 .hgignore 記述により、 管理対象外のファイル X が無視されている場合でも、 明示的な hg add X 実行により、 ファイル X を管理対象にすることが可能です。

文法

無視設定ファイルは、 1行1パターンでパターンが列挙された、 単純なテキストファイルです。 空の行は無視されます。 # 文字はコメント文字、 \ 文字はエスケープ文字として扱われます。

Mercurial の無視設定ファイルでは、 複数のパターン文法を利用できます。 デフォルトの文法は Python/Perl 形式の正規表現です。

文法を変更するには、 以下のような形式の行を記述します:

syntax: NAME

NAME 部分には、 以下のいずれかを記述します:

regexp
Python/Perl 形式の正規表現 (※ 訳注: re でも可)
glob
Shell 形式のパターンマッチ

文法変更の指定は、 次に文法を指定するまでに記述された、 全てのパターンに対して有効です。

glob と regexp のいずれの場合も、 作業領域ルートからの相対パスに対して、 部分一致すれば合致とみなされます。 glob 文法での *.c パターン指定は、 任意のディレクトリにおける .c 拡張子ファイルに合致しますし、 regexp 文法での \.c$ パターン指定も、 同様のファイルに合致します。 ルート直下のファイルにのみ合致させたい場合、 regexp 文法であれば、 パターン記述を ^ で開始してください。

Note

.hgignore 記述の場合、 作業領域ルートからの相対パスに対して、 途中要素の部分一致でも合致とみなされますが、 通常のパターン指定では、 相対パスの先頭からの合致が要求されます。 詳細は hg help patterns を参照してください。

記述例

無視設定ファイルの記述例を以下に示します。

# Shell 形式パターンマッチ文法を指定。
syntax: glob

*.elc
*.pyc
*~

# 正規表現文法への切り替え。
syntax: regexp
^\.pc/

hgweb 設定ファイル

Mercurial の内部ウェブサーバ機能 hgweb は、 単一リポジトリまたは、 リポジトリのツリーを公開可能です。 後者の場合、 専用の設定ファイルにより、 パスやオプション設定を定義可能です。 設定ファイルは hg servehgweb.wsgi、 hgweb.cgi および hgweb.fcgi で共通です。

このファイルの記述文法は、 通常の Mercurial 設定ファイルと同じですが、 以下のセクションのみが認識されます:

  • web
  • paths
  • collections

web での記述の詳細は hg help config を参照してください。

paths セクションは、 URL 上のパスと、 それに対応するリポジトリの、 ファイルシステム上におけるパスを対応付けます。 hgweb による公開は、 ファイルシステムの直接公開ではなく、 Mercurial のリポジトリのみを、 設定に従って公開します。

設定キーは URL 中のパスを指します。 hgweb では rev または file といった名前は、 特定用途用に使われますので、 想定外の挙動を避けるために、 リポジトリのパスが、 これらと衝突しないように注意してください。

設定値はファイルシステム上のパスです。 パス指定末尾が *** の場合、 指定のパス位置から、 リポジトリの検出が、 再帰的に実施されます。 パスの末尾が * の場合、 検出されたリポジトリ配下の再帰的検出は、 実施されません (.hg/patches 配下を除く)。 パス末尾が ** の場合、 サブリポジトリのような、 作業領域中のリポジトリも、 再帰的に検出されます。

以下の設定例の場合:

[paths]
/projects/a = /srv/tmprepos/a
/projects/b = c:/repos/b
/ = /srv/repos/*
/user/bob = /home/bob/repos/**

collections セクションでの設定は非推奨なので、 代わりに paths を使用してください。

マージツール

Mercurial でのファイル内容のマージには、 マージツールを使用します。

マージツールは、 2つの異なるリビジョンにおけるファイルの内容を、 1つのファイルに統合します。 マージツール実行時には、 統合対象となる2つのリビジョン時点の内容を持つファイルに加えて、 2つの共通の祖先となるリビジョン時点の内容を持つファイルが与えられ、 双方のリビジョンにおける変更内容が特定されます。

マージツールは、 hg resolvehg mergehg updatehg backout および幾つかのエクステンションの実行時に起動されます。

一般的なマージツールは、 統合対象となるリビジョンに至る過程で、 共通の祖先を元に独立して実施された、 異なる部位への変更に関しては、 それぞれが両立できるように、 自動的に双方の変更を取り込みます。 それに加えて、 近接箇所への異なる変更によって、 衝突 (conflict) が生じる場合には、 グラフィカルな UI での対話的な衝突の解消や、 衝突マークを結果ファイルに埋め込んだりします。 Mercurial 自身は対話的なマージツールを提供せずに、 外部ツールと連携するようになっています。

利用可能なマージツール

外部のマージツールとその実行に関する設定は、 設定ファイルの merge-tools セクションに記述されますが、 設定記述の際の名前には、 外部ツールのコマンド名そのものを使用するが通例です - hgrc(5) を参照してください (※ 訳注: hg help config でも参照可能)。

マージツール設定は、 システム上に実行可能ファイルが存在し、 且つマージ処理が可能である場合に意味を持ちます。 実行可能ファイルの指定は、 絶対または相対パスで指定されるか、 コマンドサーチパス設定上に、 同名の実行可能ファイルが存在する場合に有効となります。 マージツールはマージ処理が可能であるものと仮定されます。 対象がシンボリックリンクで シンボリックリンクが扱える (設定の) 場合、 対象がバイナリファイルで バイナリファイルが扱える (設定の) 場合、 あるいは GUI が必要な設定で GUI が利用可能な場合は、 それぞれ適切に機能することが要求されます。

以下のような内部マージツールも利用可能です:

internal:dump
作業領域側、 マージ対象リビジョン側、 および共通祖先時点の、 それぞれの内容を持つ3つのファイルを生成します。 これらのファイルは、事後の手動マージ等で使用してください。 対象ファイル名が a.txt であった場合、 生成されるファイルはそれぞれ a.txt.locala.txt.other および a.txt.base と命名され、 a.txt と同じディレクトリに格納されます。
internal:fail
変更内容に関するマージ処理は実施せず、 必ずマージ失敗とみなします。 マージ失敗とみなされたファイルに対しては、 hg resolve による手動での衝突解消が必要です。
internal:local
マージ結果として、 作業領域側の内容を採用します。
internal:merge
非対話的な、 単純なマージ処理を実施します。 衝突があった場合、 マージ処理は失敗とみなされますが、 マージ結果ファイルには、 衝突マークが記録されます。
internal:other
マージ結果として、 マージ対象リビジョン側の内容を採用します。
internal:prompt
作業領域側とマージ対象リビジョン側のどちらを、 マージ結果として採用するか、 対話的に確認します。

内部マージツールは、 常に利用可能で GUI も必要としませんが、 シンボリックリンクやバイナリファイルには対応しません。

マージツールの選択

Mercurial で使用されるマージツールは以下の順序で決定されます:

  1. hg mergehg resolve で --tool が指定された場合、 指定されたツールが使用されます。 merge-tools 設定に記述された名前が指定された場合、 設定内容が適用されます。 それ以外の場合、 指定されたツールは、 実行可能ファイルでなければなりません。
  2. HGMERGE 環境変数が設定されている場合、 その内容が適用されますが、 実行可能ファイルが指定されている必要があります。
  3. merge-patterns セクションに記述されたパターンに、 マージ対象ファイルの名前が合致した場合、 合致したパターンに対応する最初のマージツールが使用されます。 バイナリファイルへの適用可否設定は考慮されません。
  4. ui セクションの merge 設定はこの段階で考慮されます。 指定内容が merge-tools 設定に記述された名前では無い場合、 実行可能ファイルが指定されなければなりません。 それ以外の場合は、 利用可能な設定内容が適用されます。
  5. merge-tools 設定に何らかの記述がある場合、 優先度の最も高いツールが使用されます。
  6. hgmerge という名前のツールが利用可能な場合はこれが利用されます。 但しシンボリックリンクやバイナリファイルには適用されません。
  7. マージ対象ファイルがシンボリックリンクやバイナリファイルでない場合、 internal:merge が使用されます。
  8. ファイルのマージは失敗とみなされ、 手動での hg resolve が必要です。

Note

マージツールの選択が完了したなら、 まず最初に Mercurial は単純マージ処理を実施します。 この際に衝突が検出されて、 マージに失敗した場合に限り Mercurial は選択したマージツールによるマージを行います。 最初に単純マージ処理を実施するか否かは premerge 設定で制御できます。 シンボリックリンクやバイナリファイル以外に関しては、 premerge のデフォルト値は有効になっています。

マージツールの設定詳細に関しては、 hgrc(5) における merge-tools や ui セクションを参照してください。 (※ 訳注: hg help config でも参照可能)

複数リビジョンの指定

Mercurial に複数のリビジョンを指定する場合の方法には、 個々のリビジョンをそれぞれ指定する方法以外にも、 ":" を区切り 記号にした範囲指定による方法があります。

範囲表記の文法は、 "[開始]:[終了]" というもので、 "開始"・"終了" 部分にはそれぞれリビジョン識別用の情報が記述されます。 "開始"・"終了" はそれぞれ省略可能です。 "開始" 部分が 記述されない場合、 リビジョン番号 0 が記述されたものとみなされます。 "終了" 部分が記述されない場合、 tip が記述されたものとみなされます。 以上のことから、 ":" という記述は "全リビジョン" を指します。

"開始" 指定が "終了" 指定よりも後のリビジョンである場合、 逆順指定 とみなされます。

範囲指定は "閉区間" とみなされます。 つまり、 3:5 という範囲指定は 3, 4, 5 の指定と等価です。 同様に 9:6 という指定は 9, 8, 7, 6 の指定と 等価です。

ファイル名パターン

Mercurial には、 ファイルを特定するパターン指定方法が複数あります。

特に指定の無い場合、 Mercurial は指定されたファイル名に対して、 shell 形式の拡張ワイルドカード合致を行います。

別な形式でのパターン記述の際には、 明示的に種別を指定してください。

Note

.hgignore での記述では、 作業領域ルートからの相対パスに対して、 部分一致のみで合致判定されます。 詳細は hg help hgignore を参照してください。

パターン合致を行わずに、 指定された名前をそのまま使用する場合、 名前の前に path: を記述します。 この形式を使用する場合、 リポジトリのルートからのパスと完全に一致しなければなりません。

拡張ワイルドカード合致の場合、 名前の前に glob: を記述します。 この形式での合致判定は、 現ディレクトリからの相対パスに対しての、 パス先頭からのパターン合致となりますので、 *.c と合致するのは、 現ディレクトリ直下の末尾が .c で終わるファイルのみです。

ワイルドカードの拡張文法には、 パス区切りも含めた任意の文字列と合致する ** と、 "a または b" を意味する {a,b} という形式があります。

Perl/Python 形式の正規表現の場合、 名前の前に re: を記述します。 正規表現形式でのパターンは、 作業領域ルートからの相対パスに対して、 常に先頭からのパターン合致が要求されます。

ファイルからパターンを読み込む場合は、 listfile: または listfile0: を使用します。 前者が改行でパターンを区切るのに対して、 後者は null 文字でパターンを区切ります。 ファイルから読み込まれた個々のパターンは、 file パターンとして扱われます。

パターンはディレクトリにも合致します。 合致ディレクトリ配下のファイルも、 パターンに合致したものとみなされます。但し( -I-X 向けを除く) コマンドライン引数での glob: 形式指定は、ファイルにしか合致しません。 (※ 訳注: 必要に応じて末尾 ** 等を補ってください)

パターン合致未使用例:

path:foo/bar   リポジトリルート直下の foo ディレクトリ中の bar
path:path:name "path:name" という名前

ワイルドカード指定例:

glob:*.c       現ディレクトリ直下で、 名前が ".c" で終わるもの
*.c            現ディレクトリ直下で、 名前が ".c" で終わるもの
**.c           現ディレクトリまたはその配下のディレクトリにおいて、
               名前が ".c" で終わるもの
foo/*.c        foo ディレクトリ直下で、 名前が ".c" で終わるもの
foo/**.c       foo ディレクトリまたはその配下のディレクトリにおいて、
               名前が ".c" で終わるもの

正規表現指定例:

re:.*\.c$      任意のディレクトリの、 名前が ".c" で終わるもの

ファイル読み込み例:

listfile:list.txt  1行 1 file パターンで list.txt から読み込み
listfile0:list.txt null 文字区切りで file パターンを読み込み

hg help filesets も参照してください。

フェーズの利用

フェーズとは?

フェーズ (phase) は、 当該リビジョンの共有性を管理する仕組みです。 この仕組みによって、 予期せぬ履歴改変 (例: mq や rebase エクステンション等によるもの) を防止できます。

リポジトリ中の各リビジョンは、 以下のいずれかのフェーズに属します:

  • public : 公開サーバ上で参照可能なリビジョン
  • draft : public 化前段階のリビジョン
  • secret : push/pull/clone の対象外となるリビジョン

フェーズには順序関係 (public < draft < secret) があり、 祖先よりも小さなフェーズを持つことはできません。 例えば public フェーズの祖先は、 全て public フェーズです。 各リビジョンのフェーズは、 基本的に public 化する方向に変更されるべきです。

フェーズはどう管理されるのか?

多くの場合、 フェーズは透過的に機能します。 特に指定の無い場合、 新規リビジョンは draft フェーズで作成され、 他リポジトリへの反映の際に public 化されます。

予期せぬ類似リビジョン生成回避のため、 mq/rebase 等のエクステンションは、 一旦 public 化されたリビジョンを、 変更/破棄の対象にできません。 必要であれば hg phase コマンドによる手動でのフェーズ変更も可能です。 実行例に関しては hg help -v phase を参照してください。

フェーズとサーバ

特に指定の無い場合、 全てのサーバで publishing が実施されます。 これは以下を意味します:

- draft フェーズのリビジョンは、 pull/clone されたクライアント側では
  public フェーズとみなされる

- クライアントから push された draft フェーズのリビジョンは、
  サーバ/クライアントの両方で public フェーズとみなされる

- secret フェーズのリビジョンは push/pull/clone 対象にならない

Note

publishing サーバから draft フェーズのリビジョンを pull した場合でも、 『pull は読み出し専用』の原則に則り、 当該リビジョンのフェーズは、 サーバ側では draft のまま (public 化しない) です。

未完の作業を共有するために、 リビジョンのフェーズを draft のままで push/pull したい場合もあるでしょう。 publishing を無効化するには、 サーバ側で以下の設定を行ってください:

[phases]
publish = False

設定ファイルに関する詳細は hg help config を参照してください。

Note

旧版の Mercurial で稼動しているサーバは、 publishing 実施に相当します。

Note

secret フェーズのリビジョンは、 連携先リポジトリに伝搬しません。 ファイル名や履歴メタデータ等の、 履歴情報も伝搬対象から除外されます。 但し、 機能実現上の理由から、 secret フェーズのリビジョンのハッシュ値 (例: d825e4025e39) だけは、 連携先とやり取りされます。

記述例

  • draft または secret フェーズのリビジョン一覧:

    hg log -r "not public()"
    
  • secret フェーズの全リビジョンのを draft 化:

    hg phase --draft "secret()"
    
  • 現行リビジョンと子孫のフェーズを public から draft に強制変更:

    hg phase --force --draft .
    
  • リビジョン番号とフェーズを表示:

    hg log --template "{rev} {phase}\n"
    
  • 連携先リポジトリに応じて、リビジョンを draft フェーズ化:

    hg phase -fd "outgoing(URL)"
    

フェーズの手動操作に関しては hg help phase を参照してください。

単一リビジョンの指定

Mercurial に個々のリビジョン指定する際には複数の記法が使用できます。

整数値は、 「リビジョン番号」とみなされます。 負値は、 tip からの距離を 意味し、 -1 は tip 自身を、 -2 は tip の直前といったリビジョンを指します。

40桁の16進文字列は、 一意な「リビジョン ID」とみなされます。

40桁未満の16進文字列は、 一意な「リビジョン ID」の短縮形式と みなされます。 短縮形式の ID は、 厳密に1つの完全長の ID とだけ 前方一致する場合にのみ有効です。

他の文字列は、 「ブックマーク」、 「タグ名」 または 「ブランチ名」 とみなされます。 「ブックマーク」 は移動可能なリビジョン参照ポインタです。 「タグ名」 は特定のリビジョンに付与された永続的な名前です。 「ブランチ名」は当該ブランチの、 閉鎖されていない最新ヘッドリビジョンか、 全てのヘッドが閉鎖済みなら、閉鎖済みの最新ヘッドリビジョンを意味します。 ブックマーク、タグおよびブランチの名前では ":" 文字を使えません。

予約名 "tip" は、 常に一番最新のリビジョンを指します。

「空リビジョン」を意味する名前 "null" は、 特別な名前として予約 されています。 空リポジトリにおけるリビジョンはこのリビジョンで、 リビジョン 0 の親は "null" リビジョンです。

常に「作業領域の親リビジョン」を示すための名前 "." は、 特別な名前として 予約されています。 作業領域が未更新の場合は、 "null" 指定と等価です。 未コミットのマージ中の場合、 "." は第1親リビジョンを指します。

リビジョン群の指定

Mercurial はリビジョン指定のための問い合わせ言語を提供しています。

問い合わせ言語は「述語」 (predicate) (※ 訳注: いわゆる「関数」的なもの) を提供しており、 二項演算子による結合や、 括弧によるグループ化も可能です。

ID として使用するブランチ名などが、 - 文字や、 既存の述語と一致する場合、 引用符(') または二重引用符(") で囲ってください。

エスケープ表記により、 引用符中の文字列中で、 特殊文字を使用可能です。 例: \n は改行文字扱い。 特殊文字として解釈させたくない場合は、 文字列指定の冒頭に r を付けます。 例: r'...'.

使用可能な前置単項演算子を以下に列挙します:

not x
x に含まれないリビジョン群。 ! x とも表記可能。

使用可能な二項演算子を以下に列挙します:

x::y

x の子孫且つ y の祖先に相当するリビジョン群 (x および y 自身を含む)。 左側のリビジョン指定 (x) が省略された場合は ancestors(y)、 右側のリビジョン指定 (y) が省略された場合は descendants(x) と等価です。

x..y とも表記可能。

x:y
リビジョン番号 x から y の間の全リビジョン群 (x および y 自身を含む)。 左右のリビジョン指定が省略された場合は、 それぞれが 0 および tip とみなされます。
x and y
リビジョン群 x と y の共通部分。 x & y とも表記可能。
x or y
リビジョン群 x と y の総和。 x | y 又は x + y とも表記可能。
x - y
リビジョン群 x のうち、 y に属さないもの。
x^n
リビジョン群 x 中の各リビジョンの、 n 番目の親リビジョン。 n には 0 1 または 2 を指定可能。 n == 0 ならリビジョン自身、 n == 1 なら第1親、 n == 2 なら第2親。
x~n
リビジョン群 x 中の各リビジョンの、 第1親側の n 番目の祖先。 x~0 はリビジョン自身、 x~3x^^^ と等価。

使用可能な後置単項演算子を以下に列挙します:

x^
リビジョン群 x 中の各リビジョンの、 第1親リビジョン。 x^1 と等価。

使用可能な述語を以下に列挙します:

adds(pattern)

パターンに合致する名前のファイルを登録したリビジョン。

明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。

all()
全リビジョン。 0:tip と等価。
ancestor(*changeset)

指定リビジョン郡に共通な最新の祖先。

任意の数のリビジョンを指定可能です。 リビジョン指定が無い場合、結果は空となります。 1つのリビジョンだけが指定された場合、 そのリビジョン自身が『共通の祖先』とみなされます。

ancestors(set)
set 中のリビジョンに対する祖先リビジョン群。
author(string)
user(string) 記述の別名。
bisect(string)

探索状態に合致するリビジョン群:

  • good, bad, skip: 各状態にマークされたリビジョン群
  • goods, bads : good または bad と判断されたリビジョン群
  • range : 探索範囲中のリビジョン群
  • pruned : goods/bads あるいは skip 相当のリビジョン群
  • untested : 状態が未確定のリビジョン群
  • ignored : 探索対象から除外されたリビジョン群
  • current : 現在の探索対象リビジョン
bookmark([name])

指定ブックマーク対象、または全ブックマーク対象。

namere: で始まる場合、 残りは正規表現として扱われます。 ブックマーク名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。

branch(string or set)

指定ブランチまたはリビジョン群の属するブランチ群に、 属するリビジョン。

stringre: で始まる場合、 残りは正規表現として扱われます。 ブランチ名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。

branchpoint()
子リビジョンを2つ以上持つリビジョン群。
bumped()

public フェーズなリビジョンの後継で、 且つ改変可能なリビジョン。

非 public で、且つ廃止設定されていないリビジョンのみが bumped とみなされます。

bundle()

バンドルファイル中のリビジョン群。

バンドルファイルは -R オプションで指定される必要があります。

children(set)
指定リビジョン群の子リビジョン群。
closed()
閉鎖されたリビジョン群。
contains(pattern)

パターンに合致する名前のファイルが存在するリビジョン群。 (変更の有無は判定しません) パターンの詳細は hg help patterns を参照。

実行効率上、 明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルに厳密一致する必要があります。

converted([id])
id が指定された場合は、 変換元における id から変換されたリビジョン、 id 指定が無い場合は、 変換された全てのリビジョン群。
date(interval)
指定期間中のリビジョン群。 期間指定の詳細は hg help dates を参照。
desc(string)
文字列をコミットログに持つリビジョン群。 合致判定は文字大小を無視。
descendants(set)
指定リビジョン群の子孫リビジョン群。
destination([set])
指定リビジョン群を元に、 graft, transplant, rebase 等によって、 生成されたリビジョン群。 set 指定が省略された場合、 all() 指定相当とみなします。
divergent()
他の最終後継リビジョンが存在する、 最終後継リビジョン群。
draft()
フェーズが draft なリビジョン群。
extinct()
子孫が全て廃止リビジョンな、廃止リビジョン群。
extra(label, [value])

extra メタデータに、 特定の名前の値を持つリビジョン群。 値指定により、 合致対象が更に絞り込まれます。

valuere: で始まる場合、 残りは正規表現として扱われます。 値そのものが re: で始まる場合は、 値を literal: 付きで指定してください。

file(pattern)

パターンに合致するファイルに変更を行ったリビジョン群。

多少厳密さに欠けても、 性能が必要な場合は、 代わりに filelog() の使用を検討してみてください。

本述語でのパターンのデフォルト種別は glob: です。

filelog(pattern)

パターンに合致するファイルの変更に関連付けられたリビジョン群。

性能上の理由から、 全リビジョンに対する変更実施の有無確認ではなく、 ファイル単位の履歴記録を元に抽出します (高速な代わりに、 登録除外や、 同一変更の複数実施などは、 検出できません)。 実行性能の高さよりも、 正確な結果が必要な場合は file() を使用してください。

実行効率上、 明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルに厳密一致する必要があります。

first(set, [n])
limit() 記述の別名。
follow([file])
::. (作業領域の第1親の祖先リビジョン群) 記述の別名。 ファイル名指定がある場合、 当該ファイルの履歴 (複製含む) を辿ります。
grep(regex)
keyword(string) と同等ですが、 正規表現を使用できます。 grep(r'...') 形式の場合、 特殊文字もそのまま適用されます。 (※ 訳注: 接頭辞 'r' の使用は、 バックスラッシュ等を含めて、 文字列をそのまま使用する場合の Python 式の記法です) keyword(string) と異なり、 文字大小は無視されません。
head()
名前付きブランチのヘッドリビジョン群。
heads(set)
指定リビジョン中の、 子リビジョンを持たないリビジョン群。
hidden()
不可視状態のリビジョン群 (※ 訳注: 作業領域やブックマーク等から、 到達できない廃止設定のリビジョン群のこと)。
id(string)
16進文字列をハッシュ値とみなして厳密に特定可能なリビジョン。
keyword(string)
文字列が、 コミットログ、 ユーザ名、 変更対象ファイル名の、 いずれかに合致するリビジョン群。 合致判定は文字大小を無視。
last(set, [n])
指定リビジョン群の末尾 n 個。 無指定時は 1。
limit(set, [n])
指定リビジョン群の冒頭 n 個。 無指定時は 1。
matching(revision [, field])

指定リビジョン群 (revision) と、指定項目 (field) 値が同一な、 リビジョンの抽出 (※ 訳注: and 結合等での抽出元指定が無い場合、 全リビジョンが抽出元になります)。

複数項目の合致判定は、 対象項目を空白区切りで指定します (例: 'author description')。

リビジョンの一般的な項目以外に、 特別な項目も指定できます。

一般的な項目には、description, author, branch, date, files, phase, parents, substate, user および diff があります。 authoruser は同一項目です。 diff は各リビジョンでの差分を指します。 2つのリビジョンにおいて diff が一致する場合は files も一致します。

特殊項目には summary および metadata があります: summarydescription の1行目に相当します。 metadatadescription user date との合致に相当します (この名称は、 「主なメタデータ項目との合致」判定に由来します)

フィールド指定が無い場合、 metadata フィールドが対象となります。 同時に複数フィールドの合致判定が可能です。

max(set)
指定リビジョン群中で、 リビジョン番号が最大のもの。
merge()
マージ実施リビジョン群。
min(set)
指定リビジョン群中で、 リビジョン番号が最小のもの。
modifies(pattern)

パターンに合致するファイルを変更したリビジョン群。

明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。

obsolete()
新規リビジョンによる改変が可能なリビジョン群。 (※ 訳注: 廃止設定されているリビジョン群のこと)
only(set1, [set2])
第1引数リビジョン群の祖先で、 且つ第2引数リビジョン群の祖先でないもの (::<set1> - ::<set2> と等価)。 第2引数省略時は、 構造的ヘッドの中で、 第1引数とその子孫群に含まれないヘッドが、 比較対象として使用されます。 (※ 訳注: ::<set1> - ::(heads() - heads(<set2>::)) と等価)
origin([set])
指定リビジョン群の graft, transplant, rebase 等による生成の際に、 元リビジョンとして指定されたリビジョン群。 set 指定が省略された場合、 all() 指定相当とみなします。 当該操作で生成されたリビジョンが、 別のリビジョン生成の際に、 生成元として指定されている場合は、 最初の生成操作における生成元のみが、 生成元とみなされます。
outgoing([path])
指定連携先または無指定時反映先に、 存在しないリビジョン群。
p1([set])
指定リビジョン群または作業領域の、第1親リビジョン群。
p2([set])
指定リビジョン群または作業領域の、第2親リビジョン群。
parents([set])
指定リビジョン群または作業領域の、 全親リビジョン群。
present(set)

指定リビジョン群に存在しないものが含まれている場合は空集合、 それ以外なら指定リビジョン群そのもの。

対象リビジョン群が、 存在しないリビジョンを含む場合、 通常であれば、 処理が中断されますが、 present() によって処理を継続することができます。

public()
フェーズが public なリビジョン群。
remote([id [,path]])
指定 id 相当のリビジョンが連携先に存在する場合は当該リビジョン、 それ以外は空集合。 '.' 記述は現ブランチ名を指します。
removes(pattern)

パターンに合致する名前のファイルを登録除外したリビジョン群。

明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。

rev(number)
数値に合致するリビジョン。
reverse(set)
指定リビジョン群の逆順。
roots(set)
指定リビジョン群中の、 親リビジョンが指定リビジョン群中に存在しない、 全リビジョン。
secret()
フェーズが secret なリビジョン群。
sort(set[, [-]key...])

key での指定方法で整列した集合。 基本の整列方式は昇順で、 降順整列の場合は -key 形式で記述します。

指定可能な整列方式は:

  • リビジョン番号順の rev
  • ブランチ名順の branch
  • コミットログ (description) 順の desc
  • ユーザ名順の user (別名の author も使用可能)
  • コミット日時順の date
tag([name])

指定タグ対象リビジョン、 またはタグ付け対象の全リビジョン群。

namere: で始まる場合、 残りは正規表現として扱われます。 タグ名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。

unstable()
祖先に廃止リビジョンを持つ、非廃止リビジョン群 (※ 訳注: 日本語訳では unstable を『非永続』と訳しています)
user(string)

文字列をユーザ名に持つリビジョン群。 合致判定は文字大小を無視。

stringre: で始まる場合、 残りは正規表現として扱われます。 ユーザ名そのものが re: で始まる場合は、 ユーザ名を literal: 付きで指定してください。

既存の述語や別名 (alias) を組み合わせることで、 新しい述語を定義可能です。 別名は、 Mercurial 設定ファイルの revsetalias セクションにおける、 以下のような記述で定義します:

<別名> = <定義>

別名記述部分において $1$2 といった形式の引数を記述することで、 別名定義部分でその引数を使用できます。

記述例

[revsetalias]
h = heads()
d($1) = sort($1, date)
rs($1, $2) = reverse(sort($1, $2))

上記の記述で、 3つの別名 hd および rs が定義されます。 rs(0:tip, author)reverse(sort(0:tip, author)) と同一です。

hg log のコマンド行オプション指定に対する等価な記述:

-f    ->  ::.
-d x  ->  date(x)
-k x  ->  keyword(x)
-m    ->  merge()
-u x  ->  user(x)
-b x  ->  branch(x)
-P x  ->  !::x
-l x  ->  limit(expr, x)

問い合わせの記述例:

サブリポジトリ

サブリポジトリ (subrepository) 機能は、 Mercurial リポジトリを親に、 外部のリポジトリやプロジェクトを入れ子にし、 コマンドの実行の際に、 それら一連のリポジトリに対して処理を行えるようにします。

現時点でサブリポジトリとして使用できるのは、Mercurial Git Subversion のリポジトリです。

サブリポジトリは、 3つの要素から構成されます:

  1. 入れ子リポジトリの作業領域。 親リポジトリの作業領域中の、 任意の場所に配置可能です。

  2. 入れ子リポジトリへの参照。 親リポジトリの作業領域ルート直下に配置した .hgsub において、 サブリポジトリの参照先を記述します。 Mercurial のサブリポジトリの参照先は、 以下のように記述します:

    入れ子/作業領域/パス = https://example.com/nested/repo/path
    

    Git や Subversion もサブリポジトリとして利用可能です:

    入れ子/作業領域/パス = [git]git://example.com/nested/repo/path
    入れ子/作業領域/パス = [svn]https://example.com/nested/trunk/path
    

    入れ子/作業領域/パス は、 親リポジトリの作業領域ルートに対する、 サブリポジトリ作業領域の相対パス、 https://example.com/nested/repo/path は、 サブリポジトリの連携先情報です。 連携先には、 ローカルファイルシステム上のパスも記述可能です。

    Mercurial リポジトリは、 .hgsub を自動的には生成しませんので、 サブリポジトリを使用する際には、 手動で .hgsub を生成し、 親リポジトリにおいて、 履歴管理対象に追加する必要があります。

  3. 入れ子リポジトリの状態情報。 親リポジトリのルート直下に配置された .hgsubstate において、 親リポジトリでのコミット時点における、 サブリポジトリの状態を復旧するために、 必要な情報が格納されます。 このファイルの生成は、 親リポジトリでのコミットの際に、 Mercurial によって自動的に実施されます。

    Note

    .hgsubstate は決して手動編集しないでください。

サブリポジトリの追加

まだ .hgsub が親リポジトリに存在しない場合は、 手動で作成した上で、 履歴管理対象に登録してください。 親リポジトリの作業領域中の任意の場所に、 外部リポジトリを元に、 作業領域を生成 (checkout) してください。 追加対象の外部リポジトリのためのエントリを .hgsub に追加してください。 これ以後、 このサブリポジトリは管理対象となり、 次回のコミットにおいて、 .hgsubstate に状態が記録され、 親リポジトリのリビジョンに対して、 対応付けが行われます。 (※ 訳注: サブリポジトリに関する「構成管理」は、 あくまで 「親リポジトリの各リビジョンが、 サブリポジトリの各リビジョンと、 どう対応するのか?」 という対応付け情報のみです)

サブリポジトリの同期

構成管理下にあるサブリポジトリの作業領域は、 最新状態への自動的な追従が、 行われなくなります。 その代わり、 親リポジトリのリビジョンにおいて、 関連付けが記録されたリビジョンの内容で更新されるようになります。 この挙動により、 親リポジトリ側と一貫性のある状態が維持できます

そのため、 サブリポジトリの作業領域は、 手動で更新する必要があります。 各サブリポジトリの作業領域を、 希望するリビジョンで更新したならば、 親リポジトリにおいて (適宜テストを実施した上で) コミットを実施することで、 新たなリビジョンの組み合わせが記録されます。

サブリポジトリの削除

親リポジトリからサブリポジトリを削除する場合、 対応するエントリを .hgsub から削除した上で、 関連するファイルを削除してください。

Mercurial コマンドとの連携

add:-S/--subrepos 指定が無い限り、 構成管理対象へのファイル登録は、 再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、 サブリポジトリ中のファイルへのパスが、 直接指定された場合は、 対象ファイルを構成管理対象として登録します。 なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 登録要求を無視します。
archive:-S/--subrepos 指定が無い限り、 アーカイブの作成は、 再帰的には実施されません。
cat:現状では、 サブリポジトリ中のファイルと厳密一致した場合のみ、 処理を実施します。 Git および Subversion 形式の場合は何も実施しません。
commit:コミットの実施により、 親リポジトリと配下のサブリポジトリ間の、 整合性の取れた対応関係が、 (親リポジトリ側に) 記録されます。 未コミット変更があるサブリポジトリは、 コミット動作を中断させます。 -S/--subrepos を指定するか、 設定ファイル記述 (hg help config 参照) での "ui.commitsubrepos=True" 設定により、 コミット実施の際に、 サブリポジトリ中の未コミット変更が、 再帰的にコミットされます。 全てのサブリポジトリから、 未コミット変更が無くなった後で、 各サブリポジトリの状態記録が、 親リポジトリにおいてコミットされます。
diff:-S/--subrepos 指定が無い限り、 差分表示は、 再帰的には実施されません。 サブリポジトリのファイルの差分表示は、 通常の差分表示形式と同じです。 なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 差分表示要求を無視します。
forget:現状では、 サブリポジトリ中のパス (ファイルまたはディレクトリ) が指定された場合に限り、 サブリポジトリ中のファイルに対して、 登録除外操作が実施されます。なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 登録除外要求を無視します。
incoming:-S/--subrepos 指定が無い限り、 取り込みリビジョンの確認は、 再帰的には実施されません。 なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 取り込みリビジョンの確認要求を無視します。
outgoing:-S/--subrepos 指定が無い限り、 反映予定リビジョンの確認は、 再帰的には実施されません。 なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 反映予定リビジョンの確認要求を無視します。
pull:リビジョン取り込みが再帰的に実施されないのは、 hg update に先立つ取り込みリビジョンの取捨選択が、 自明ではないためです。 参照中の全サブリポジトリにおいて、 全ての変更を取り込むのは、 非常に高コストですし、 Subversion 形式の場合は実行自体が不可能です。
push:親リポジトリでの履歴反映の際には、 まずはサブリポジトリにおいて、 履歴反映が自動的に実施されます。 これは、 親リポジトリが参照する、 サブリポジトリのリビジョンを、 広く参照可能とするためです。 なお、 Subversion 形式の場合は、 履歴反映操作は何も行いません。
status:-S/--subrepos 指定が無い限り、 状態表示は、 再帰的には実施されません。 サブリポジトリのファイルの状態表示は、 通常の状態表示と同じ形式です。 なお、 サブリポジトリが Subversion 形式の場合、 現状では、 何の表示も無しに、 状態表示要求を無視します。
update:作業領域更新により、 サブリポジトリは、 指定リビジョンにおける、 コミット時点の状態が復元されます。 サブリポジトリにおいて、 復元対象リビジョンが利用不可能な場合、 作業領域更新に先立って、 対象リビジョンの取り込みが実施されます。 (※ 訳注: Subversion 形式は、 履歴情報がサーバ側にあるため、 常に対象リビジョンの取り込みが必要) この挙動は、 サブリポジトリ利用によって、 作業領域更新の際に、 ネットワーク接続が必要となる可能性があることを意味します。

サブリポジトリ連携先の書き換え

親リポジトリの利用期間中に、 サブリポジトリの連携先が変更された場合、 変更前に親リポジトリで記録されたリビジョンが持つ連携先情報は、 無効となってしまいます。 親リポジトリの hgrc ファイルまたは Mercurial の設定ファイルにおいて、 連携先情報の書き換えルールを定義することで、 この問題を解消可能です。 詳細に関しては hgrc(5) の [subpaths] セクションを参照してください。 (※ 訳注: hg help config でも参照可能)

テンプレートの利用

Mercurial では、 テンプレート機能によってコマンドの出力をカスタマイズ することができます。 コマンドラインからの指定では、 --template による テンプレート指定と、 --style によるスタイル指定の両方が使用できます。

「log 的」な出力を行う一連のコマンド出力をカスタマイズ可能です: log, outgoing, incoming, tip, parents, heads, glog

Mercurial には、 default(明示的な指定が無い場合のスタイル)、 compact、 changelog、 phases、 および xml の5つのスタイル設定が同梱されています。 スタイルの指定方法は以下の通り:

$ hg log -r1 --style changelog

テンプレートとは、 変数展開マークアップ機能を備えたテキストです:

$ hg log -r1 --template "{node}\n"
b56ce7b07c52de7d5fd79fb89701ea538af65746

波括弧で囲まれた部分は「キーワード」と呼ばれます。 キーワード利用の 可否は、 テンプレートの利用される状況に依存します。 以下のキーワードは log 的なコマンドでのテンプレート利用の際には常に使用可能です:

author:文字列。 リビジョンの作者名(記録情報そのまま)。
bisect:文字列。 当該リビジョンの二分探索状態。
bookmarks:文字列列挙。 当該リビジョンに付与されたブックマークの一覧。
branch:文字列。 リビジョンの属するブランチ名。
children:文字列列挙。 リビジョンの子供。
date:日時情報。 リビジョンが記録された日時。
desc:文字列。 リビジョンのコミットログ。
diffstat:文字列。 以下の形式での変更概要。 "変更対象ファイル: +追加行数/-削除行数"
extras:辞書の列挙。当該リビジョンの 'extras' 情報一覧。 (※ 訳注: 各辞書は key および value というキーを持ちます)
file_adds:文字列列挙。 当該リビジョンでの追加ファイル一覧。
file_copies:文字列列挙。 当該リビジョンでの複製元ファイル一覧。
file_copies_switch:
 文字列列挙。 "file_copies" と同義だが、 --copied 指定のある時のみ表示。
file_dels:文字列列挙。 当該リビジョンでの登録除外ファイル一覧。
file_mods:文字列列挙。 当該リビジョンでの変更ファイル一覧。
files:文字列列挙。 当該リビジョンでの、 変更/追加登録または 登録除外ファイルの一覧。
latesttag:文字列。 当該リビジョンの祖先に対して最も最近に付与されたタグ
latesttagdistance:
 整数。 最新タグへの最長パス
node:文字列。 リビジョン識別用の 40 桁 16 進数ハッシュ値。
p1node:文字列。 第1親リビジョンの 40 桁ハッシュ値の文字列。 親を持たないリビジョンの場合は、 全桁が 0 のハッシュ値文字列。
p1rev:整数。 第1親リビジョンの、 当該リポジトリにおけるリビジョン番号。 親を持たないリビジョンの場合は -1。
p2node:文字列。 第1親リビジョンの 40 桁ハッシュ値の文字列。 第2親を持たないリビジョンの場合は、 全桁が 0 のハッシュ値文字列。
p2rev:整数。 第2親リビジョンの、 当該リポジトリにおけるリビジョン番号。 第2親を持たないリビジョンの場合は -1。
parents:文字列列挙。 当該リビジョンの親リビジョンの "rev:node" 形式。 親が単一で、 且つリビジョン番号が1つ前の場合は、 何も表示されません。
phase:文字列。 当該リビジョンのフェーズ名。
phaseidx:数値。 当該リビジョンのフェーズ値。
rev:整数。 各リポジトリ固有のリビジョン番号。
tags:文字列列挙。 当該リビジョンに付与されたタグの一覧。

"date" キーワードの出力は可読形式ではありません。 出力に日時情報を 含めたい場合、 可読化するための「フィルター」を使用します。 「フィルター」とは、 入力値に基づいて文字列を生成する機能です。 一覧系の入力に対して文字列名のフィルターを適用する場合、 最初に stringify フィルターを適用してください。 複数のフィルターを連ねることで、 様々な出力を得ることができます:

$ hg tip --template "{date|isodate}\n"
2008-08-21 18:22 +0000

フィルター一覧(入力と、 それに対する出力):

addbreaks:文字列。 最終行を除く各行の行末に XHTML の "<br />" タグを追加します。
age:日時情報。 与えられた日時と、 現在日時との差分を表す 可読形式の文字列を生成します。
basename:文字列。 与えられた文字列をパスとみなし、 パス構成要素の、 末尾要素を取り出します (末尾パス区切りは無視されます)。 例) "foo/bar/baz" は "baz"、 "foo/bar//" は "bar"
date:日時情報。 タイムゾーン込みの Unix date コマンド形式にします。 例) "Mon Sep 04 15:13:13 2006 0700"
domain:文字列。 メールアドレスと思しき最初の文字列部分から ドメイン部分だけを取り出します。 例) User <user@example.com>example.com
email:文字列。 メールアドレスと思しき最初の部分を取り出します。 例) User <user@example.com>user@example.com
emailuser:文字列。 メールアドレスのユーザ名部分を取り出します。
escape:文字列。 XML/XHTML の特殊文字である "&"、 "<" および ">" を XML のエンティティ形式に変換し、 NUL 文字を除外します。
fill68:文字列。 68 桁に収まるように文字列を折り返します。
fill76:文字列。 76 桁に収まるように文字列を折り返します。
firstline:文字列。 最初の行のみを取り出します。
hex:文字列。 Mercurial の node 情報を 40 桁 16 進文字列に変換します。
hgdate:日時情報。 Unix タイムスタンプとタイムゾーンオフセットによる 数値対形式で可読化します。 例) "1157407993 25200"
isodate:日時情報。 ISO 8601 形式で可読化します: 例) "2009-08-18 13:00 +0200"
isodatesec:日時情報。 秒情報付きの ISO 8601 形式で可読化します: 例) "2009-08-18 13:00:13 +0200" 後述する rfc3339date フィルタの説明も参照してください。
localdate:日時情報。 日時情報をローカルタイムゾーンに変換します。
nonempty:文字列。 与えられた文字列が空の場合 '(none)'となります。
obfuscate:文字列。 全ての文字を XML エンティティ形式に変換します。
person:文字列。 メールアドレスを RFC 5322 形式で解析して、 名前部分だけを取り出します。
rfc3339date:日付情報。 RFC 3339 で定められた日付形式で可読化します。 例) "2009-08-18T13:00:13+02:00".
rfc822date:日時情報。 メールのヘッダと同形式で可読化します: 例) "Tue, 18 Aug 2009 13:00:13 +0200".
short:リビジョンハッシュ 値。 12 桁程度の短縮形式にします。
shortbisect:文字列。 文字列 を二分探索 (bisect) 状態とみなし、 状態に見合った1文字 (G: good, B: bad, S: skipped, U: untested, I: ignored) を返します。 文字列 が二分探索状態として不適切な場合、 空白文字を返します。
shortdate:日時情報。 "2006-09-18" 形式で可読化します。
stringify:任意のデータ。 値を文字列化して連結します
strip:文字列。 先頭/末尾の空白文字を取り除きます。
stripdir:文字列。 与えられた文字列をパスとみなし、 ディレクトリ 階層があればそれを取り除きます。 例) "foo" および "foo/bar" は "foo"
tabindent:文字列。 最初の行以外の非空行をタブ文字で字下げします。
urlescape:文字列。 全ての「特殊」文字を変換します。 例えば "foo bar" は "foo%20bar" となります。
user:文字列。 ユーザ名またはメールアドレスから、 ユーザ名の短縮形式部分を取り出します。

フィルタは関数呼び出しに過ぎません。 例えば、 expr|filterfilter(expr) と等価です。

フィルタの他に、 以下の様な基本的な組み込み関数があります:

また、 列挙形式を返す expr に対しては、 以下の様な記述が可能です:

コマンドラインでのテンプレート指定例:

URLのパス指定

有効な URL 指定は以下の形式です:

local/filesystem/path[#revision]
file://local/filesystem/path[#revision]
http://[user[:pass]@]host[:port]/[path][#revision]
https://[user[:pass]@]host[:port]/[path][#revision]
ssh://[user@]host[:port]/[path][#revision]

ローカルファイルシステム上のパスが指す先は、 Mercurial のリポジトリでも、 バンドルファイル (hg bundle または hg incoming --bundle で生成) でも構いません。 hg help paths も参照してください。

連携先リポジトリ指定において、 '#' 記号に続けて ID を指定することで、 特定のブランチ、 タグまたはリビジョンを指定することができます。 hg help revisions も参照してください。

http://https:// 形式の URL で指定される連携先への push の様な 機能のうちの幾つかは、 その機能が連携先の Mercurial サーバ側で明示的に 利用可能になっている場合に限り使用可能です。

HTTPS による URL 指定の安全性は、 web.cacerts における設定の 妥当性に依存します。

Mercurial と SSH を併用する場合の注意点:

連携先 URL は、 設定ファイルの [paths] セクションで、 別名を付けて記述することができます:

[paths]
alias1 = URL1
alias2 = URL2
...

URL 指定が必要なコマンドに対しては、 別名を指定することができます (例えば、 hg pull alias1hg pull URL1 と同義です)。

コマンドに URL を指定しなかった場合に、 暗黙の連携先として使用される 重要な別名が2つあります:

default:
hg clone によって複製した場合、 新規リポジトリの 'default' として 複製元リポジトリの URL が保存されます。 以後、 連携先を省略して hg pushhg pull に類するコマンドを 実行した際には、 この URL が連携先として使用されます。
default-push:
hg push は、 'default-push' の別名で定義される URL を探します。 'default' が定義されている場合でも、 'default-push' が定義されていれば こちらが優先されます。

エクステンション

ここでは、 Mercurial に同梱されるエクステンションについて説明します。 それ以外のエクステンションに関しては、 各コマンドのオンラインヘルプを参照してください。

acl

リポジトリにおけるアクセス制御用のフック集

アクセス制御用フックを使用することで、 pretxnchangegroup や pretxncommit 契機で更新反映を受理した際に、 指定されたブランチやパスに対して、 アクセス (= 改変) の可否を制御できます。

本エクステンションでは、 各リビジョンのコミット実施者 (この情報は、 あまり有益ではありません) の名前ではなく、 フックが実行される環境での、 ログインユーザ名情報をベースに、 アクセス可否が判定されます。

ACL エクステンションのフックは、 hgsh (※ 訳注: contrib 成果物として、 配布されています) のような、制限付きのシェルと併用することで、 push/pull 以外の操作に関して、 ログイン済みユーザに対する抑止を行う、 という様な用途に適しています。 ユーザがログインできる一般的な環境では、 ユーザによって設定が無効化される可能性があるため、 ACL フックでの制限は、 安全とは言えません。 同一アカウントを、 複数人で共有するような場合も、 アクセス元のユーザを特定できないため、 安全とは言えません。

アクセス可否の判定順序は、 以下の通りです:

  1. ブランチへの禁止一覧 (acl.deny.branches セクション)
  2. ブランチへの許可一覧 (acl.allow.branches セクション)
  3. パスへの禁止一覧 (acl.deny セクション)
  4. パスへの許可一覧 (acl.allow セクション)

許可/禁止のいずれも、 キー/値の対で設定します。

ブランチベースのアクセス制御

ブランチベースのアクセス制御には、 acl.deny.branches および acl.allow.branches セクションでの設定が使用されます。 これらのセクションでは、 以下のいずれかを、 キーとして指定します:

  • ブランチ名、または
  • 「全ブランチ」を意味するアスタリスク(*)

キーに対応する値には、 以下のいずれかを指定します:

  • ユーザ/グループの名前を、 カンマ区切りで並べた一覧、 または
  • 「全て」を意味するアスタリスク

ユーザ/グループ名指定の冒頭に "!" を付けることで、 合致判定条件を、 反転させることができます。

パスベースのアクセス制御

パスベースのアクセス制御には acl.deny および acl.allow セクションでの設定が使用されます。 これらのセクションでは、 パスの合致判定をするパターン (無指定時の記述文法は glob) を、 キーとして指定します。 キーに対応する値の記述方式は、 他のセクションと同じです。

グループ

グループ名を記述する場合、 接頭辞として @ を付与します。 グループ名記述は、 グループに属する全ユーザの列挙と、 同じ効果を持ちます。

グループのメンバーは、 acl.groups セクションで定義できます。 このセクションにおいて、 グループ名が定義されていない場合、 UNIX 系の環境下であれば、 グループのメンバーに関する情報は、 OS から取得されます。 それ以外の場合は、 例外が発生します。

設定例

[hooks]

# コミット実行に制限を掛けたい場合の設定
pretxncommit.acl = python:hgext.acl.hook

# pull push bundle serve 実行に制限を掛けたい場合の設定
pretxnchangegroup.acl = python:hgext.acl.hook

[acl]
# 変更反映元種別が、以下に列挙されている場合のみ、許可/禁止を行い、
# それ以外の場合は、制限を行わない。 指定可能な種別は、http または
# ssh 経由での全アクセスを指す "serve" か、対応するコマンドの
# (ローカルでの)実行に対応する "push" "pull" "bundle" です。
# デフォルト値: serve
sources = serve

[acl.deny.branches]

# いずれのユーザも frozen-branch へのアクセスを禁止:
frozen-branch = *

# bad-user は全てのブランチへのアクセスを禁止:
* = bad-user

[acl.allow.branches]

# branch-a へのアクセスを特定のユーザにのみ許可:
branch-a = user-1, user-2, user-3

# branch-b へのアクセスを一人のユーザにのみ許可:
branch-b = user-1

# super-user は全てのブランチにアクセス可能:
* = super-user

# 全てのユーザは branch-for-tests にアクセス可能:
branch-for-tests = *

[acl.deny]
# acl.allow よりも先に、 本セクションの設定に対して確認が実施されます。
# 合致する設定があった場合、acl.allow セクションの設定は無視されます。
# acl.deny 設定が無い場合、全ユーザにアクセスが許可されます。
# 記述形式: 合致パターン = ユーザ名, ..., @グループ名, ...

# 全ユーザにマッチさせる場合は、値にアスタリスクを指定:
# my/glob/pattern = *

# user6 は全てのファイルに対してアクセス禁止:
** = user6

# グループ "hg-denied" は全てのファイルに対してアクセス禁止:
** = @hg-denied

# 全ユーザに対して "DONT-TOUCH-THIS.txt" はアクセス禁止。
# (他のファイルにアクセス可能なユーザであっても同様)
src/main/resources/DONT-TOUCH-THIS.txt = *

[acl.allow]
# 設定ファイルに acl.allow セクションが無い場合、全ユーザに対して、
# 全アクセスが許可されます。 空の acl.allow セクションは、
# 全ユーザに対して「許可を与えない」ことを意味します。

# ユーザ "doc_writer" は "docs" 配下の任意のファイルにアクセス可能:
docs/** = doc_writer

# ユーザ "jack" とグループ "designers" は "images" 配下の任意の
# ファイルにアクセス可能:
images/** = jack, @designers

# acl.deny で禁止されている "user6" ユーザおよび "hg-denied"
# グループに属するユーザ以外の、全てのユーザに対して
# "resources" 配下の任意のファイルへのアクセスを許可。
# 但し acl.deny で全ユーザにアクセス禁止されている
# src/main/resources/DONT-TOUCH-THIS.txt を除く:
src/main/resources/** = *

.hgtags = release_engineer

条件反転("!")設定例

仮に、 指定ユーザ (又はグループ) の履歴のみを反映させたいブランチがあり、 ブランチ生成も含めて、 それ以外のアクセスは制限したくない、とします。

"!" 指定を使うことで、 指定ユーザ/グループ以外による履歴の反映を、 特定ブランチ/パスに対して抑止できます。

以下の設定により: 1) ユーザ "gollum" 以外のブランチ "ring" へのアクセス、 2) グループ "hobbit" 以外のブランチ "lake" へのアクセス、 3) ユーザ "gollum" 以外の /misty/mountains/cave/ring ファイルへのアクセスが、禁止されます。

[acl.allow.branches]
# 空

[acl.deny.branches]

# 1) ユーザ 'gollum' のみがブランチ 'ring' にコミット可能。
# その他のブランチへの 'gollum' /他のユーザのコミット可否は変わらず。
ring = !gollum

# 2) グループ 'hobbit' のメンバーみがブランチ 'lake' にコミット可能。
# その他のブランチへの 'hobbit' /他のユーザのコミット可否は変わらず。
lake = !@hobbit

# ファイルパスによるアクセス禁止も可能:

[acl.allow]
# 空

[acl.deny]
# 3) ユーザ 'gollum' のみが以下のファイルを変更可能。
# 他のファイルの 'gollum' /他のユーザの改変可否は変わらず。
/misty/mountains/cave/ring = !gollum

blackbox

リポジトリにおけるイベントの記録(デバッグ用)

デバッグや問題診断向けに、 イベント情報を .hg/blackbox.log に記録します。 記録対象イベントは blackbox.track 設定経由で変更することができます。 (※ 訳注: ここでの "blackbox" は『内容不詳の仕組み』ではなく、 『フライトレコーダ』の意味で使用されています) 設定例:

[blackbox]
track = *

[blackbox]
track = command, commandfinish, commandexception, exthook, pythonhook

[blackbox]
track = incoming

[blackbox]
# 記録先ファイルの最大サイズ
maxsize = 1.5 MB
# 記録先ファイルサイズが上限を超えた場合の最大ローテート数
maxfiles = 3

コマンド

blackbox

最新のリポジトリイベントの表示:

hg blackbox [OPTION]...

最新のリポジトリイベントの表示

オプション:

-l, --limit <値>
 イベント表示数 (既定値: 10)

bugzilla

Bugzilla バグ管理システムとの連携用フック集

本エクステンションのフックは、 記録されたリビジョンからの Bugzilla バグ ID 検出を契機に、 Bugzilla 上のバグ情報に対して、 コメントを追加します。 Mercurial のテンプレート機能を使うことで、 コメント形式を変更可能です。

コミットログからのバグIDの抽出では、 Bugzilla の「作業時間」を更新する、 所要時間情報の取り出しも可能です (オプション)。 バグ状態を「解決済み」 にすることも可能です。

Bugzilla との連携方式は、 以下の3種類から選択できます:

  1. Bugzilla XMLRPC インタフェースを使用。 Bugzilla 3.4 以降が必要。
  2. データの確認に Bugzilla XMLRPC を、 コメントの追加に Bugzilla メールインタフェースを使用。 Bugzilla 3.4 以降が必要。
  3. Bugzilla データベースを直接操作。 MySQL を使用する Bugzilla 限定。 Python MySQLdb が必要。

データベースの直接操作での連携は、 スキーマ変更の影響を受け易く、 且つ、 コメント追加通知のメール送信に、 寄贈扱い (contrib) の Bugzilla スクリプトを必要とします。 Mercurial の実行ユーザの権限がそのまま、 このスクリプトの実行権限となりますが、 Bugzilla の稼動ホスト上での実行で、 且つ Bugzilla の設定ファイルの読み出し権限を持っている必要があります。 それに加えて、 Bugzilla データベースに対して、 フルアクセス可能な MySQL ユーザの、 ユーザ名とパスワードが必要となります。 以上の条件から、 この連携方式は、 現在は非推奨であり、 Bugzilla の更新にも対応しません。 この連携方式では、 コメントの追加のみがサポートされています。

XMLRPC 連携では、 Bugzilla ユーザ名とパスワードを設定ファイルに記述し、 当該ユーザの権限でコメントが追加されます。 ユーザ名とパスワードは、 当該リポジトリ上で Mercurial を実行する、 全ユーザから参照可能なため、 コメント追加に必要な権限しか持たない、 Bugzilla 連携専用ユーザで、 運用する事を推奨します。 バグの状態を「解決済み」 (fixed) にするには、 Bugzilla 4.0 版以降が必要です。

XMLRPC/email 連携では、 Bugzilla への問い合わせに XMLRPC を使用しますが、 バグへのコメント追加には、 メールを使用します。 メールの From 欄には、 各リビジョンに記録されたユーザ情報中の、 メールアドレスが使用されるため、 各リビジョンの作成者によって、 コメントが追加されたように見えます。 リビジョンのメールアドレス情報が、 Bugzilla ユーザのものと対応しない場合、 Bugzilla へのアクセスで使用されるユーザ名で、 メールが送信されます。 サポート対象の全ての版の Bugzilla で、 バグの状態を「解決」にできます。

全連携方式で共通の設定項目は以下の通りです:

bugzilla.version

連携方式の選択。 指定可能な値は以下の通り:

xmlrpc:Bugzilla XMLRPC 経由での連携
xmlrpc+email:Bugzilla XMLRPC とメール経由での連携
3.0:MySQL 経由での連携: Bugzilla 3.0 以降限定
2.18:MySQL 経由での連携: Bugzilla 2.18 以上 3.0 未満限定
2.16:MySQL 経由での連携: Bugzilla 2.16 以上 2.18 未満限定
bugzilla.regexp
状態更新対象のバグID群を、 コミットログから抽出するための正規表現。 非数値文字で区切られたバグID群に合致する <ids> 名のグループ記述 ( "()") が必須です。 バグに対する作業時間を表す、 小数点数に合致する <hours> 名グループも記述可能です。 名前付きグループ記述が無い場合、 最初の "()" グループがバグID群に、 作業時間の更新は無し、 とみなされます。 デフォルトの正規表現は Bug 1234Bug no. 1234Bug number 1234Bugs 1234,5678Bug 1234 and 5678 および類似の形式に加えて、 前置詞に h または hours が付けられた時間数 (例: hours 1.5) が続くものに合致します。 文字大小は無視されます。
bugzilla.fixregexp
「解決済み」化するバグID群を、 コミットログから抽出するための正規表現。 非数値文字で区切られたバグID群に合致する <ids> 名のグループ記述 ( "()") が必須です。 バグに対する作業時間を表す、 小数点数に合致する <hours> 名グループも記述可能です。 名前付きグループ記述が無い場合、 最初の "()" グループがバグID群に、 作業時間の更新は無し、 とみなされます。 デフォルトの正規表現は、 Fixes 1234Fixes bug 1234Fixes bugs 1234,5678Fixes 1234 and 5678 および類似の形式に加えて、 前置詞に h または hours が付けられた時間数 (例: hours 1.5) が続くものに合致します。 文字大小は無視されます。
bugzilla.fixstatus
バグを「解決」状態にする際の「状態」値。 デフォルト値: RESOLVED (対象済み)
bugzilla.fixresolution
バグを「解決」状態にする際の「対処方法」値。デフォルト値: FIXED (修正済み)
bugzilla.style
コメントの整形に使用するスタイルファイル。
bugzilla.template

コメントの整形に使用するテンプレート。 スタイルファイル指定よりも、 こちらが優先します。 通常のものに加えて、 以下のキーワードが使用できます:

{bug}:Bugzilla のバグ ID
{root}:Mercurial リポジトリのフルパス
{webroot}:Mercurial リポジトリのスラッシュ除外 (strip) 後パス
{hgweb}:Mercurial リポジトリの URL 生成用のベース URL

無指定の場合、 リポジトリ {root} のリビジョン {node|short} がバグ {bug} に関連。\n詳細:\n\t{desc|tabindent} が使用されます。

bugzilla.strip
テンプレートにおける {webroot} 相当を得るために、 Mercurial リポジトリのパス (テンプレートの {root} 相当) 冒頭から、 取り除くスラッシュの数。 例えば {root}/var/local/my-project のリポジトリで、 {webroot}my-project にするためには、 strip に 2 を指定します。 デフォルト値は 0。
web.baseurl
Mercurial リポジトリの URL 生成用ベース URL。 テンプレートキーワード {hgweb} で参照可能。

連携方式 XMLRPC+email と MySQL で共通の設定項目は以下の通りです:

bugzilla.usermap

Mercurial の各リビジョンの、 生成者情報のメールアドレスと、 Bugzilla ユーザのメールアドレスの、 対応一覧ファイルへのパス。 対象ファイルは、 1行1対応付けの、 以下の形式で記述してください:

リビジョン作成者 = Bugzilla ユーザ

[usermap] セクションの説明も参照してください。

[usermap] セクションは、 Mercurial の各リビジョンの、 生成者情報のメールアドレスと、 Bugzilla ユーザのメールアドレスの、 対応付けを行います。 bugzilla.usermap 設定の説明も参照してください。 記述形式は リビジョン生成者 = Bugzilla ユーザ です。

XMLRPC 連携固有の設定項目は以下の通りです:

bugzilla.bzurl
アクセス先 Bugzilla のベース URL。 デフォルト値は http://localhost/bugzilla
bugzilla.user
Bugzilla との XMLRPC 連携で、 ログインに使用するユーザ名。 デフォルト値は bugs
bugzilla.password
Bugzilla 連携で、 ログインに使用するパスワード。

XMLRPC+email 経由での連携では、 XMLRPC 経由連携に関する設定に加えて、 以下の設定が必要です:

bugzilla.bzemail
Bugzilla へ送信する際の宛先メールアドレス。

以上の設定に加えて、 Mercurial のメール設定も必要です。 hgrc(5) ドキュメント (※ 訳注: hg help config でも参照可能) の [email] および [smtp] セクションを参照してください。

MySQL 経由連携固有の設定項目は以下の通りです:

bugzilla.host
Bugzilla データベースを持つ MySQL サーバのホスト名。 デフォルト値は localhost
bugzilla.db
MySQL における Bugzilla データベースの名前。 デフォルト値は bugs
bugzilla.user
MySQL サーバへのアクセスに使用するユーザ名。 デフォルト値は bugs
bugzilla.password
MySQL サーバへのアクセスに使用するパスワード。
bugzilla.timeout
データベース接続のタイムアウト指定 (単位:秒)。 デフォルト値は 5。
bugzilla.bzuser
リビジョン生成者名が、 Bugzilla ユーザと対応しない場合に、 コメント追加に使用する Bugzilla ユーザ名 (予備設定)
bugzilla.bzdir
Bugzilla のインストール先ディレクトリ。 デフォルトの notify 設定において使用されます。 デフォルト値は /var/www/html/bugzilla
bugzilla.notify
バグ情報の更新通知を、 Bugzilla にメール送信させるコマンド。 3つのキーワード bzdirid (バグ ID) および user (リビジョン作成者の Bugzilla メールアドレス) が、 置換指定可能です。 デフォルト値は MySQL のバージョンに依存しており、 2.18 版以降では、 "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s" が使用されます。

エクステンションの有効化:

[extensions]
bugzilla =

[hooks]
# リビジョンが当該リポジトリに push/pull で取り込まれた契機で
# Bugzilla 連携のフックを実行
incoming.bugzilla = python:hgext.bugzilla.hook

設定例:

以下は XMLRPC 連携の設定例です。 http://my-project.org/bugzilla の Bugzilla と連携し、 ユーザ名 bugmail@my-project.org、 パスワード plugh でログインします。 URL http://my-project.org/hg 配下でアクセスする、 /var/local/hg/repos/ 配下の複数リポジトリでの、 設定共有を想定しています:

[bugzilla]
bzurl=http://my-project.org/bugzilla
user=bugmail@my-project.org
password=plugh
version=xmlrpc
template=Changeset {node|short} in {root|basename}.
         {hgweb}/{webroot}/rev/{node|short}\n
         {desc}\n
strip=5

[web]
baseurl=http://my-project.org/hg

以下は XMLRPC+email 連携の設定例です。 http://my-project.org/bugzilla の Bugzilla と連携し、 ユーザ名 bugmail@my-project.org、 パスワード plugh でログインします。 URL http://my-project.org/hg 配下でアクセスする、 /var/local/hg/repos/ 配下の複数リポジトリでの、 設定共有を想定しています。 コメントの追加は、 Bugzilla のメールアドレス bugzilla@my-project.org 宛に送信されます:

[bugzilla]
bzurl=http://my-project.org/bugzilla
user=bugmail@my-project.org
password=plugh
version=xmlrpc
bzemail=bugzilla@my-project.org
template=Changeset {node|short} in {root|basename}.
         {hgweb}/{webroot}/rev/{node|short}\n
         {desc}\n
strip=5

[web]
baseurl=http://my-project.org/hg

[usermap]
user@emaildomain.com=user.name@bugzilladomain.com

以下は MySQL 連携の設定例です。 /opt/bugzilla-3.2 にインストールされた Bugzilla 3.2 を想定しています。 MySQL サーバのホスト名が localhost、 Bugzilla データベース名が bugs、 MySQL サーバへのアクセスに、 ユーザ名 bugs、 パスワード XYZZY を使用します。 URL http://my-project.org/hg 配下でアクセスする、 /var/local/hg/repos/ 配下の複数リポジトリでの、 設定共有を想定しています:

[bugzilla]
host=localhost
password=XYZZY
version=3.0
bzuser=unknown@domain.com
bzdir=/opt/bugzilla-3.2
template=Changeset {node|short} in {root|basename}.
         {hgweb}/{webroot}/rev/{node|short}\n
         {desc}\n
strip=5

[web]
baseurl=http://my-project.org/hg

[usermap]
user@emaildomain.com=user.name@bugzilladomain.com

上記設定例で Bugzilla に追加されるコメントは、 全て以下の形式となります:

Changeset 3b16791d6642 in repository-name.
http://my-project.org/hg/repository-name/rev/3b16791d6642

(※ ここには各リビジョンのコミットログが展開されます)

children

子リビジョン表示のコマンド (非推奨)

本エクステンションは非推奨です。hg log -r "children(REV)" を使用してください。

コマンド

children

指定リビジョンの子リビジョンの表示:

hg children [-r REV] [FILE]

作業領域の子リビジョンを表示します。 -r/--rev によるリビジョン指定が ある場合は、 指定リビジョンの子リビジョンを表示します。 引数として ファイルが指定された場合、 ファイルが(作業領域のリビジョン、 または --rev で指定されたリビジョンの後で)最後に変更されたリビジョンを表示 します。

オプション:

-r, --rev <リビジョン>
 指定リビジョンの子リビジョンの表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ

churn

変更履歴の統計情報表示のコマンド

コマンド

churn

リポジトリにおける変更の統計分布表示:

hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]

本コマンドは、 変更行数またはリビジョン数の度数分布を、 テンプレート 指定によってグループ化してグラフ表示します。 特に指定の無い場合、 リビジョン作成者毎に変更行数をグループ化します。 --dateformat が指定された場合、 度数分布は日時でグループ化されます。

特に指定の無い場合、 度数分布の統計対象は変更行数となりますが、 --changesets が指定された場合は、 対象リビジョンの数が統計対象と なります。

例:

# ユーザ毎の変更行数の表示
hg churn -t "{author|email}"

# 日毎の活発度(コミット実施数)を表示
hg churn -f "%H" -s -c

# 月毎の活発度を表示
hg churn -f "%Y-%m" -s -c

# 年毎の変更行数を表示
hg churn -f "%Y" -s

下記形式のファイルを指定することで、 「別名」の電子メールアドレスを、 「実名」に変換して集計できます:

<別名> = <実名>

--aliases 指定により、 指定の変換ファイルが読み込まれますが、 特に指定が無い場合は、 リポジトリのルート直下にある .hgchurn というファイルが読み込まれます。 別名定義の記述は、 一番右側の "=" 以降が「実名」となります。

オプション:

-r, --rev <リビジョン[+]>
 処理対象とする特定リビジョン/範囲の指定
-d, --date <日時>
 指定日時と一致したリビジョンを処理対象とする
-t, --template <テンプレート>
 リビジョン表示をグループ化するためのテンプレート (既定値: {author|email})
-f, --dateformat <書式>
 日時グループ化のための strftime 互換形式フォーマット
-c, --changesets
 リビジョン数で統計
-s, --sort キーによる整列(無指定時: 統計量で整列)
--diffstat 追加/削除行表示の分離
--aliases <ファイル>
 ユーザ名変換用ファイル
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

color

コマンド出力のカラー化

本エクステンションは、 status および resolve コマンドの場合は、 各ファイル状態に応じて、 qseries コマンドの場合は、 パッチの適用状況 (適用済み、 未適用、 不在) に応じて、 diff 関連コマンドの場合は、 追加、 削除、 差分ヘッダおよび末尾空白文字の各要素に対応して、 出力に対する色付けを行います。

色付け以外の効果として、 文字の強調や、 下線付けも可能です。 色付けや効果を行うための、 端末情報の取得には、 デフォルトでは terminfo データベースが使用されます。 terminfo が使用できない場合は、 ECMA-48 SGR 制御機能 (「ANSI エスケープコード」の別名) を使用します。

デフォルトの挙動は、 設定ファイルでの記述により上書きされます:

[color]
status.modified = blue bold underline red_background
status.added = green bold
status.removed = red bold blue_background
status.deleted = cyan bold underline
status.unknown = magenta bold underline
status.ignored = black bold

# 'none' 指定により効果が全て無効化されます
status.clean = none
status.copied = none

qseries.applied = blue bold underline
qseries.unapplied = black bold
qseries.missing = red bold

diff.diffline = bold
diff.extended = cyan bold
diff.file_a = red bold
diff.file_b = green bold
diff.hunk = magenta
diff.deleted = red
diff.inserted = green
diff.changed = white
diff.trailingwhitespace = bold red_background

resolve.unresolved = red bold
resolve.resolved = green bold

bookmarks.current = green

branches.active = none
branches.closed = black bold
branches.current = green
branches.inactive = none

tags.normal = green
tags.local = black bold

rebase.rebased = blue
rebase.remaining = red bold

shelve.age = cyan
shelve.newest = green bold
shelve.name = blue bold

histedit.remaining = red bold

terminfo 使用時に有効な効果は、 'blink' 'bold' 'dim' 'inverse' 'invisible' 'italic' 'standout' および 'underline' です。 ECMA-48 使用時に有効な効果は、 'bold' 'inverse' 'italic' および 'underline' です。 各指定が実際の表示に与える効果は、 端末の実装に依存します。 当該端末で無効な効果に関しては、 警告等を発せずに無視されます。

pager エクステンションでの less -R 使用と、 terminfo 使用の併用は、 稼動環境によっては、 色付けが正しく機能しない可能性があります。 less -R が ECMA-48 の色指定しか解釈しないことから、 less が解釈しない色指定制御が terminfo 使用時に除外される場合があるためです。 このような場合、 端末指定に ansi (または auto) を用いるか、 less -r (色指定以外の全ての端末制御が、 透過的に伝播されます) を使用することで、 状況が改善される可能性があります。

terminfo 使用の場合、 基本色定義が8色のみなので、 本エクステンションでは、 利用端末種別に応じて利用可能になる (であろう) 色スロットに対して、 色名称を定義することが可能です。例えば:

color.brightblue = 12
color.pink = 207
color.orange = 202

上記設定により、 'brightblue' という名前が、 色スロット 12 (16色端末で利用可能。 16色端末では、 明度の高い色が、 後半8色で定義) として、 また 'pink' および 'orange' という名前が、 256色 xterm の、 色立体中に定義されます。 色名に '_background' を付加することで、 背景色を指定可能な点もふくめて、 新規定義された色名称は、 事前定義された8色と同様に使えます。

本エクステンションは、 端末検出時のデフォルト端末設定として ANSI (Windows 環境の場合は win32) を使用します。 この自動判定機能は、 以下のような記述 (この例では、 terminfo 使用の強制) で上書きできます:

[color]
mode = terminfo

'ansi' 'win32' 'terminfo' または 'auto' 以外の値が指定された場合、 色付けは無効化されます。

コマンド

convert

他の構成管理ツールから Mercurial への履歴取り込み

コマンド

convert

別 SCM のリポジトリから Mercurial リポジトリへの変換:

hg convert [OPTION]... SOURCE [DEST [REVMAP]]

変換元として使用可能な形式は以下の通り [括弧内は識別名]:

  • Mercurial [hg]
  • CVS [cvs]
  • Darcs [darcs]
  • git [git]
  • Subversion [svn]
  • Monotone [mtn]
  • GNU Arch [gnuarch]
  • Bazaar [bzr]
  • Perforce [p4]

変換先として使用可能な形式は以下の通り [括弧内は識別名]:

  • Mercurial [hg]
  • Subversion [svn] (ブランチ上の履歴は維持されません)

リビジョン指定が無い場合、 全ての履歴が変換されます。 リビジョンが指定された場合は、 当該リビジョンまでが変換対象です。 (変換元形式にとって、 受理可能な形式で指定してください)

変換先ディレクトリ指定が無い場合、 変換元パス名の末尾要素に -hg を追加したものが使用されます。 変換先ディレクトリが存在しない場合、 新規作成されます。

特に指定の無い場合、 Mercurial 以外の変換元に対しては、 --branchsort が適用されます。 Mercurial 形式に対しては、 --sourcesort 適用により、 変換元のリビジョン番号が維持されます。 各並び替え指定には、 以下のような効果があります:

--branchsort 親から子への変換実施により、 各ブランチ毎に、 順次変換されます。 比較的コンパクトな変換結果になります。
--datesort 日付順で変換します。 変換結果のログの体裁は良いですが、 --branchsort 指定に対して、 変換結果が大きくなります。
--sourcesort 変換元のリビジョン順序を維持します。 変換元形式が Mercurial の場合のみサポートされます。
--closesort 閉鎖実施リビジョンを、 極力親ブランチ傍に移動します。 変換元形式が Mercurial の場合のみサポートされます。

REVMAP が指定されない場合、 既定の場所 (<変換先>/.hg/shamap) に書き出されます。 REVMAP ファイルの各行は、 変換元コミット毎に、 変換元と変換先での ID の対応関係 (「キー/値」の対で表現) を、 以下の形式で列挙したものになります:

<変換元での ID> <変換先での ID>

ファイルが存在しない場合、 自動的に作成されます。 このファイルは、 変換元コミットが変換先に格納される毎に、 更新されますので、 hg convert を中断した場合でも、 反復的に実行する場合でも、 新規のコミットのみが変換対象になります。

authormap は、 変換元と変換先の間で、 コミットのユーザ名を変換します。 UNIX 的なログイン名を、 認証に使用している SCM ツール (例: CVS) からの変換に便利です。 authormap ファイルの各行は、 以下の形式を持ち、 1行1ユーザ変換となります:

変換元ユーザ名 = 変換先ユーザ名

空行と # で始まる行は無視されます。

filemap ファイルは、 ファイルやディレクトリの要否や変換を指示します。 filemap ファイルの各行には、 以下の指示のいずれかを記述します:

include ファイルや/ディレクトリへの/パス

exclude ファイルや/ディレクトリへの/パス

rename 変換元/での/パス 変換先/での/パス

コメント行は # で始めます。 ファイルの相対パスと完全一致するか、 親ディレクトリと一致した場合に、 パスが合致したと判定されます。 includeexclude は、 最長合致した指示が選択されますので、 記述の順序は意味を持ちません。

ファイルやディレクトリが include 指定に合致した場合、 当該ファイルや、 ディレクトリ配下のファイルは、 変換対象になります。 include 指定がない場合、 全ファイルが変換対象です。 include 指定がある場合、 指定パターンに合致するファイル以外は、 変換対象から除外されます。 ファイルやディレクトリが exclude 指定に合致した場合、 それらは変換対象から除外されます。 変換対象ファイルが rename 指定に合致する場合、 ファイル名や、 ディレクトリ名が改名 (= 移動) されます。 サブディレクトリ配下から、 リポジトリルート直下に改名する場合、 改名先に . を使います。

splicemap ファイルは、 親リビジョン指定による履歴の合成 (synthesize) を指示します。 例えば、 Subversion におけるマージ実施リビジョンに、 2つの親を持たせるとか、 個別のリビジョン群を、 ひとまとまりにする、 といった場合に有用です。 splicemap ファイルの各行は、 キー、 空白文字、 1つまたは2つのカンマ区切りの値で構成されます:

キー 親1, 親2

キーには、 改変対象 (親リビジョンが改変されます) リビジョンの、 変換元における ID を指定します (.hg/shamap におけるキーと同一形式)。 値指定には、 変換後の当該リビジョンの、 親となるリビジョンの ID (変換元/変換先の、 いずれかにおける形式) を指定します。 例えば、 "release-1.0" ブランチから "trunk" へのマージ実施リビジョンが、 合成対象となる場合は、 第1親には "trunk" 上の、 第2親には "release-1.0" 上のリビジョンを指定します。

branchmap ファイルは、 変換元から (名前付き) ブランチを取り込む際に、 ブランチの改名を指示します。 splicemap ファイルと併用した場合、 最悪の管理状況にあるリポジトリから、 適切な構成の Mercurial リポジトリへの変換も可能とする、 強力な機能が発揮されます。 branchmap ファイルの各行は、 以下の形式で記述されます:

変換元ブランチ名 変換先ブランチ名

"変換元ブランチ名" が変換元リポジトリにおけるブランチ名で、 "変換先ブランチ名" が変換先リポジトリにおけるブランチ名です。 ブランチ名には、 空白文字を使用できません。 変換の使用例としては、 変換元の "default" ブランチから、 特定のリビジョンを、 名前付きブランチに移動するようなケースがあります。

Mercurial 形式からの変換

Mercurial 形式からの変換の場合、 コマンド行での --config 使用により、 以下のオプションを指定できます:

convert.hg.ignoreerrors:
 読み込みにおける整合性エラーを無視します。 Mercurial 形式から Mercurial 形式への変換の際に使用することで、 revlog に問題のあるリポジトリを復旧可能です。 デフォルト値は False
convert.hg.saverev:
 変換元におけるリビジョン ID の、 埋め込み要否を示す真偽値 (変換先でのリビジョン ID は、 確実に変更されます) (※ 訳注: ハッシュ値計算元となるデータが、 ID 埋め込みで変化するため)。 デフォルト値は False。
convert.hg.revs:
 変換元における変換対象リビジョンの revset 表記。
CVS 形式からの変換

CVS 形式からの変換での、 変換対象の起点となるリビジョンの指定では、 CVS リポジトリからのチェックアウトのような、 「サンドボックス」 (sandbox) が使用されます。 リポジトリ領域への直接アクセスは、 :local: なリポジトリ以外では、 必要ありません。 変換の際には、 サンドボックスの最上位ディレクトリから、 CVS リポジトリが検出され、 CVS rlog コマンドによって、 変換対象ファイルが検出されます。 そのため、 filemap ファイルの指定が無い限り、 起点ディレクトリ配下の、 全てのファイルが変換対象となりますし、 サンドボックス配下における、 ディレクトリの再編成は、 全て無視されます。

--config 使用により、 以下のオプションを指定できます:

convert.cvsps.cache:
 (試験およびデバッグ用) False 設定により、 リモートログのキャッシュを抑止します。 デフォルト値は True。
convert.cvsps.fuzz:
 同一ユーザ/コミットログのリビジョン検出の、 最大所要時間 (単位:秒)。 変換元において、非常に大量のファイルが、 同時にコミットされている場合、 デフォルト値 (60秒) では、 不十分な恐れがあります。
convert.cvsps.mergeto:
 コミットログに対する正規表現。 正規表現の合致が検出された場合、 ダミーのリビジョンを追加して、 合致リビジョンのブランチから、 正規表現が示すブランチへと、 マージを実施します。 デフォルト値は {{mergetobranch ([-\w]+)}}
convert.cvsps.mergefrom:
 コミットログに対する正規表現。 正規表現の合致が検出された場合、 正規表現が示すブランチに、 新規リビジョンを追加して、 合致リビジョンの第2親とします。 デフォルト値は {{mergefrombranch ([-\w]+)}}
convert.localtimezone:
 新規リビジョンの作成日時情報に、 実行環境の、 タイムゾーンを使用します (TZ 環境変数から推定)。 デフォルト値は False です (UTC として扱います)。
hooks.cvslog:CVS のログ収集処理後に呼ばれる Python 関数。 関数呼び出しの際には、 ログエントリの一覧が渡され、 一覧要素の改変や、 追加/削除を、 直接実施できます。
hooks.cvschangesets:
 CVS ログからのリビジョン算出完了後に呼ばれる Python 関数。 関数呼び出しの際には、 リビジョン一覧が渡され、 リビジョンの改変や、 追加/削除を、 直接実施できます。

付加的な "debugcvsps" Mercurial コマンドを使うことで、 変換処理抜きに、 内部のリビジョンマージ機能を実行できます。 引数や出力は、 cvsps 2.1 と互換性があります。 詳細はコマンドのヘルプ出力を参照してください。

Subversion 形式からの変換

Subversion 形式からの変換では、 伝統的な trunk/branches/tags 構造が検出されます。 特に指定が無い場合、 変換元 URL 指定の svn://repo/path/ は単一ブランチに変換されます。 svn://repo/path/trunk が存在する場合、 default ブランチには、 そちらの内容が格納されます。 svn://repo/path/branches が存在する場合、 サブディレクトリ群を、 ブランチ一覧候補とみなします。 svn://repo/path/tags が存在する場合、 変換後リビジョンを指す、 タグの特定に使用されます。 trunkbranches および tags の参照先は、 以下のオプションで上書き可能です。 これらの指定の際には、 変換元 URL に対する相対パスか、 空白 (= 自動検出抑止) を指定します。

--config 使用により、 以下のオプションを指定できます:

convert.svn.branches:
 ブランチを格納するディレクトリ。 デフォルト値は branches
convert.svn.tags:
 タグを格納するディレクトリ。 デフォルト値は tags
convert.svn.trunk:
 trunk ブランチのブランチ名。 デフォルト値は trunk
convert.localtimezone:
 新規リビジョンの作成日時情報に、 実行環境の、 タイムゾーンを使用します (TZ 環境変数から推定)。 デフォルト値は False です (UTC として扱います)。

全履歴変換の代わりに、 履歴変換の起点リビジョンを指定可能です。 単一ブランチ変換のみがサポートされます。

convert.svn.startrev:
 変換開始 Subversion リビジョン番号。 デフォルト値は 0。
Perforce 形式からの変換

Perforce (P4) 形式での取り込み元指定には、 p4 depot へのパスか、 クライアント仕様を指定します。 変換元の全てのファイルが、 平坦な Mercurial リポジトリに変換されます: ラベルやブランチ、 統合 (※ 訳注: "integration" は Mercurial で言うマージのこと?) は無視されます。 depot へのパス指定の場合、 変換先指定が無い場合、 変換先の名前が ...-hg になる点に注意してください。

初期 Perforce リビジョン指定により、 変換対象となるリビジョン総量を、 制限することが可能です:

convert.p4.startrev:
 初期 Perforce リビジョン (Perforce チェンジリスト番号)。.
Mercurial 形式への変換

以下のオプションを指定できます:

convert.hg.clonebranches:
 変換元ブランチ毎に変換先リポジトリを作成。 デフォルト値は False。
convert.hg.tagsbranch:
 タグ付けを実施するリビジョンのブランチ名。 デフォルト値は default
convert.hg.usebranchnames:
 変換元におけるブランチ名の維持の要否。 デフォルト値は True。

オプション:

--authors <ファイル>
 ユーザ名変換ファイルの指定 (非推奨: --authormap を使用してください)
-s, --source-type <種別>
 変換元リポジトリ種別
-d, --dest-type <種別>
 変換先のリポジトリ種別
-r, --rev <リビジョン>
 変換元の指定リビジョンまでの取り込み
-A, --authormap <ファイル>
 変換時のユーザ名変換用ファイル
--filemap <ファイル>
 変換時のファイル名変換用ファイル
--splicemap <ファイル>
 継ぎ合わせによる履歴の合成
--branchmap <ファイル>
 変換時のブランチ名変換用ファイル
--branchsort ブランチによるリビジョンの並び替え
--datesort 日付によるリビジョンの並び替え
--sourcesort 元リポジトリでのリビジョン順を尊重
--closesort 閉鎖実施リビジョン群の並び替え

eol

管理対象ファイルにおける改行形式の自動管理

本エクステンションは、 リポジトリおよび作業領域中のファイルにおける、 改行形式 (CRLF または LF) を管理するためのエクステンションです。 Windows 環境では CRLF 形式、 Unix/Mac 環境では LF 形式と言う様に、 各 OS 固有の改行形式を使用することが可能になります。

本エクステンションは、 作業領域のルート直下のファイル .hgeol (構成管理可能) から設定を読み込みます。 .hgeol ファイルの文法は、 他の Mercurial 設定ファイルと同じです。 本設定ファイルでは、 [patterns][repository] の2つのセクションを記述可能です。

[patterns] セクションは、 作業領域とリポジトリ記録の間における、 改行変換方法に関して記述します。 ファイルパターン形式で記述します。 先に合致したパターンが採用されますので、 より特徴的なパターンほど、 より先頭で記述してください。 指定可能な改行形式は LFCRLF および BIN です。

CRLF または LF が指定されたファイルは、 作業領域への取り出しや、 リポジトリへの格納の際に、 指定の改行形式に変換されますが、 バイナリ (BIN) 指定されたファイルは、 改行変換されません。 これらに加えて、 実行環境固有の改行形式の使用を意味する native も使用可能です: Unix (Mac OS X 含む) 環境では LF、 Windows 環境では CRLFBIN (改行変換無し) は、 Mercurial のデフォルトの挙動です: 一般的なパターン指定に、 意図せず合致してしまうのを回避したい場合に、 当該パターンよりも先に合致させる場合にのみ有用です。

[repository] セクションは付加的なもので、 リポジトリ格納の際の、 改行形式を指定します。 記述可能な設定は native のみで、 [patterns] セクションにおいて native 指定されたファイルを、 履歴に記録する際の改行形式を指定します。 指定可能な値は LF または CRLF です。 無指定時は LF とみなされます。 例えば Windows 上で native (デフォルト設定は CRLF) 指定されたファイルは、 改行形式が LF に変換された上で、 履歴に記録されます。 [patterns] セクションにおいて LFCRLF または BIN が指定されたファイルは、 そのままの改行形式で履歴に記録されます。

.hgeol ファイルの記述例:

[patterns]
**.py = native
**.vcproj = CRLF
**.txt = native
Makefile = LF
**.jpg = BIN

[repository]
native = LF

Note

変換設定の適用契機は、 作業領域中のファイルに対する最初の更新です。 例えば、 hg update null 後の hg update tip により、 全てのファイルが更新されます。

本エクステンションは、 通常の Mercurial 設定ファイルと .hgeol の両方から、 付加的な [eol] セクションを読み込みますが、 後者の設定が前者に優先します。 本セクションは全般的な挙動を制御します。 記述可能な設定は以下の3種類です:

  • eol.native (無指定時は os.linesep と同値) には、 LF または CRLF が指定可能で、 native 指定ファイルの作業領域取り出しを、 どの改行形式で実施するかを指定します。 hg archive 実施の際に、 この設定を行うことで、 Unix 上で生成したアーカイブに、 Windows の改行形式を持つファイルを格納することが可能です。
  • eol.only-consistent (無指定時は True) の False 設定により、 本エクステンションに、 不整合な改行形式を許容させることが可能です。 「不整合」とは、 CRLFLF の両方の改行形式を持つ行が、 同一ファイル中に混在していることを意味します。 このような改行形式は、 特定用途向けの意図的なものという仮定の元で、 改行形式の変換対象からは、 除外するのが一般的です。
  • eol.fix-trailing-newline (無指定時は False) の True 設定により、 改行形式変換後のファイルの末尾が、 改行 (設定に応じて \n または \r\n) で終了することが保証されます。

本エクステンションは、 非推奨の win32text エクステンションと同様に、 cleverencode: および cleverdecode: フィルタを提供しています。 そのため、 win32text の無効化と eol の有効化を行っても、 既存のフィルタ設定は機能し続けます。 既存のフィルタ設定が必要なのは、 .hgeol 設定を記述するまでです。

win32text エクステンションによる win32text.forbid* フック群は、 単一の eol.checkheadshook フックに統合されました。 このフックは、 期待する改行形式を .hgeol から特定しますので、 フック使用の際には、 まずは .hgeol 利用へと移行する必要があります。 eol.checkheadshook が確認するのは、 ヘッド (head) リビジョンのみで、 それ以外のリビジョンは、 改行形式が不正でも無視されます。 全てのリビジョンにおいて、 不正な改行形式を禁止したい場合は eol.checkallhook を使用します。 これらのフックは pretxnchangegroup フックとしての使用を想定しています。

パターン合致に関する詳細は hg help patterns を参照してください。

extdiff

リビジョン間差分表示での外部コマンドの利用

本エクステンションは、 リビジョン間、 またはリビジョンと作業領域の間で、 差分表示を行う際に、 外部コマンドを利用可能にします。 外部コマンドは、 設定で変更可能なオプション群と、 2つの引数 (比較対象ファイルを格納した、 スナップショットディレクトリへのパス) を使って起動されます。

本エクステンションでは、 差分コマンドを定義可能なので、 実行の都度、 hg extdiff -p kdiff3 のような指定をする必要ありません:

[extdiff]
# 'context diff' モードで GNU diff(1) を起動する設定を追加
cdiff = gdiff -Nprc5
## 旧来の方式での設定:
#cmd.cdiff = gdiff
#opts.cdiff = -Nprc5

# kdiff3 を起動する vdiff 設定の追加
vdiff = kdiff3

# meld を起動する設定の追加 (同名の場合は設定右辺を省略可能)
meld =

# DirDiff (http://www.vim.org/scripts/script.php?script_id=102 参照)
# プラグイン併用の gvimdiff を 起動する vimdiff 設定の追加。
# 非英語圏の利用者は、 .vimrc 設定ファイルにおける
# "let g:DirDiffDynamicDiffText = 1" 指定が必要。
vimdiff = gvim -f "+next" \
          "+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))"

外部コマンドへの引数には、 実行時に置換される変数を指定できます:

$parent1, $plabel1 - 第1親リビジョンのファイル名と説明文字列
$child,   $clabel  - 子リビジョンのファイル名と説明文字列
$parent2, $plabel2 - 第2親リビジョンのファイル名と説明文字列
$root              - リポジトリのルート
$parent1 の別名として $parent も使用可能

差分表示の外部コマンドへの引数設定が [extdiff] セクションに無い場合、 本エクステンションは [diff-tools] および [merge-tools] の設定を参照します。

[extdiff]
kdiff3 =

[diff-tools]
kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child

通常の hg diff 実行と同様に、 -I/-X、 およびファイル名、 ディレクトリ名の指定が可能です。 この場合、 本エクステンションは、 差分表示に必要な分だけ、 スナップショットを作成しますので、 外部の差分表示コマンドの実行は、 ある程度高速化されます (少なくとも、 リポジトリ全体に対する差分表示よりは、 確実に早い筈です)。

コマンド

extdiff

外部コマンドを使用したリポジトリ(または指定ファイル)の差分表示:

hg extdiff [OPT]... [FILE]...

指定ファイルのリビジョン間差分を、 外部コマンドを使って表示します。 特に指定が無い場合、 外部プログラムには、"-Npru" オプション付きの "diff" コマンドが使用されます。

外部プログラムを変更する場合は、 -p/--program で指定します。 外部プログラム起動時には、 比較対象のディレクトリが2つ指定されます。 付加的なオプションが必要な場合は、 -o/--option で指定します。 外部プログラムの起動引数としては、 オプション指定の方が、 比較対象ディレクトリよりも先に指定されます。

リビジョンが2つ指定された場合、 指定リビジョン間の差分が表示されます。 リビジョンが1つ指定された場合、 作業領域との間の差分が表示されます。 リビジョンが指定されない場合、 作業領域と親との差分が表示されます。

オプション:

-p, --program <コマンド>
 差分表示プログラム
-o, --option <オプション[+]>
 差分表示プログラムへのオプション指定
-r, --rev <リビジョン[+]>
 リビジョン
-c, --change <リビジョン>
 当該リビジョンにおける変更内容の表示
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

factotum

factotum での http 認証

本エクステンションは、 ベル研の Plan 9 環境における factotum(4) 機能を、 HTTP アクセスでの認証情報取得で、 利用できるようにします。 連携対象の URL 中の認証情報同様に、 設定ファイルの auth セクションにおける設定も、 サポート対象です。 設定において、 値が指定されない場合は、 * 指定とみなされます。

デフォルトでは、 キーの指定は以下のように行います:

proto=pass service=hg prefix=<prefix> user=<username> !password=<password>

必要なキーを読み込めない場合、 factotum エクステンションは、 対話的なキーの要求を行います。

実行時の挙動は、 設定によって変更可能です。 デフォルトの設定は、 以下のようになっています:

[factotum]
executable = /bin/auth/factotum
mountpoint = /mnt/factotum
service = hg

executable 設定は、 factotum バイナリへのフルパスを指定します。 mountpoint 設定は、 factotum ファイルサービスを指定します。 service 設定は、 キーの読み込みに使用するサービス名を制御します。

fetch

pull, update, merge の一括実行 (非推奨)

コマンド

fetch

連携先リポジトリからの取り込みと、 必要に応じたマージ実施:

hg fetch [SOURCE]

指定のパス/URL が指すリポジトリから、 手元のリポジトリに対して、 全ての変更を取り込みます。

変更取り込みによって、 新規のブランチヘッドが生成される場合、 ヘッドのマージと、 マージ結果のコミットが、 自動的に実行されます。 それ以外の場合は、 作業領域が最新のリビジョンに更新されます。

マージの必要がある場合、 取り込まれた変更による作業領域の更新が、 最初に実施されます。 次に、 手元の変更が作業領域にマージされます。 マージの順序を変更する場合は、 --switch-parent を指定します。

-d/--date での日時表記は hg help dates を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン[+]>
 取り込み対象リビジョンの指定
-e, --edit コミットログの編集
--force-editor コミットログの編集(非推奨)
--switch-parent
 マージの際の第1親リビジョンを切り替え
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

gpg

リビジョンへの署名および検証コマンド

コマンド

sigcheck

特定リビジョンに関する全署名の検証:

hg sigcheck REV

特定リビジョンに関する全署名の検証

sign

指定リビジョンへの署名の付与:

hg sign [OPTION]... [REV]...

リビジョンが指定されない場合、 作業領域の親リビジョンが、 親リビジョンが null の場合は tip が対象になります。

-d/--date での日時表記は hg help dates を参照してください。

オプション:

-l, --local 自リポジトリローカルな署名
-f, --force 署名ファイルが変更されていても署名を実施
--no-commit 署名後の署名ファイルのコミットを抑止
-k, --key <ID> 署名に使用する鍵ID
-m, --message <テキスト>
 コミットログ
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録

sigs

署名済みリビジョンの一覧表示:

hg sigs

署名済みリビジョンの一覧表示

graphlog

端末での履歴ツリー表示のコマンド (非推奨)

本エクステンションの機能は Mercurial 2.3 から標準機能になりました。

本エクステンションは、 incoming, outgoing および log コマンドに、 新規オプション --graph を付与します。 --graph 指定により、 ASCII 文字による履歴ツリーが表示されます。

コマンド

glog

ASCII 文字による履歴ツリー併用の履歴表示:

hg glog [OPTION]... [FILE]

ASCII 文字による履歴ツリー併用の変更履歴を表示します。

@ 文字で表示されるリビジョンは、 作業領域の親リビジョンです。

オプション:

-f, --follow 複製元や改名元の履歴も遡る
--follow-first マージの際には第1親のみを遡る (非推奨)
-d, --date <日時>
 指定日時に合致するリビジョンを表示
-C, --copies 複製されたファイルを表示
-k, --keyword <テキスト[+]>
 指定キーワードによる検索(大文字小文字は無視)
-r, --rev <リビジョン[+]>
 指定された単一、 またはリビジョン区間の表示
--removed ファイルが登録除外されたリビジョンを含める
-m, --only-merges
 マージ実施リビジョンのみを表示 (非推奨)
-u, --user <ユーザ[+]>
 当該ユーザによるリビジョンを表示
--only-branch <ブランチ[+]>
 指定の名前付きブランチに属するリビジョンを表示 (非推奨)
-b, --branch <ブランチ[+]>
 指定の名前付きブランチに属するリビジョンを表示
-P, --prune <リビジョン[+]>
 当該リビジョンとその祖先の表示を抑止
-p, --patch パッチ形式での表示
-g, --git git 拡張差分形式の使用
-l, --limit <数値>
 最大表示リビジョン数
-M, --no-merges
 マージ実施リビジョンの表示抑止
--stat diffstat 形式の変更概要を出力
-G, --graph 履歴ツリーの表示
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

hgcia

CIA.vc 通知サービスとの統合向けのフック集

changegroup または incoming フックとしての実行を想定しています。 以下のような設定を、 Mercurial 設定ファイルに記述してください:

[cia]
# CIA の登録ユーザ名
user = foo
# CIA におけるプロジェクト名
project = foo
# モジュール (副プロジェクト) (省略可能)
#module = foo
# ログメッセージへの diffstat の追加 (省略可能)
#diffstat = False
# ログメッセージ用テンプレート指定 (省略可能)
#template = {desc}\n{baseurl}{webroot}/rev/{node}-- {diffstat}
# スタイル指定 (省略可能)
#style = foo
# CIA 通知サービスの URL (省略可能)
# 電子メールで通知する場合、 以下のような mailto: URL を使用可能
# mailto:cia@cia.vc
# 電子メール使用の際には email.from 設定が必須。
#url = http://cia.vc/
# メッセージを送信せずに表示 (省略可能)
#test = False
# URL パスから取り除くスラッシュ数
#strip = 0

[hooks]
# 以下のいずれか:
changegroup.cia = python:hgcia.hook
#incoming.cia = python:hgcia.hook

[web]
# ハイパーリンクが必要な場合 (省略可能)
baseurl = http://server/path/to/repo

hgk

グラフィカルな UI によるリポジトリ参照

本エクステンションは、 GUI による履歴の参照を可能にします。 利用に当たっては、 8.4 以降の Tcl/Tk が必要です (Tcl/Tk は Mercurial には同梱されていません)

本エクステンション (hgk) は、 2つの部位から構成されます: 情報の表示/入力用の Tcl スクリプト部と、 Mercurial からの情報入手フックを定義する、 Mercurial エクステンションとしての hgk.py スクリプトです。 Tcl スクリプト部 (hgk) は contrib ディレクトリ配下に、 エクステンション部 (hgk.py) は hgext ディレクトリ配下に格納されており、 使用に当たっては、 エクステンションの有効化が必要です。

hg view コマンドにより、 hgk の Tcl スクリプトが起動されます。 実行の際には、 コマンド検索パス上に hgk スクリプトがなければなりません。 あるいは、 設定ファイルにおいて、 hgk へのパスを指定することも可能です:

[hgk]
path=/location/of/hgk

extdiff エクステンションの併用で、 差分をグラフィカルに表示できます。 extdiff で vdiff コマンドが設定されている場合、 以下の記述を追加します:

[hgk]
vdiff=vdiff

上記設定により、 リビジョンのコンテキストメニューには、 対象リビジョンと、 指定したリビジョンに対して、 vdiff を起動する項目が追加されます。

コマンド

view

対話的な履歴参照の開始:

hg view [-l LIMIT] [REVRANGE]

対話的な履歴参照の開始

オプション:

-l, --limit <数値>
 最大表示リビジョン数

highlight

hgweb におけるシンタックスハイライト (要 Pygments)

本エクステンションには、 シンタックスハイライトライブラリの Pygments が必要です: http://pygments.org/

本エクステンションに対しては、以下の設定のみが可能です:

[web]
pygments_style = <style>

無指定時の設定は 'colorful' とみなされます。

histedit

対話的な履歴改変

本エクステンションの有効化により histedit コマンドが利用可能になります。 以降の説明では、 以下の履歴を前提としています:

@  3[tip]   7c2fd3b9020c   2009-04-27 18:04 -0500   durin42
|    Add delta
|
o  2   030b686bedc4   2009-04-27 18:04 -0500   durin42
|    Add gamma
|
o  1   c561b4e977df   2009-04-27 18:04 -0500   durin42
|    Add beta
|
o  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42
     Add alpha

hg histedit c561b4e977df 実行により、 エディタが起動された上で、 以下の内容のファイルが開かれます:

pick c561b4e977df Add beta
pick 030b686bedc4 Add gamma
pick 7c2fd3b9020c Add delta

# c561b4e977df から 7c2fd3b9020c にかけての履歴の編集
#
# 対象一覧は、リビジョン番号の昇順 (古い方から新しい方) になっています。
#
# 指定可能コマンド:
#  p, pick = リビジョンを採用
#  e, edit = リビジョンを採用: 但し修正のために一旦実行を中断
#  f, fold = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合
#  d, drop = リビジョンを破棄
#  m, mess = 変更内容を維持しつつ、コミットログを修正
#

このファイル中の # で始まる行は無視されます。 履歴編集対象に対して、 各リビジョン毎の処理内容 (rule) を指定してください。 例えば "Add beta" による変更よりも "Add gamma" による変更を先に実施した上で、 "Add delta" による変更を "Add beta" へと併合 (fold) する場合なら、 以下のように記述します:

pick 030b686bedc4 Add gamma
pick c561b4e977df Add beta
fold 7c2fd3b9020c Add delta

# c561b4e977df から 7c2fd3b9020c にかけての履歴の編集
#
# 対象一覧は、リビジョン番号の昇順 (古い方から新しい方) になっています。
#
# 指定可能コマンド:
#  p, pick = リビジョンを採用
#  e, edit = リビジョンを採用: 但し修正のために一旦実行を中断
#  f, fold = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合
#  d, drop = リビジョンを破棄
#  m, mess = 変更内容を維持しつつ、コミットログを修正
#

histedit の実際の処理は、 エディタを終了させた時点から始まります。 fold 操作を指定した場合、 併合後リビジョンのコミットログ入力のために、 併合対象と併合先の各コミットログを、 以下の様に結合したファイルを、 histedit がエディタで開きます:

Add beta
***
Add delta

コミットログの編集を終えたなら、 エディタを終了します。 ここでは、 コミットログを Add beta and delta. に変更したものと仮定します。 histedit による改変処理が完了すると、 以下の様な履歴になります:

@  2[tip]   989b4d060121   2009-04-27 18:04 -0500   durin42
|    Add beta and delta.
|
o  1   081603921c3f   2009-04-27 18:04 -0500   durin42
|    Add gamma
|
o  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42
     Add alpha

histedit の履歴改変処理では、 改変処理が完了するまでは、(例えそれが、 作業用の一時的なものであっても) 履歴が削除されることはありませんので、 処理終了直前には、 おそらく複数のリビジョンの破棄が行われます。 上記の例の場合、 2回の履歴破棄が行われる筈です。 履歴破棄の実行速度は、 様々な要因が元で低下し得ますので、 多少の我慢が必要になるかもしれません。 --keep を指定することで、 履歴の破棄を抑止可能です。

edit 操作を指定した場合、 一旦コマンド入力に戻りますので、 ファイル内容の編集や、 hg record による選択的な変更の取り込みなどを、 自由に行ってください。 変更作業が完了したなら、 hg histedit --continue を実行することで、 作業領域中の変更内容が、 変更後リビジョンとして、 コミットされます。 この際に、 コミットログの問い合わせがありますが、 デフォルト値は edit 対処リビジョンの、 元々のコミットログの内容です。

message 操作は、 対象リビジョンでの変更内容はそのままに、 コミットログのみを変更します。 これは edit 操作を指定した上で、 コマンド入力に戻ってすぐに hg histedit --continue を実施するのと、 全く同じ挙動となります。

履歴改変による衝突が histedit によって (pickfold 操作において) 検出された場合に、 一旦コマンド入力に戻る点は edit 操作と同じですが、 衝突解消作業が完了して hg histedit --continue を実行しても、 コミットログの問い合わせが無い点は edit と異なります。 この時点で、 履歴改変に伴う作業量の問題や、 間違いに気付いた場合は、 hg histedit --abort 実行によって、 これまでの作業成果が破棄され、 履歴は改変前の状態に戻ります。

改変済みの実行例リポジトリを複製し、 そこで履歴を4つ追加した結果、 以下の様な履歴になったものと仮定します:

@  6[tip]   038383181893   2009-04-27 18:04 -0500   stefan
|    Add theta
|
o  5   140988835471   2009-04-27 18:04 -0500   stefan
|    Add eta
|
o  4   122930637314   2009-04-27 18:04 -0500   stefan
|    Add zeta
|
o  3   836302820282   2009-04-27 18:04 -0500   stefan
|    Add epsilon
|
o  2   989b4d060121   2009-04-27 18:04 -0500   durin42
|    Add beta and delta.
|
o  1   081603921c3f   2009-04-27 18:04 -0500   durin42
|    Add gamma
|
o  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42
     Add alpha

複製『先』のリポジトリで hg histedit --outgoing を実行した場合、 hg histedit 836302820282 実行と同じ結果となります。 Mercurial が、 連携先リポジトリとの関連性を、 検出できない場合でも、 --force を指定することで、 元リポジトリとの関連ありとみなすことができます。

コマンド

histedit

対話的な履歴の改変:

hg histedit ANCESTOR | --outgoing [URL]

本コマンドは、 作業領域の親リビジョンと、指定した祖先 (ANCESTOR) との間のリビジョン群を改変します。

--outgoing 指定のある場合、 連携先リポジトリへの反映候補リビジョンが、 改変対象として選択されます。 連携先 URL が省略された場合、 'default-push' (または 'default') 指定のパスが参照されます。

反映候補リビジョンが、 利用者にとって紛らわしい場合、 安全性の点から、 履歴改変は中止されます。 紛らわしい例としては、 反映候補リビジョンが、 複数のブランチ上に存在するケースなどがあります。

紛らわしさのために --outgoing が使用できない場合、 "min(outgoing() and ::.)" または同等の revset 表記を使って、 改変対象リビジョンを、 厳密に指定してください。 リビジョン指定の詳細は hg help revsets を参照してください。

成功時のコマンド終了値は 0、 ユーザによる作業 ("edit" 指定による、 意図的なもの以外に、 予期せぬ衝突発生時も含みます) が必要な場合は 1 です。

オプション:

--commands <値> 履歴改変手順を指定ファイルから読み込み
-c, --continue 中断された未完了の履歴改変を再開
-k, --keep 改変元の履歴を改変完了後も保持
--abort 未完了の履歴改変を中止
-o, --outgoing 連携先リポジトリに含まれないリビジョンを選択
-f, --force 連携先が無関係なリポジトリでも比較を実施
-r, --rev <値[+]>
 改変対象の最初のリビジョン

[+] 印付きのオプションは複数回指定可能です

keyword

構成管理対象ファイル中のキーワード展開

本エクステンションは、 構成管理対象ファイル中の RCS/CVS 的 (カスタマイズ可能)な $Keywords$ を、 設定ファイルでの記述に従い 展開します。

キーワード展開は作業領域でのみ行われ、 履歴には残りません。 この仕組みは現行ユーザやアーカイブ配布者に配慮しています。

作業領域の各ファイルに対する直近の変更内容を使用して、 キーワードの展開が行われます

設定は、 設定ファイル中の [keyword] [keywordset] および [keywordmaps] セクションに記述します。

記述例:

[keyword]
# "x*" に合致「しない」 python ファイルでのみキーワード展開
**.py =
x*    = ignore

[keywordset]
# CVS 的なキーワード展開よりも SVN 的なものを選択
svn = True

Note

ファイル名パターンが更に特殊になる場合、 リポジトリサイズ次第では、 実行性能が低下する可能性があります。

[keywordmaps] でのテンプレート設定の展開を実演するには、 hg kwdemo を実行します。 使用可能なテンプレートやフィルタに関しては hg help templates を参照してください。

テンプレートでの日時用フィルタが 3 つ追加されます:

utcdate:"2006/09/18 15:13:13"
svnutcdate:"2006-09-18 15:13:13Z"
svnisodate:"2006-09-18 08:13:13 -700 (Mon, 18 Sep 2006)"

無指定時のテンプレート設定 (hg kwdemo -d で閲覧可能) は、 キーワード及びテンプレートのカスタマイズで、 置き換えることが可能です。 繰り返しますが、 設定変更の確認は hg kwdemo で行うことができます。

展開済みキーワードの、 意図せぬ履歴への記録を防ぐために、 キーワード展開の設定変更/無効化の前には、 必ず hg kwshrink を実行してください。

キーワードの設定変更/有効化後に、 強制的に展開する場合は hg kwexpand を実行してください。

複数行に渡る展開や、 CVS の $Log$ のような増加する内容の展開は 未サポートです。 キーワードテンプレート設定 "Log = {desc}" は、 コミットログの最初の一行を埋め込みます。

コマンド

kwdemo

[keywordmaps] での設定内容および展開例の表示:

hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...

現時点、 固有またはデフォルトのキーワードテンプレートマップ、 およびその展開例を表示します。

引数でのマップ指定や、 -f/--rcfile 指定による外部設定ファイルからの 読み込みにより、 現時点での設定を拡張することができます。

-d/--default 指定により、 現時点のキーワードテンプレート設定を 一時的に無効化することもできます。

テンプレートやフィルタ機能に関しては hg help templates を参照してください。

オプション:

-d, --default デフォルトのテンプレートマップで表示
-f, --rcfile <ファイル>
 設定ファイルからのマップ設定の読み込み

kwexpand

作業領域におけるキーワードの展開:

hg kwexpand [OPTION]... [FILE]...

キーワード埋め込みが(再)有効化されてから実行してください。

指定されたファイルの変更が未コミットの場合、 実行は中止されます。

オプション:

-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

kwfiles

キーワード展開対象ファイルの表示:

hg kwfiles [OPTION]... [FILE]...

作業領域中のファイルで、 [keyword] 設定でのパターンに合致する ファイルの一覧を表示します。

予期せぬキーワード展開の防止と、 実行性能向上のために、 実際の 埋め込み対象となるファイルのみを設定することをお勧めします。

パターン合致に関する詳細は、 hg help keyword を参照してください。

-a/--all および -v/--verbose 指定のある場合、 各ファイルの状況は 以下の記号で表現されます:

K = キーワード展開候補
k = キーワード展開候補(構成管理対象外)
I = 無視
i = 無視(構成管理対象外)

オプション:

-A, --all 全ファイルのキーワード展開設定を表示
-i, --ignore キーワード展開対象外のファイルを表示
-u, --unknown 構成管理対象外のファイルを表示
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

kwshrink

作業領域中のキーワード展開の取り消し:

hg kwshrink [OPTION]... [FILE]...

キーワード展開の設定変更/無効化の前に、 必ず実施してください。

指定されたファイルの変更が未コミットの場合、 実行は中止されます。

オプション:

-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

largefiles

大容量バイナリファイルの管理

大容量バイナリファイルの取り扱いは、 圧縮、 差分取得、 マージの点で、 非常に難しいです。 バイナリ差分の圧縮をベースにした Mercurial の格納形式 (revlog 形式) でそのようなファイルを扱うのは、 効率が良くありません: 大容量バイナリファイルを、 通常ファイルと同様に格納した場合、 転送帯域や、ディスク/メモリの消費量を増加させてしまいます。 largefiles エクステンションは、 Mercurial の仕組みの上に、 クライアント/ サーバ的な、 中央集約的な機能を追加することで、 この問題に対処します: 大容量ファイルは、 ネットワーク上の 中央格納領域 で保持され、 リビジョン参照時に必要となった時点で、 必要な版だけが取得されます。 (※ 訳注: 「中央格納領域」 (central store) は、 ネットワーク上に1つだけ、 と限定されているわけではありません。 通常の Mercurial リポジトリ同様、 同一の大容量バイナリファイルを、 複数の場所に格納させることも可能です。 「中央」というのは、 あくまで説明の便宜上の表現に過ぎません)

largefiles エクステンションは、 各大容量ファイル毎の "代理ファイル" (standin file) を、 .hglf/ 配下で管理することで機能を実現しています。 代理ファイルは、 Mercurial 管理下に置かれた、 小容量 (41 バイト: SHA-1 と改行文字) のファイルです。 大容量ファイルの内容から算出された SHA-1 ハッシュ値が代理ファイルに書き出され、 ファイル自身のリビジョン識別には、 このハッシュ値が使用されます。 largefiles エクステンションが、 中央格納領域との間で、 大容量ファイルの授受を行う場合、 ID として、 このハッシュ値が使用されます。 この方式では、 リポジトリの複製や、 履歴の取り込みの際に、 大容量ファイルに関しては、 履歴の全てを取得せずに済むため、 転送帯域やディスクの消費が低減されます。

新規に大容量ファイルを追加登録する場合は、 以下の例のように、hg add に対して --large を指定します:

$ dd if=/dev/urandom of=randomdata count=2000
$ hg add --large randomdata
$ hg commit -m '大容量ファイルとして乱数データを追加'

連携先リポジトリに反映しようとするリビジョンが、 大容量ファイルに対して、 追加/変更を実施している場合、 該当するリビジョンの大容量ファイルが、 連携先に転送されます。 この際、 連携先リポジトリで稼動する Mercurial は、 largefiles エクステンションが有効になっていなければなりません。

連携先から取り込むリビジョンが、 大容量ファイルに関するものであっても、 特に指定が無ければ、 大容量ファイルはダウンロードされません。 その一方で、 大容量ファイルに関係するリビジョンで、 作業領域を更新しようとした場合、 必要とされる (且つ未取得な) 大容量ファイルのダウンロードと、 キャッシュ領域への格納が実施されます。 履歴取り込みと同時に、 大容量ファイルを取得する方法としては、 作業領域を最新リビジョンで更新する --update を、 履歴取り込みの際に指定する方法があります。

作業領域更新では必要とされない大容量ファイルも取得したい場合は、 履歴取り込みの際に --lfrev を指定するか、 hg lfpull を使用します。

リビジョン取り込みの際に、 関連する全大容量ファイルを取得したい場合は、 --lfrev "pulled()" を指定してください。

取得対象大容量ファイルを、 取り込まれた新規ヘッドリビジョンのマージや移動 (rebase) に必要なものだけに限定したい場合は、 --lfrev "head(pulled())" を指定してください。

関連する大容量ファイルが未取得な場合は、 作業領域更新であっても、 ネットワークアクセスが必要になるかもしれない点に留意してください。 largefiles エクステンション使用時には、 作業領域更新操作であっても、 作業中のリポジトリに閉じた操作ではない可能性があるのです。

largefiles エクステンション無しで、 大容量ファイルを、 既に Mercurial で構成管理している場合、 largefiles の恩恵を受けるためには、 リポジトリの変換が必要です。 変換は hg lfconvert コマンドで実施します:

$ hg lfconvert --size 10 旧リポジトリ 変換後リポジトリ

既に大容量ファイルを管理しているリポジトリでは、 ファイルサイズが 10MB 以上のファイルの追加登録は、 自動的に大容量ファイルとみなされます。 この閾値は、 大容量ファイルとみなす最小のサイズ (単位: MB) を、 Mercurial の設定ファイルにおいて largefiles.minsize に設定するか、 hg add に対して --lfsize で指定することで、 変更できます。:

[largefiles]
minsize = 2

$ hg add --lfsize 2

largefiles.patterns を指定することで、 特定パターンのファイル名 (hg help patterns 参照) を、 常に大容量ファイルとみなせます:

[largefiles]
patterns =
  *.jpg
  re:.*\.(png|bmp)$
  library.zip
  content/audio/*

パターンに合致したファイルを追加登録する際には、サイズに関わりなく、 大容量ファイルとみなされます。

管理下に大容量ファイルが1つも無いリポジトリでは、 largefiles.minsize および largefiles.patterns の設定は無視されます。 そのため、 最初の大容量ファイルを追加登録する際には、 hg add に明示的に --large を指定する必要があります。

コマンド

lfconvert

既存リポジトリから largefiles を利用するリポジトリへの変換:

hg lfconvert SOURCE DEST [FILE ...]

リポジトリ SOURCE を変換し、 新規リポジトリ DEST を生成します。 SOURCE に対する DEST の違いは、 指定パターンへの名前の合致、 または、 指定閾値以上のサイズのファイルが、 大容量ファイル扱いになっている、 という点です。 大容量ファイル扱いの要否判定に使用するサイズ値には、 各ファイルが最初に登録された時点のサイズが使用されます。 サイズ閾値の指定は、 --size か、 largefiles.size 設定によって行います。

このコマンドの実施後は、 変換後リポジトリの連携先リポジトリでも、 largefiles エクステンションが有効になっている事を確認してください。

largefiles エクステンションを使用しないリポジトリへの変換には、 --to-normal を指定します。 変換後リポジトリは、 largefiles エクステンション無しでも使用できます。

オプション:

-s, --size <SIZE>
 大容量ファイル化するファイルの最小サイズ (MB)
--to-normal 大容量ファイル使用リポジトリから通常リポジトリへの変換

lfpull

指定リビジョンに関連する大容量ファイルの取り込み:

hg lfpull -r REV... [-e CMD] [--remotecmd CMD] [SOURCE]

作業中リポジトリ中にある指定リビジョンに関連する大容量ファイルのうち、 未取得のものを取り込み、 キャッシュ領域に保存します。

連携先が省略された場合、 'default' パスが連携先として使用されます。 詳細は hg help urls を参照してください。

例:

  • 全名前付きブランチのヘッドに関連する大容量ファイルを取得:

    hg lfpull -r "head() and not closed()"
    
  • default ブランチのリビジョンに関連する大容量ファイルを取得:

    hg lfpull -r "branch(default)"
    

オプション:

-r, --rev <値[+]>
 指定リビジョンに関連する大容量ファイルを入手
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

mq

パッチ併用の管理

本エクステンションは、 Mercurial リポジトリの作業領域において、 パッチを 併用した作業を可能にします。 本エクステンションでは、 「既知のパッチ」と 「適用中のパッチ」(「既知のパッチ」の部分集合)の2つの集合を、 スタック を用いて管理します。

「既知のパッチ」は、 .hg/patches ディレクトリ配下に置かれたパッチファイル に相当します。 「適用中のパッチ」は、 「既知のパッチ」のうち、 対応する リビジョンがリポジトリの履歴に(一時的に)記録されているものを指します。

良く使用される機能 (詳細は hg help コマンド名 を参照):

新規パッチの作成                       qnew
外部からのパッチファイルの取り込み     qimport

既知のパッチ一覧の表示                 qseries
適用中のパッチ一覧の表示               qapplied

既知のパッチの適用                     qpush
パッチ適用の解除                       qpop
適用中の最上位パッチの内容更新         qrefresh

ファイルモードの変更や、 複製履歴、 バイナリファイルや空ファイルの生成 /削除等の情報を維持するために、 mq は必要に応じて git 形式のパッチを 自動的に使用することができます。 この振る舞いは以下の指定で制御します:

[mq]
git = auto/keep/yes/no

'keep' が指定された場合、 既存の qrefresh 対象となるパッチが git 形式 パッチである間は、 MQ は [diff] セクションの設定に従います。 'yes' または 'no' が指定された場合、 MQ は [diff] セクションの設定を無視 して、 git パッチまたは通常パッチを生成します。 通常パッチを生成する場合、 情報が失われる可能性があります。

以下のように設定することで、 MQ 管理下のリビジョンのフェーズ (hg help phases 参照) を secret に維持することが可能です:

[mq]
secret = True

通常は "patches" という名前のキュー配下で、パッチが管理されます。 hg qqueue を使うことで、 独立した個別の管理キューを作成可能です。

作業領域中に、 未コミット変更がある場合、 qpush, qpop や qgoto の実行は、 即座に中止されます。 -f/--force 指定時は、 変更内容が破棄されます。 これらのコマンドの挙動は、 以下の設定により:

[mq]
keepchanges = True

--keep-changes 指定時と同じになるため、 作業領域中の変更は、 衝突が無い限り、 そのまま維持されます。 -f/--force や --exact のような、 併用できないオプションが指定された場合、 この設定は無視されます。

以前は本エクステンションが strip コマンドを提供していましたが、 現在は strip エクステンションが strip コマンドを提供しています。

コマンド

qapplied

適用中のパッチ一覧の表示:

hg qapplied [-1] [-s] [PATCH]

成功時のコマンド終了値は 0 です。

オプション:

-1, --last 直前に適用したパッチのみを表示
-s, --summary パッチヘッダの最初の行を表示

qclone

リポジトリとパッチ管理領域の同時複製:

hg qclone [OPTION]... SOURCE [DEST]

複製元が同一ホスト上にある場合、 複製先リポジトリでは、 全てのパッチが 未適用な状態となります。 複製元が遠隔ホストにある場合、 複製元での パッチ適用状況が不明なので、 複製先でのパッチ適用状況は未保証です。 遠隔ホスト上のリポジトリを複製する場合、 パッチが未適用であることを 確認してください。

特に指定が無い場合、 パッチ管理領域は <src>/.hg/patches から複製され ます。 変更する場合は -p <url> を使用します。

パッチ管理領域は、 hg init --mq によって生成された 入れ子状の Mercurial リポジトリでなければなりません。

成功時のコマンド終了値は 0 です。

オプション:

--pull メタデータ複製に pull プロトコルを使用
-U, --noupdate 新規作業領域の更新を抑止
--uncompressed 非圧縮での転送(LAN での高速転送用)
-p, --patches <リポジトリ>
 複製元パッチ管理領域位置
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

qcommit

パッチ管理領域の変更をコミット(非推奨):

hg qcommit [OPTION]... [FILE]...

本コマンドは非推奨です。 hg commit --mq を使用してください。

オプション:

-A, --addremove
 新規/不在ファイルを、コミット前に登録/除外対象化
--close-branch ブランチを閉鎖し、 ブランチ一覧での表示から除外
--amend 作業領域の親リビジョンの改変
-s, --secret secret フェーズでコミット中
-e, --edit 指定されたコミットログをエディタで更に編集
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-S, --subrepos サブリポジトリへの再帰的適用

[+] 印付きのオプションは複数回指定可能です

別名: qci

qdelete

管理対象からのパッチ除外:

hg qdelete [-k] [PATCH]...

パッチ名指定には、 最低1つの未適用パッチ名の指定が必要です。 また、 名前は厳密なものを指定してください。 -k/--keep を指定した場合、 パッチファイルそのものは管理領域に残されたままとなります。

管理対象外となったパッチを通常リビジョン化する場合は hg qfinish を使用してください。

オプション:

-k, --keep パッチファイルの削除を抑止
-r, --rev <リビジョン[+]>
 指定リビジョンを管理対象から除外(非推奨)

[+] 印付きのオプションは複数回指定可能です

別名: qremove qrm

qdiff

現行パッチと作業領域変更の結合結果の表示:

hg qdiff [OPTION]... [FILE]...

現行パッチの変更内容と、 前回の qrefresh 実施以後の作業領域における 変更内容を合わせた差分(= 現時点での qrefresh 実施によるパッチ内容の 更新結果)を表示します。

前回の hg qrefresh 実施以後の作業領域における変更内容を見たい 場合は hg diff を、 作業領域の変更内容を含まない現行パッチの内容 のみを見たい場合は hg export qtip を使用してください。

成功時のコマンド終了値は 0 です。

オプション:

-a, --text 全ファイルをテキストファイルと仮定
-g, --git git 拡張差分形式の使用
--nodates 差分表示の際に日付情報の表示を抑止
-p, --show-function
 差分表示の際に関数名情報を表示
--reverse 変更を取り消すための差分を生成
-w, --ignore-all-space
 差分判定の際に空白文字を無視
-b, --ignore-space-change
 差分判定の際に空白文字の数を無視
-B, --ignore-blank-lines
 差分判定の際に空白行を無視
-U, --unified <数値>
 差分コンテキストの行数
--stat diffstat 形式の変更概要を出力
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

qfinish

適用中パッチの通常リビジョン化:

hg qfinish [-a] [REV]...

指定されたリビジョン(適用中パッチに相当)を、 MQ 管理下から除外し、 通常のリビジョンとしてリポジトリに記録します。

リビジョン範囲指定や、 -a/--applied が指定可能です。 --applied が指定 された場合、 全ての適用中パッチが MQ 管理下から除外されます。 それ 以外の場合、 指定されたリビジョンは、 適用中スタックの最下位からの 一連のリビジョンでなければなりません。

この機能は、 上流のリポジトリでパッチが受理された場合や、 パッチ内容を上流リポジトリに反映する場合などに有用です。

成功時のコマンド終了値は 0 です。

オプション:

-a, --applied 全ての適用中パッチを通常リビジョン化

qfold

指定パッチの現行パッチへの併合:

hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...

併合対象パッチは、 未適用でなければなりません。 個々のパッチは、 指定された順序で、 現行パッチの上に、 連続して適用されます。 併合対象パッチの適用が、 全て成功した場合、 現行のパッチは、 対象パッチ全ての累積として更新され、 併合パッチは削除されます。 -k/--keep が指定された場合、 併合対象パッチのファイルは、 併合後も保持されます。

併合対象パッチのヘッダ情報は、 * * * 行を区切り記号として、 現行のパッチに追加されます。

成功時のコマンド終了値は 0 です。

オプション:

-e, --edit パッチヘッダ内容の編集
-k, --keep 併合対象パッチのパッチファイル削除を抑止
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み

qgoto

指定パッチを適用パッチの最上位にする qpush/qpop の実施:

hg qgoto [OPTION]... PATCH

成功時のコマンド終了値は 0 です。

オプション:

--keep-changes 衝突しない作業領域中の変更を許容
-f, --force 作業領域中の変更を上書き
--no-backup 取り消し実施前内容のバックアップを抑止

qguard

パッチのガード設定または表示:

hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]

「ガード」はパッチ適用の可否を制御します。 ガードが設定されていない パッチは常に適用されます。 「正」のガード(例: "+foo")が設定された パッチは、 hg qselect によって当該ガードが設定されている場合に限り 適用されます。 「負」のガード(例: "-foo")が設定されているパッチは、 hg qselect によって当該ガードが設定されている場合は適用されません。

引数指定が無い場合、 現在のガード設定を表示します。 引数が指定された場合、 指定パッチに対してガードを設定します。

Note

負のガード設定には、 ガード指定の前に '--' 引数が必要です。

現行パッチ以外にガードを設定するには:

hg qguard 対象パッチ名 -- +2.6.17 -stable

成功時のコマンド終了値は 0 です。

オプション:

-l, --list 全てのパッチのガード状況を一覧表示
-n, --none 全てのガード設定を破棄

qheader

現行パッチまたは指定パッチのヘッダ表示:

hg qheader [PATCH]

成功時のコマンド終了値は 0 です。

qimport

パッチまたは既存リビジョンの取り込み:

hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...

取り込まれたパッチの適用順序は、 現在適用中の最上位パッチの次に なります。 適用中のパッチが無い場合、 取り込まれたパッチの適用順序は 一番最初になります。

-n/--name による名前の指定が無い場合、 取り込み対象のファイル名が そのままパッチ名となります。

-e/--existing を指定することで、 パッチ管理領域中の既存ファイルを 取り込み対象とすることができます。

-f/--force が指定された場合、 同名の既存パッチを上書きします。

-r/--rev 指定により、 既存の通常リビジョンを MQ 管理下に置きます。 (例: 'qimport --rev . -n patch' は現リビジョンを MQ 管理下に置きます) -g/--git 指定は、 --rev 指定での取り込みで git 差分形式を使用します。 改名/複製や権限設定変更における git 差分形式の有用性は、 hg help diffs を参照してください。 MQ 管理下のパッチを、 通常リビジョン化する場合は hg qfinish を使用します。

標準入力からパッチを取り込む場合、 ファイル名に '-' を指定します。 標準入力からの取り込みの際には、 --name でのパッチ名指定が必須です。

既存のパッチを改名しつつ取り込む場合は:

hg qimport -e 既存パッチの名前 -n 新しい名前

成功時のコマンド終了値は 0 です。

オプション:

-e, --existing パッチ管理領域中のファイルから取り込み
-n, --name <名前>
 パッチファイル名
-f, --force 既存ファイルの上書き
-r, --rev <リビジョン[+]>
 既存リビジョンを MQ 管理下に移行
-g, --git git 拡張差分形式の使用
-P, --push パッチ取り込み後にパッチ適用(qpush)を実施

[+] 印付きのオプションは複数回指定可能です

qinit

パッチ管理領域の初期化(非推奨):

hg qinit [-c]

特に指定が無い場合、 パッチ管理領域は構成管理されません。 -c/--create-repo が指定された場合、 本コマンドはパッチ管理領域自体を Mercurial のリポジトリとして作成します(既存のパッチ管理領域を後から Mercurial リポジトリ化するのにも使用できます)。 管理領域の変更内容は qcommit によってコミットすることができます。

本コマンドは推奨されません。 -c 指定無しでの作成なら、 他の関連コマンド によって作成されます。 -c 指定有りでの作成ならば、 hg init --mq を使用してください。

オプション:

-c, --create-repo
 パッチ管理自身を Mercurial で構成管理

qnew

新規パッチの作成:

hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...

本コマンドは、 (パッチ適用中の場合は) 適用中パッチの最上位の位置に、 新規パッチを作成します。 新規パッチには、 作業領域中の全ての変更が、 格納されます。 -I/--include、 -X/--exclude や、 パッチ名に続く、 ファイル名指定の組み合わせにより、 変更が取り込まれるファイルを、 限定することができます。 取り込み対象外のファイルにおける変更は、 未コミットなまま、 作業領域に残ります。

-u/--user および -d/--date は、 それぞれ指定のユーザ名/日時の記録に 使用できます。 -U/--currentuser および -D/--currendate は、 それぞれ 現ユーザ名/現在日時を記録します。

-e/--edit, -m/--message, -l/--logfile は、 コミットログと同様に、 パッチのヘッダに記録する情報を指定します。 指定が無い場合は、 ヘッダは空のまま、 コミットログが '[mq]: パッチ名' となります。

git 拡張差分形式を使用する場合は、 -g/--git を指定します。 改名/複製 情報や、 権限設定の情報保持にとっての git 差分形式の有用性に関しては、 'help diffs' を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-e, --edit コミットログの編集
-f, --force 作業領域の変更内容のパッチへの取り込み(非推奨)
-g, --git git 拡張差分形式の使用
-U, --currentuser
 "From: <現ユーザ名>" をパッチに追加
-u, --user <ユーザ>
 "From: <ユーザ>" をパッチに追加
-D, --currentdate
 "Date: <現在時刻>" をパッチに追加
-d, --date <日時>
 "Date: <日時>" をパッチに追加
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み

[+] 印付きのオプションは複数回指定可能です

qnext

現行パッチの「次」に適用されるパッチの名前表示:

hg qnext [-s]

成功時のコマンド終了値は 0 です。

オプション:

-s, --summary パッチヘッダの最初の行を表示

qpop

現行パッチの適用解除:

hg qpop [-a] [-f] [PATCH | INDEX]

引数指定が無い場合、 適用中パッチ群のうち、 最上位パッチを解除します。 パッチ名が指定された場合、 当該パッチが適用最上位パッチになるまで、 他のパッチの適用解除を行います。

作業領域に未コミット変更がある場合、 通常はコマンドが中止されます。 --keep-changes が指定された場合、 未コミット変更とパッチとの間で、 重複がある場合のみ、 中止されます。 -f/--force が指定された場合、 変更内容をバックアップした上で、 未コミット変更の内容を破棄します。

成功時のコマンド終了値は 0 です。

オプション:

-a, --all 全てのパッチの適用を解除
-n, --name <名前>
 パッチ解除先のパッチ管理領域名(非推奨)
--keep-changes 衝突しない作業領域中の変更を許容
-f, --force パッチ対象ファイルに対する作業領域中の変更を破棄
--no-backup 取り消し実施前内容のバックアップを抑止

qprev

直前に適用されたパッチ名の表示:

hg qprev [-s]

成功時のコマンド終了値は 0 です。

オプション:

-s, --summary パッチヘッダの最初の行を表示

qpush

次のパッチの適用:

hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]

作業領域に未コミット変更がある場合、 通常はコマンドが中止されます。 --keep-changes が指定された場合、 未コミット変更とパッチとの間で、 重複がある場合のみ、 中止されます。 -f/--force が指定された場合、 変更内容をバックアップした上で、 未コミット変更の上から、 パッチが適用されます。

成功時のコマンド終了値は 0 です。

オプション:

--keep-changes 衝突しない作業領域中の変更を許容
-f, --force 作業領域の変更をそのままでパッチを適用
-e, --exact パッチに記録された親リビジョンに対して適用
-l, --list コミットログとしてパッチ名を列挙
-a, --all 全てのパッチを適用
-m, --merge 他のパッチ管理領域とのマージ(非推奨)
-n, --name <名前>
 マージ対象のパッチ管理領域名(非推奨)
--move パッチ一覧の順序変更とパッチ適用
--no-backup 取り消し実施前内容のバックアップを抑止

qqueue

複数のパッチキューの管理:

hg qqueue [OPTION] [QUEUE]

複数の異なるパッチキューの間での切り替え、 新規パッチキューの作成 および既存パッチキューの削除を行います。

キュー名称の指定が無いか、 -l/--list が指定された場合、 登録済みキューが一覧表示されます。 通常は "patches" が登録済みです。 実行時点で使用中のキューには "(使用中)" が表示されます。 --active が指定された場合は、 使用中のキューのみが表示されます。

新規キューの作成には -c/--create を指定します。 新規作成キューは、 自動的に使用キューとなります。 ただし、 新規キューの作成時点で、 既存のキューからパッチが適用中の場合は、 新規キューは作成されますが、 使用キューの切り替えは実施されません。

--delete が指定された場合、 既存のキューを削除します。 その時点で使用中のキューは削除できません。

成功時のコマンド終了値は 0 です。

オプション:

-l, --list 有効なキューの一覧表示
--active 使用中のキュー名の表示
-c, --create 新規キューの作成
--rename 使用中のキューの改名
--delete キューへの参照の削除
--purge キューおよび管理ディレクトリの削除

qrefresh

現行パッチの更新:

hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...

何らかのパターンが指定された場合、 更新後のパッチは当該パターンに 合致するファイルの変更内容だけを含み、 他のファイルの変更内容は作業 領域に残ったままとなります。

-s/--short が指定された場合、 現行パッチが変更を保持するファイルは、 ファイル指定されたものとみなされ、 パッチにとどまり続けます。

-e/--edit が指定された場合、 メッセージ入力用のプログラムが 設定に従って起動されます。 処理が失敗した場合、 入力したメッセージは .hg/last-message.txt に保存されます。

複製/改名に関する履歴保存のために git 差分形式を使用(-g/--git 指定や 設定ファイルでの [diff] git=1 記述)するのであれば、 add/remove/copy/rename といった hg のコマンドによる履歴記録も、 通常と変わりなく機能します。 git 差分形式の詳細に関しては、 'help diffs' を参照してください。

成功時のコマンド終了値は 0 です。

オプション:

-e, --edit コミットログの編集
-g, --git git 拡張差分形式の使用
-s, --short 明示されたファイルに加えて、 既存のパッチ対象ファイルも更新
-U, --currentuser
 パッチ作成者情報を現行ユーザに設定
-u, --user <ユーザ>
 パッチ作成者情報を指定ユーザに設定
-D, --currentdate
 パッチ作成日付情報を現時刻に設定
-d, --date <日時>
 パッチ作成日付情報を指定時刻に設定
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み

[+] 印付きのオプションは複数回指定可能です

qrename

パッチの改名:

hg qrename PATCH1 [PATCH2]

引数が1つの場合、 現行パッチを指定された名前に改名します。 引数が2つの場合、 1つ目のパッチの名前を2つ目に改名します。

成功時のコマンド終了値は 0 です。

別名: qmv

qrestore

指定リビジョンによって保存されたパッチ管理状態の復旧(非推奨):

hg qrestore [-d] [-u] REV

本コマンドは非推奨です。 hg rebase を使用してください。

オプション:

-d, --delete 保存エントリの破棄
-u, --update パッチ管理領域の更新

qsave

パッチ管理状態の保存(非推奨):

hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]

本コマンドは非推奨です。 hg rebase を使用してください。

オプション:

-c, --copy パッチ管理領域の複製
-n, --name <名前>
 複製先ディレクトリ名
-e, --empty パッチ状態ファイル(status)のクリア
-f, --force 複製の強行
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み

qselect

作業領域におけるガード選択の設定または表示:

hg qselect [OPTION]... [GUARD]...

パッチ毎のガード設定または表示には hg qguard を、 作業領域における ガードの選択または表示には hg qselect を使用します。 ガードが設定 されていないか、 何らかの「正」のガードがガード選択に合致する場合には パッチが適用されますが、 何らかの「負」のガードがガード選択に合致する 場合にはパッチは適用されません。 例えば:

qguard foo.patch -- -stable    (「負」のガード)
qguard bar.patch    +stable    (「正」のガード)
qselect stable

上記の qselect 実行により、 "stable" ガードが選択されます。 MQ は foo.patch の適用を(「負」のガードに合致するため)見送りますが、 bar.patch の適用は(「正」のガードに合致するため)実施します。

引数指定が無い場合、 現在のガード選択状況を表示します。 引数が指定された場合、 ガード選択を設定します。

-n/--none を指定することで、 全てのガード選択を無効化します (他の引数は必要ありません)。 ガードが全く選択されていない場合、 「正」のガードが設定されたパッチは適用されませんが、 「負」のガードが設定されたパッチは適用されます。

本コマンドの実行により、 適用中のパッチの適用可否も変化し得ます。 特に指定が無い場合、 ガードが有効なパッチの適用解除は行われません。 --pop が指定された場合、 適用可否が変わる最初のパッチまでのパッチが、 適用解除されます。 --reapply が指定された場合、 --pop 相当の処理後に、 ガードが有効なパッチの適用を見送りつつ、 現行パッチに至るまで、 パッチを再適用します。

-s/--series が指定された場合、 パッチに設定されたガードを一覧化して 表示します(他の引数は不要)。 詳細表示には -v を指定してください。

成功時のコマンド終了値は 0 です。

オプション:

-n, --none 全てのガード設定を破棄
-s, --series 各パッチに設定されたガードを一覧化
--pop 適用可否が変化するパッチの適用を解除
--reapply qpop 実施後に再度パッチを適用

qseries

既知のパッチ一覧の表示:

hg qseries [-ms]

成功時のコマンド終了値は 0 です。

オプション:

-m, --missing パッチ管理領域中の未知のパッチファイルを表示
-s, --summary パッチヘッダの最初の行を表示

qtop

現行パッチの名前表示:

hg qtop [-s]

成功時のコマンド終了値は 0 です。

オプション:

-s, --summary パッチヘッダの最初の行を表示

qunapplied

未適用のパッチ一覧の表示:

hg qunapplied [-1] [-s] [PATCH]

成功時のコマンド終了値は 0 です。

オプション:

-1, --first 最初の未適用パッチのみを表示
-s, --summary パッチヘッダの最初の行を表示

notify

電子メールによる push 通知送信用フック集

本エクステンションでは、 変更履歴が、 手元のリポジトリに取り込まれたり、 他のリポジトリへと反映されたのを契機に、 電子メールを送信するための、 フックを提供します。

hg help extensions にならって、 本エクステンションを有効にした上で、 実行したいフックを登録してください。 incoming および changegroup フックは履歴の取り込みで、 outgoing は履歴の反映の際に実行されます:

[hooks]
# 取り込み処理時にリビジョン毎にメールを送信
incoming.notify = python:hgext.notify.hook
# 取り込み処理毎にメールを送信
changegroup.notify = python:hgext.notify.hook

# 反映処理毎にメールを送信
outgoing.notify = python:hgext.notify.hook

上記の設定により、 フックが登録されます。 メール通知を有効にするには、 リポジトリ毎のメール送信先 (subscriber:購読者) 設定が必要です。 [usersubs] は単一購読者に複数のリポジトリを設定します。 [reposubs] は単一リポジトリに複数の購読者を設定します:

[usersubs]
# 左辺には送信先メールアドレス、右辺にはカンマ区切りの
# リポジトリ合致判定パターンを記述してください
user@host = pattern

# 左辺にはリポジトリの合致判定パターン、右辺にはカンマ区切りの
# 送信先メールアドレスを記述してください
pattern = user@host

pattern 指定は、 リポジトリの絶対パスに対する glob 合致判定で、 revset 表記と組み合わせることもできます。 revset 表記を記述する場合は、 glob パターンとハッシュ記号 (#) で区切ります。記述例:

[reposubs]
*/widgets#branch(release) = qa-team@example.com

この設定例では、 widgets で終わるリポジトリの release ブランチへの変更を契機に qa-team@example.com への通知が実施されます。

[usersubs] および [reposubs] 設定を、 別のファイルに記述して、 そのファイルを読み込むようにすることで、 メール送信先ユーザの管理を、 独立させることが可能です:

[notify]
config = /path/to/subscriptionsfile

notify.test 設定を False にしない限り、 メールは送信されません。 詳細は後述の説明を参照してください。

通知内容は、 以下の設定により変更可能です:

notify.test
真値の場合、 生成された通知内容は、 標準出力に書き出されます (メール送信無し)。 デフォルト値は True
notify.sources

空白区切りの変更反映元一覧。 変更反映元が一覧要素と合致する場合のみ、 メール送信が有効になります。 指定可能な要素は:

serve:http または ssh 経由での取り込み
pull:hg pull 経由での取り込み
unbundle:hg unbundle 経由での取り込み
push:hg push 経由での反映/取り込み
bundle:hg unbundle 経由での反映

デフォルト値は serve です。

notify.strip
URL パス冒頭から取り除く、 スラッシュ数。 無指定時は、 リポジトリの絶対パスが使用されます。 notify.strip によって、 リポジトリのパスを、 相対パス化することができます。 例えば、 notify.strip=3/long/path/repositoryrepository に変更します。 デフォルト値は 0。
notify.domain
明示的なドメインが無い場合の、 送信元/先メールアドレスのドメイン。
notify.style
メール本文の整形に用いる、 スタイルファイル名。
notify.template
メール本文の整形に用いる、 テンプレート指定。
notify.incoming
incoming フックで使用するテンプレート指定。 設定された場合は、 notify.template に優先します。
notify.outgoing
outgoing フックで使用するテンプレート設定。 設定された場合は、 notify.template に優先します。
notify.changegroup
changegroup フックで使用するテンプレート設定。 設定された場合は、 notify.template に優先します。
notify.maxdiff
メール本文に含める、 差分情報の最大行数。 0 の場合は、 差分が含まれず、 -1 の場合は、 全差分行が含まれます。 デフォルト値は 300。
notify.maxsubject
メール表題 (subject) の最大文字数。 デフォルト値は 67。
notify.diffstat
差分統計 (diffstat) 通知の有無。 デフォルト値は True。
notify.merge
マージ実施リビジョンに関する、 通知の有無。 デフォルト値は True。
notify.mbox
値が設定された場合、 mbox ファイル指定とみなし、 メール送信の代わりに、 送信内容を mbox ファイルに追記します。 デフォルト値は無設定。
notify.fromauthor
真値の場合、 通知契機リビジョン群の、 先頭リビジョンのユーザ名を、 通知メールの "From" フィールドに使用します。 それ以外の場合は、 変更反映元からの、 ユーザ名情報を利用します。 デフォルト値は False。

通知のカスタマイズには、 以下の設定も利用可能です:

email.from
生成された通知メール本文に、 相当する情報が無い場合は、 この値が From フィールドに使用されます。
web.baseurl
リポジトリのパスと組み合わせて、 参照用 URL を生成する URL ベース。 notify.strip も参照してください。

pager

コマンド出力に対する外部ページャーの使用

使用するページャーの設定は、 以下のような設定で行います:

[pager]
pager = less -FRX

上記設定が無い場合、 本エクステンションは PAGER 環境変数を参照します。 pager.pager も PAGER も未設定の場合、 本エクステンションは何もしません。

pager.ignore 設定にコマンド名を列挙することで、 当該コマンド実行での、 ページャーの使用を抑止できます:

[pager]
ignore = version, help, update

pager.attend 設定にコマンド名を列挙することで、 ページャーの使用を、 当該コマンド実行時に限定することもできます。 以下の設定例のコマンドは、 デフォルトのページャー使用対象です:

[pager]
attend = annotate, cat, diff, export, glog, log, qdiff

pager.attend 設定を空にすることで、 全てのコマンドが対象となります。

pager.attend 設定時は pager.ignore 設定は無視されます。

hg versionhg help のようなグローバルコマンドで、 ページャー使用を抑止したい場合、 個人の設定ファイル中で、 その旨を明記してください。

ページャーの使用は、 --pager=... でも制御できます。 真偽値の yes no on off 以外に、 無指定時挙動に相当する auto を指定できます。

patchbomb

電子メールによる変更内容パッチ送付のコマンド

一連のメールは、 "[PATCH 0 of N]" を Subject ヘッダに持つ、 説明メール から始まります。

個々のメールの Subject ヘッダは、 "[PATCH M of N]" で始まり、 対応する リビジョンのコミットログの最初の行の内容が記載されます。 メールの本文は、 以下の様な2または3の部位から構成されます:

  • コミットログ
  • パッチの差分統計(diffstat)結果 [省略可能]
  • hg export 形式と同様のパッチ内容

個々のメールは、 In-Reply-To および References ヘッダを使用して、 1通目の メールを参照しますので、 メールリーダーやニュースリーダーでの参照時や、 メールアーカイブにおいては、 一連のスレッドとして扱われます。

以下の様な記述を設定ファイルに追加することで、 無指定時の設定を変更できます:

[email]
from = My Name <my@email>
to = recipient1, recipient2, ...
cc = cc1, cc2, ...
bcc = bcc1, bcc2, ...
reply-to = address1, address2, ...

[email] セクションにおけるグローバルなアドレス設定よりも優先させたい 設定がある場合には、 [patchbomb] セクションを使って記述してください。

ここまで設定できたなら、 hg email コマンドを使用して、 一連の リビジョンをパッチ爆弾(patchbomb)としてメール送信することができます。

設定ファイルの [email] セクションで method 指定を行うことで、 sendmail 互換のメール送信プログラムを指定することもできれば、 [smtp] セクションに 必要な情報を記述することで、 外部プログラムの助けを借りずに Mercurial から 直接パッチ爆弾を送信することも可能です。 これらのセクションに関する詳細は 設定ファイルに関するドキュメント (hgrc(5)) を参照してください。 (※ 訳注: hg help config でも参照可能)

コマンド

email

電子メールによる変更内容のパッチ送付:

hg email [OPTION]... [DEST]...

特に指定の無い場合、 hg export の生成する差分形式でリビジョン毎に メールが送信されます。 一連のメールは、 "[PATCH 0 of N]" を Subject ヘッダに持つ、 説明メールから始まります。

個々のメールの Subject ヘッダは、 "[PATCH M of N]" で始まり、 対応するリビジョンのコミットログの1行目が記載されます。 メール本文は、 2または3の部位から構成されます。 最初の部位にはコミットログの続きが配置されます。

-d/--diffstat が指定され、 diffstat コマンドが利用可能な場合、 パッチに対する diffstat の実行結果が配置されます。

最後の部位には hg export が生成する差分が配置されます。

-d/--diffstat または --confirm が指定された場合、 メッセージの送信に先立って、 全メッセージのまとめを伴って、 確認の問い合わせがあります。

特に指定の無い場合、 メール本文中の通常テキストとして、 パッチが埋め込まれます。 -a/--attach が指定された場合は、 パッチは添付ファイル化されます。 -i/--inline が指定された場合は、 インライン添付ファイルとなります。 -a/--attach または -i/--inline と --body を併用することで、 パッチの格納先を、 メール本文や、 インラインまたは通常の添付ファイルから、 選択することができます。

-o/--outgoing 指定がある場合、 連携対象リポジトリに存在しない (あるいは、 指定リビジョン以前の)リビジョンのためのパッチのみが メールで送信されます。

-b/--bundle 指定がある場合、 対象リビジョンの選択は --outgoing 指定 時と同様に行われますが、 Mercurial のバンドル形式ファイルを添付 ファイルとする単一のメールとして送信されます。

-m/--mbox が指定された場合、 PAGER での表示やメール送信の代わりに、 パッチのメールを格納した UNIX mbox 形式ファイルを作成します。 このファイルは UNIX mbox 形式に対応しているツールで閲覧可能です。

-n/--test 指定のある場合、 一連の処理手順は実行されますが、 メールの送信は行われません。 その代わりに、 送信先アドレスや、 パッチ説明文の入力が促されます。 必要な入力が完了すると、 送信されるメールの内容が表示されます。 PAGER 環境変数が設定されている場合、 パッチ爆弾を構成する メールごとに、 環境変数に設定されたプログラムが起動されますので、 内容を確認することができます。

メール送信に失敗した場合、 導入メッセージは .hg/last-email.txt に保存されます。

例:

hg email -r 3000          # リビジョン 3000
hg email -r 3000 -r 3001  # リビジョン 3000 および 3001
hg email -r 3000:3005     # リビジョン 3000 から 3005 まで
hg email 3000             # リビジョン 3000 (非推奨形式)

hg email -o               # default に無いリビジョン
hg email -o DEST          # DEST に無いリビジョン
hg email -o -r 3000       # 3000 以前で default 側に無いリビジョン
hg email -o -r 3000 DEST  # 3000 以前で DEST 側に無いリビジョン

# ※ 以下、すべて bundle 形式
hg email -b               # default 側に無いリビジョン
hg email -b DEST          # DEST 側に無いリビジョン
hg email -b -r 3000       # 3000 以前で default 側に無いリビジョン
hg email -b -r 3000 DEST  # 3000 以前で DEST 側に無いリビジョン

hg email -o -m mbox &&    # mbox ファイルを生成し...
  mutt -R -f mbox         # ... mutt で閲覧
hg email -o -m mbox &&    # mbox ファイルを生成し ...
  formail -s sendmail \   # ... formail を使用して
    -bm -t < mbox         # ... sendmail 経由で送信

本コマンドを使用する前に、 設定ファイルに電子メール関連設定を記述する 必要があります。 設定ファイルに関するドキュメント (hgrc(5)) を参照してください。 (※ 訳注: hg help config でも参照可能)

オプション:

-g, --git git 拡張差分形式の使用
--plain Mercurial 固有のパッチヘッダを省略
-o, --outgoing 対象リポジトリに無いリビジョンをパッチ形式で送信
-b, --bundle 対象リポジトリに無いリビジョンをバンドル形式で送信
--bundlename <名前>
 バンドル形式添付ファイルのファイル名 (既定値: bundle)
-r, --rev <リビジョン[+]>
 送信するリビジョン
--force 連携先が無関係なリポジトリでも送信 (-b/--bundle 指定時)
--base <リビジョン[+]>
 連携先指定の代わりとなる基底リビジョン (-b/--bundle 指定時)
--intro 説明文を独立したメールで送信
--body インラインメッセージとしてパッチを送信 (デフォルト)
-a, --attach 添付ファイルとしてパッチを送信
-i, --inline インライン添付ファイルとしてパッチを送信
--bcc <値[+]> BCC 宛先のメールアドレス
-c, --cc <値[+]>
 CC 宛先のメールアドレス
--confirm 送信前に確認を実施
-d, --diffstat 差分統計を出力に追加
--date <値> メールの Date ヘッダ値に指定日時を設定
--desc <値> 指定ファイルの内容を説明文として使用
-f, --from <値> メールの From ヘッダ値
-n, --test 送信予定のメールの内容を表示
-m, --mbox <値> メール送信の代わりに、 mbox ファイルに書き出す
--reply-to <値[+]>
 返信メールの送付先アドレス
-s, --subject <値>
 説明文または単一パッチ送信メールの Subject ヘッダ値
--in-reply-to <値>
 返信対象のメッセージID
--flag <値[+]> subject 欄に付与するフラグ
-t, --to <値[+]>
 TO 宛先のメールアドレス
-e, --ssh <コマンド>
 SSH 連携で使用する ssh コマンド
--remotecmd <コマンド>
 遠隔ホスト側で実行される hg コマンド
--insecure サーバ証明書の検証省略(web.cacerts 設定の無視)

[+] 印付きのオプションは複数回指定可能です

progress

処理における進捗率の表示

本エクステンションは、 hg コマンドからの進捗情報を元に、 可能な限り有益な進捗率を表示します。 多くの処理での進捗率表示が、 明確な処理総量に基づいている一方で、 幾つかの処理においては、 不確定な情報に基づいた進捗率を表示する場合もあります。

指定可能な設定は以下の通りです:

[progress]
delay = 3 # 進捗率表示までの猶予秒数 (浮動小数指定)
changedelay = 1 # 新規トピック表示までの最小猶予時間。
                # 3 * refresh よりも小さい値の場合は、
                # この設定は無視されます。
refresh = 0.1 # 進捗率表示更新間隔の秒数
format = topic bar number estimate # 進捗率表示の形式指定
width = <none> # 進捗率表示の最大カラム数
               # (width 設定と画面幅の小さい方が有効になります)
clear-complete = True # 実行完了時の進捗率表示クリアの有無
disable = False # 真値が設定された場合、進捗率は表示されません
assume-tty = False # 真値が設定された場合、 disable が指定されない限り
                   # 常に進捗率が表示されます

format 指定で有効な要素は topic bar number unit estimate speed item です。 デフォルトの item は末尾 20 文字ですが、 -<num> (末尾 num 文字) や +<num> (冒頭 num 文字) 指定の追加で変更可能です。

purge

作業領域中の未登録ファイルを削除するコマンド

コマンド

purge

Mercurial の管理対象外ファイルの削除:

hg purge [OPTION]... [DIR]...

本コマンドは Mercurial の管理対象外のファイルを削除します。 記録済みのリビジョンや、 未コミット変更をテストする場合など、 作業領域を綺麗にしたい場合に有用です。

本コマンドは、 以下のファイルを削除します:

  • 未知のファイル: hg status における "?" 扱いのファイル
  • 空ディレクトリ: 実際には、 ファイル (登録除外対象含む) を一切持たないディレクトリは、 削除されません

その一方で、 以下のファイルは保持されます:

  • Mercurial の管理下にあるファイル(変更の有無に関わらず)
  • 無視対象ファイル (--all 指定の無い場合)
  • 新規登録されたファイル (hg add 実施対象)

引数としてディレクトリが指定された場合、 指定ディレクトリ配下のみが、 処理対象となります。

本コマンドの実施により、 登録し忘れたファイルが削除された場合、 当該ファイルは復旧できませんので、 十分注意してください。 削除対象ファイルの名前を確認したいだけの場合は、 --print を指定してください。

オプション:

-a, --abort-on-err
 エラー発生時には処理を中止
--all 無視対象ファイルも削除
-p, --print ファイル削除の変わりにファイル名表示を実施
-0, --print0 ファイル名をNUL文字(0x00)で終端(xargs -p/--print との併用向け)
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

別名: clean

rebase

履歴上の異なる位置への一連のリビジョンの移動

本エクステンションは、 既存の Mercurial リポジトリ上での、 リビジョン群の移動を実現します

詳細は以下を参照してください: http://mercurial.selenic.com/wiki/RebaseExtension

コマンド

rebase

別な履歴位置へのリビジョン(およびその子孫)の移動:

hg rebase [-s REV | -b REV] [-d REV] [OPTION]

本コマンドは、 反復的なマージを行なうことで、 ある履歴位置 (移動元) から別な位置 (移動先) へとリビジョン群を移植します。 この機能は、 手元のリポジトリでの成果を、 開発用の共有リポジトリに反映する際に、 枝分かれの無い状態にしたい場合などで有用です。

他の利用者に公開済みのリビジョンは、 移動すべきではありません。 公開済みリビジョンの移動は、 結果的に、 他の利用者に対して、 同様のリビジョン移動操作を強制してしまったり、 公開済みと移動後の、 両方のリビジョンの取り込みにより、 リビジョンが重複したりといった、 悪影響があります。

通常の設定では、 公開済みリビジョンは、 移動できません。 詳細は hg help phases を参照してください。

移動先リビジョン (-d/--dest) が指定されない場合、移動先として、 現行の名前付きブランチの、 最新ヘッドが採用されます。 (移動先リビジョン自身は改変されませんが、 移動先の子孫として、 新規リビジョンが追加されます)

移動対象リビジョンの指定には、 "source" 指定と "base" 指定の、 2つの方法が使えます。 いずれも履歴ツリーから移動対象を抽出するための、 簡易化された方法です。 "source" (-s/--source) を指定した場合、 指定リビジョン、 およびその子孫全てを移動します。 "base" (-b/--base) を指定した場合、 指定リビジョンから遡り、 移動先との共通祖先までの範囲を、 移動対象として選択します。 -s 指定よりも -b 指定は精密さで劣りますが、 その分便利です。 移動元のブランチにおいて、 任意のリビジョンを選択することにより、 ブランチ全体が選択されます。 -s-b も指定しない場合、 作業領域の親リビジョンを "base" とみなします。

より踏み込んだ対象指定として、 --rev を使用する方法があります。 --rev を使うことで、任意のリビジョンを、 移動対象に指定できます。 この方法でリビジョンを指定した場合、 指定リビジョンの子孫は、 自動的には移動対象に含まれません。

特に指定が無い場合、 本コマンドは移動元ブランチのリビジョンを、 移動先の子孫として再生成し、 その後に元リビジョンを破棄します。 移動元リビジョンを残す場合、 --keep を指定してください。 移動元ブランチのリビジョンのうち、 何も貢献の無いリビジョン (例: 移動先ブランチとのマージ実施リビジョン等) は無視されます。

現行の名前付きブランチが2つのヘッドを持ち、 且つ作業領域の親が、 最新ヘッド側である場合、 本コマンドは何も実施しません。 自動的に2つのヘッドを選択する hg merge と異なり、 デフォルトの移動元と移動先が、 共に最新ヘッドを選択するためです。 そのようなケースでは、 移動元/移動先を明示的に指定してください。 (他方のヘッドが移動先なら、 そちらに hg update してください)

手動マージによる衝突解消が必要な場合、 移動処理が中断されますので、 衝突解消後に --continue/-c で再開するか、 --abort/-a で中止 (移動関連情報の破棄) してください。

成功時のコマンド終了値は 0、 移動が必要なリビジョンが無い場合や、 未解消の衝突が発生した場合は 1 です。

オプション:

-s, --source <リビジョン>
 指定リビジョンからの移動
-b, --base <リビジョン>
 指定リビジョンの祖先から移動 (移動先との共通祖先まで遡ります)
-r, --rev <リビジョン[+]>
 指定リビジョン群の移動
-d, --dest <リビジョン>
 移動先リビジョン
--collapse 移動後に移動リビジョンを単一化
-m, --message <テキスト>
 指定テキストを要約コミットログとして使用
-e, --edit コミットログ入力にエディタを起動
-l, --logfile <ファイル>
 要約コミットログをファイルから読み込み
--keep 元リビジョンを維持
--keepbranches 元ブランチ名を維持
-D, --detach (非推奨)
-t, --tool <値> マージツールの指定
-c, --continue 中断された未完了の移動を再開
-a, --abort 中断による未完了な移動の情報を破棄(=中止)
--style <スタイル> 当該スタイルで表示をカスタマイズ (非推奨)
-T, --template <テンプレート>
 当該テンプレートで表示をカスタマイズ

[+] 印付きのオプションは複数回指定可能です

record

commit や qrefresh における対話的な変更取り込みの選択

コマンド

qrecord

新規パッチのコミット内容を対話的に選択:

hg qrecord [OPTION]... PATCH [FILE]...

用法等の詳細は hg help qnew および hg help record を参照してください。

record

コミット内容の対話的な選択:

hg record [OPTION]... [FILE]...

ファイル一覧が指定されなかった場合は hg status で表示される 全てのファイルが記録の対象となります。

-d/--date での日時表記は hg help dates を参照してください。

変更されたファイルの変更箇所ごとに記録するかどうか質問されます。 それに対して以下の操作が可能です:

y - この変更を記録(yes)
n - この変更を無視(no)
e - この変更を手動で編集(edit)

s - 同一ファイルの以後の全ての変更を無視(skip)
f - 同一ファイル(file)の以後の全ての変更を記録

d - 以後の全ての変更を無視=記録作業を完了(done)
a - 以後の全て(all)の変更を記録
q - 変更の記録自体を中止(quit)

? - ヘルプ表示(?)

本コマンドをマージのコミットに使用することはできません。

オプション:

-A, --addremove
 新規/不在ファイルを、コミット前に登録/除外対象化
--close-branch ブランチを閉鎖し、 ブランチ一覧での表示から除外
--amend 作業領域の親リビジョンの改変
-s, --secret secret フェーズでコミット中
-e, --edit 指定されたコミットログをエディタで更に編集
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外
-m, --message <テキスト>
 指定テキストをコミットログとして使用
-l, --logfile <ファイル>
 コミットログをファイルから読み込み
-d, --date <日時>
 指定日時をコミット日時として記録
-u, --user <ユーザ>
 指定ユーザをコミットユーザとして記録
-S, --subrepos サブリポジトリへの再帰的適用
-w, --ignore-all-space
 差分判定の際に空白文字を無視
-b, --ignore-space-change
 差分判定の際に空白文字の数を無視
-B, --ignore-blank-lines
 差分判定の際に空白行を無視

[+] 印付きのオプションは複数回指定可能です

schemes

連携先リポジトリ群に対する略記指定の拡張

本エクステンションによって、 複数リポジトリの親 URL 的な役割を、 スキーマ指定のように記述する省略記法が可能になります。 例えば:

[schemes]
py = http://code.python.org/hg/

上記設定の元では、 以下のような表記が可能です:

hg clone py://trunk/

更に、 より複雑なスキーマにも対応しています。 例えば Google Code を使用する場合:

[schemes]
gcode = http://{1}.googlecode.com/hg/

Mercurial のテンプレート表記の文法を元に、 {1} から始まり {2}{3} 等々と連続した、 上限無しの番号変数を使用可能です。 各番号変数は、 URL を / で区切った部位に対応した値で置換されます。 {部位} 形式に該当しない部分は、 全て URL 末尾に付加されます。

利便上、 本エクステンションは、 以下のスキーマをデフォルトで設定します:

[schemes]
py = http://hg.python.org/
bb = https://bitbucket.org/
bb+ssh = ssh://hg@bitbucket.org/
gcode = https://{1}.googlecode.com/hg/
kiln = https://{1}.kilnhg.com/Repo/

定義済みスキーマは、 同名スキーマ定義により、 上書き可能です。

share

複数作業領域による履歴情報領域の共有

コマンド

share

共有リポジトリの新規作成:

hg share [-U] SOURCE [DEST]

他のリポジトリと履歴情報を共有する、 リポジトリ/作業領域を、 新規に作成します。

Note

rollback の実施や、 履歴を改変するエクステンション (例: mq や rebase 等) の利用は、 リポジトリ間での共有に混乱をもたらします。 典型的な例は、 共有関係にあるリポジトリの両方が、 作業領域を同一リビジョンで更新した状態で、 一方が当該リビジョンを rollback により破棄することで、 他方が機能しなくなるケースです: "中止: 作業領域の親 REV が未知のリビジョンです" メッセージ表示と共に、 他方でのあらゆる操作が失敗します。 この場合の唯一の復旧方法は、 機能しない側のリポジトリにおいて、 確実に存在するリビジョンでの hg debugsetparents 実施だけです。

オプション:

-U, --noupdate 作業領域の更新を抑止します

unshare

共有状態のリポジトリから通常リポジトリへの変換:

hg unshare

履歴管理情報を複製し、 共有状態を解消します。

shelve

作業領域中の変更内容の退避および復旧

hg shelve は、 作業領域中の変更内容を、 退避した上で破棄することで、 作業領域を変更が無かった状態に戻します。

退避された変更内容は、 hg unshelve で作業領域に復旧されます。 作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。 変更の衝突解消が必要な場合、 自動的に Mercurial のマージ機能を使用します。

変更内容の退避は、 複数保持することが可能です。 退避された変更内容は、 一意な名前で管理されます。 詳細は hg help shelve を参照してください

コマンド

shelve

作業領域中の変更内容を退避した上で破棄:

hg shelve [OPTION]... [FILE]...

『変更なし』(hg status 参照) 以外の管理対象ファイルの変更内容を、 バンドルファイルとして退避した上で、 作業領域から破棄することで、 作業領域を『変更なし』状態に戻します。

退避した変更内容は hg unshelve で作業領域に復旧できます。 作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。

対象が無指定の場合、 『変更なし』以外の全ての管理対象ファイルが、 変更退避の対象になります。 対象ファイル/ディレクトリ指定がある場合、 指定対象の変更のみが退避されます。

退避内容を識別するために、 変更退避の情報は名前を付けて管理されます。 --name での名前指定が無い場合、 アクティブなブックマーク名、 または作業領域の名前付きブランチ名が、 退避情報の名前に使用されます。

退避情報の一覧は --list オプションで表示されます。 退避情報毎に、 名前、 日時情報、 説明文を表示します。 より詳細な表示には --patch--stat を指定してください。

特定の退避情報を破棄する場合は --delete を指定します。 全ての退避情報を破棄する場合は --cleanup を指定します。

オプション:

-A, --addremove
 新規/不在ファイルを、退避前に登録/除外対象化
--cleanup 退避情報を全て破棄
--date <日時> 指定日時を退避情報に記録
-d, --delete 指定名称の退避情報を破棄
-l, --list 退避情報の一覧表示
-m, --message <テキスト>
 指定の説明文を退避情報に記録
-n, --name <名前>
 指定ユーザ名を退避情報に記録
-p, --patch パッチ形式での表示
--stat diffstat 形式の変更概要を出力
-I, --include <パターン[+]>
 パターンに合致したファイルを処理対象に追加
-X, --exclude <パターン[+]>
 パターンに合致したファイルを処理対象から除外

[+] 印付きのオプションは複数回指定可能です

unshelve

作業領域への退避内容の復旧:

hg unshelve [SHELVED]

本コマンドは、 退避された変更内容を、 作業領域に復旧します。 退避情報名が無指定の場合、 一番最後に退避した変更内容を復旧します。

退避内容の復旧が完了したなら、 対応する退避情報は破棄されます。

任意の時点で退避内容を復旧できるため、 作業領域の親リビジョンと、 退避内容の組み合わせ次第では、 変更内容が衝突するかもしれません。 その場合は、 衝突解消後に hg unshelve --continue を実行して、 復旧処理を完了させてください。 (復旧処理が完了するまでは、 退避情報は破棄されません)

(hg unshelve --abort 実行により、 衝突が発生した復旧処理を、 中止することもできます。 その場合、 作業領域中の変更は破棄されますが、 退避情報は保持されます)

オプション:

-a, --abort 未完了の復旧処理を中止
-c, --continue 未完了の復旧処理を継続
--keep 復旧後も退避情報を維持
--date <日時> 一時コミットの日付を設定 (非推奨)

strip

指定リビジョンと子孫の履歴からの破棄

本エクステンションは、 指定リビジョンとその子孫を、 履歴から破棄します。 詳細は hg help strip を参照してください。

コマンド

strip

リポジトリからの、 特定リビジョンおよびその子孫の除外:

hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...

hg strip は指定のリビジョンおよび、 指定リビジョンの子孫を 取り除きます。 作業領域の変更が未コミットの場合、 --force が指定されない限りは処理を中止します。 --force が指定された場合、 変更内容は破棄されます。

作業領域の親リビジョンが除外対象になった場合、 除外操作の完了後に、 除外された親リビジョンの祖先の中で、 最も近い有効なリビジョンで、 作業領域を更新します。

除外されたリビジョンは、 bundle 形式で .hg/strip-backup 配下に 退避されます(bundle 形式に関しては hg help bundle および hg help unbundle 参照)。 除外の際に作成された BUNDLE ファイルで hg unbundle .hg/strip-backup/BUNDLE を実施することで 除外されたリビジョンを復旧させることができます。 通常、 復旧の際には リビジョン番号が変更されますので注意してください。

除外処理完了時点で bundle ファイルを破棄する場合は --no-backup を指定してください。

本コマンドでの操作は、 履歴の書き換えではないので、 対象リビジョンが public フェーズでも、 実行可能です。 但し、 除外対象リビジョンが、 他リポジトリに反映済みである場合、 そのリビジョンは pull 操作により、 再び手元のリポジトリに出現することでしょう。

成功時のコマンド終了値は 0 です。

オプション:

-r, --rev <リビジョン[+]>
 指定リビジョンの削除 (本オプション無しでもリビジョン指定可能)
-f, --force リビジョンを強制的に削除し、 未コミット変更内容を破棄(保存無し)
-b, --backup 指定リビジョンよりリビジョン番号が大きく子孫以外のものを bundle 化(非推奨)
--no-backup バックアップ作成の抑止
--nobackup バックアップ作成の抑止(非推奨)
-n ※ このオプションは無視されます (非推奨)
-k, --keep 処理中の作業領域変更を抑止
-B, --bookmark <値>
 指定ブックマークから、 到達可能なリビジョンのみを除外

[+] 印付きのオプションは複数回指定可能です

transplant

別ブランチからのリビジョンの移植

本エクステンションにより、 一連のリビジョン群を別な親リビジョン (リポジトリ横断も可能) の先に移植できます。 移植はパッチ形式 ('diff') を元に実施されます (※ 訳注: rebase や graft は 3-way マージで実施)。

移植されたリビジョンの情報は、 移植先リビジョンのハッシュ値から、 移植元リポジトリにおけるハッシュ値への変換一覧として、 .hg/transplant/transplants に記録されます。

コマンド

transplant

別ブランチからのリビジョン移植:

hg transplant [-s REPO] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]...

移植対象リビジョンは、 作業領域の親リビジョンの子孫として、 コミットログを維持しつつ複製されます。 移植での複製により、 移植対象と同内容のリビジョンが、 履歴上に2回 (識別子はそれぞれ異なる) 登場することになります。

移植元/先が同一リポジトリの場合は、 graft の使用を検討しましょう。 graft の内部処理は 3-way マージを使用するため、 多くの場合で transplant よりも良い結果が得られます。未公開リビジョンの移動の場合は、rebase エクステンションを使用してください。

--log が指定された場合、 以下の形式のコメントがログに付加されます:

(transplanted from 移植元リビジョンのハッシュ値)

--filter によりコミットログを改変することができます。 指定された値は、 コマンド起動に使用され、 コマンドの第1引数にはコミットログ、 第2引数にはパッチが格納されたファイルが指定されます。

移植対象リビジョンは --source/-s で指定したリポジトリから、 移植時に取り込むことが可能です。 --branch/-b が指定された場合、 指定ブランチのみの履歴取り込みを仮定して、 移植対象が決定されます。 --all/-a が指定された場合は、 指定リビジョンに至る全リビジョンが、 移植対象とみなされます。

実行例:

  • REV までの全リビジョンを、現リビジョン上に移植:

    hg transplant --branch REV --all
    

任意のリビジョンに対して --merge 指定をした場合、 当該リビジョンの移植は、 複製による通常の方法の代わりに、 当該リビジョンとのマージで実現されます。 本コマンドに対して、 移植対象として指定されたリビジョンのうち、マージ実施リビジョンは、 移植対象から除外されます。 また、 マージ実施リビジョンの祖先は、 自動的には移植対象に含まれません。 そのため、 マージ実施リビジョン、 またはその子孫の移植に関しては、 こちらの方法も検討してください。 (※ 訳注: この段落の翻訳は、 わかりやすさを重視して、 原文から大幅に改変してあります。 適宜原文のヘルプも参照してください)

hg transplant --parent 実行での、 適切な親リビジョン指定により、 マージ実施リビジョンを、 直接移植可能です。

マージ指定もリビジョン指定もない場合、 hg transplant は対話的に移植を実施します。

衝突により移植が失敗した場合、 手動での衝突解消後に hg transplant --continue/-c を実行することで、 中断された移植を再開可能です。

オプション:

-s, --source <リポジトリ>
 指定リポジトリからのリビジョンの移植
-b, --branch <リビジョン[+]>
 指定リビジョンを移植元のヘッドとみなす
-a, --all --branch での指定ブランチの全てを取り込む
-p, --prune <リビジョン[+]>
 指定リビジョンのスキップ
-m, --merge <リビジョン[+]>
 指定リビジョンの移植をマージで実現
--parent <リビジョン>
 移植でのマージに使用する親リビジョン
-e, --edit コミットログ入力にエディタを起動
--log コミットログへの移植情報の付与
-c, --continue 中断された未完了の移植を再開
--filter <コマンド>
 コマンドによるリビジョンのフィルタリング

[+] 印付きのオプションは複数回指定可能です

win32mbcs

問題ある文字コードをパス名に使用する場合の対処

パス名の取り扱い(例: パス要素の分割、 文字大小変換等)上、 不適切な文字を 含む多バイト符号化文字セット(MBCS)が存在します。 ここではそのような文字 セット(例: shift_jis および big5)を「問題文字コード」と呼びます。 本エクステンションは、 パス操作の実施前に unicode 文字列化する処理を 割り込ませることで、 問題文字コードによって発生する障害を防ぎます。

このエクステンションは以下の場合に有用です:

  • shift_jis 文字コードを使用する日本語 Windows のユーザ
  • big5 文字コードを使用する中国語 Windows のユーザ
  • 文字大小を区別できないファイルシステム上で、 問題文字コードを 使用したリポジトリを運用するユーザ

このエクステンションは以下の場合には不要です:

  • パス名に ASCII 文字しか使用しないユーザ
  • 問題文字コードを使用しないユーザ

このエクステンションの利用には幾つかの制限があります:

  • リポジトリ内では単一の文字コードを使用してください
  • リポジトリパス末尾が 0x5c の場合、 .hg/hgrc が読み出せません
  • win32mbcs は fixutf8 エクステンションと互換性がありません

指定の無い場合、 win32mbcs は Mercurial により決定される (Python プログラム上の) encoding.encoding 変数値を使用します。 以下の設定記述により、 文字コードを指定することができます:

[win32mbcs]
encoding = sjis

ログメッセージの文字コードに UTF-8 を使用したいユーザ等に有用です。

win32text

改行形式の自動変換 (非推奨)

非推奨: リポジトリの複製の際に設定は複製されないため、 win32text エクステンションは個々の複製/個々のユーザごとに都度設定する必要が あります。

そのため、 代替手段として eol エクステンションが提供されています。 eol エクステンションでは、 構成管理可能なファイルによる設定が 可能ですので、 複製したリポジトリは最初から適切な状態で使用できます。

改行形式の自動変換を行う場合、 以下のように設定します:

[extensions]
win32text =
[encode]
** = cleverencode:
# または ** = macencode:

[decode]
** = cleverdecode:
# または ** = macdecode:

変換はしないものの、 間違った改行形式でのコミットを防止したい場合は:

[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
# または pretxncommit.cr = python:hgext.win32text.forbidcr

意図せぬ履歴反映の防止のために、 サーバ側で同様の確認を行いたい場合は:

[hooks]
pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
# または pretxnchangegroup.cr = python:hgext.win32text.forbidcr

zeroconf

ローカルネットワーク上でのリポジトリの検出/公開

Zeroconf が有効化されたリポジトリは、 サーバーやサービスの設定無しに、 ネットワーク上に告知されます。 対象のIPアドレス等を知らなくても、 告知されたリポジトリを検出できます。

hg serve を稼動中のリポジトリが、 他の利用者から検出可能になります:

$ cd test
$ hg serve

hg paths を使うことで、 Zeroconf が有効なリポジトリを検出できます:

$ hg paths
zc-test = http://example.com:8000/test

関連ファイル

/etc/mercurial/hgrc, $HOME/.hgrc, .hg/hgrc
これらのファイルには、 各種設定値を記述します。 .hg/hgrc での記述は $HOME/.hgrc での記述を、$HOME/.hgrc での記述は /etc/mercurial/hgrc での記述を、それぞれ上書きします。 これらのファイルに関する詳細は、 hgrc(5) を参照してください。
.hgignore
このファイルには、 hg コマンドに無視して欲しいファイル名を、 一行一パターンで記述します。 詳細は hgignore(5) を参照してください。
.hgsub
このファイルには、 サブリポジトリの位置とアクセス先を記述します。 詳細は hg help subrepos を参照してください。
.hgsubstate
このファイルには、 サブリポジトリの状態が書き込まれます。 NB: このファイルは手動で変更しないでください。
.hgtags
このファイルには、 リポジトリ内のタグ付けされたリビジョンに対応する、 リビジョンIDとタグ名の対 (の空白区切り) が書き込まれます。 このファイルの文字コードには UTF-8 が使用されます。
.hg/last-message.txt
このファイルには、 コミット失敗に備えて、 hg commit 実行時に、 コミットメッセージがバックアップされます。
.hg/localtags
このファイルには、 リポジトリ間で共有されないローカルなタグの定義が、 記録されます。 ファイルの形式は .hgtags と同じですが、 文字コードにはローカルの文字コードが使用されます。

コマンドの中には、 .orig 拡張子付きのファイルに、 ファイルの内容を、 バックアップするものもあります (例: hg revert)。 バックアップと同名の .orig ファイルが存在し、且つ Mercurial の管理対象でない場合、 そのファイルの内容は、 バックアップによって上書きされます。

不具合

不具合を見つけた場合は、 メーリングリスト ( 後述する 各種情報 参照) までお知らせください。(※ 訳注: 日本語翻訳の不具合等は、 日本語メーリングリスト mercurial-ja へのメール投函や、 Twitter で #mercurialjp ハッシュタグをつけてつぶやいてください)

他の参照先

hgignore(5), hgrc(5)

著者

Matt Mackall <mpm@selenic.com>

各種情報

ウェブサイト: http://mercurial.selenic.com/

ソースコードリポジトリ: http://selenic.com/hg

メーリングリスト: http://selenic.com/mailman/listinfo/mercurial

Copying

Copyright (C) 2005-2014 Matt Mackall. 本ソフトウェアは、 バージョン2またはそれ以降の GNU General Public License の元での自由な利用が保証されています。