Author: | Matt Mackall <mpm@selenic.com> |
---|---|
Organization: | Mercurial |
Manual section: | 1 |
Manual group: | Mercurial Manual |
Contents
hg command [option]... [argument]...
hg コマンドは、 Mercurial のコマンドラインインタフェースです。
-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 | 不可視状態のリビジョンも対象に含める |
[+] 印付きのオプションは複数回指定可能です
指定ファイルの追加登録予約:
hg add [OPTION]... [FILE]...
構成管理へのファイルの追加登録を予約します。
指定されたファイルは、 次回のコミットから構成管理対象となります。 追加登録のコミット前取り消しは hg help forget を参照してください。
ファイル名指定が無い場合、 作業領域中の全ファイルが対象となります (.hgignore による無視指定対象は除く)。
例:
hg add による unknown 扱いのファイルの自動的な追加登録:
$ ls foo.c $ hg status ? foo.c $ hg add adding foo.c $ hg status a foo.cファイル名指定による特定ファイルの追加登録:
$ ls bar.c foo.c $ hg status ? bar.c ? foo.c $ hg add bar.c $ hg status a bar.c ? foo.c
全てのファイルの登録が成功した場合のコマンド終了値は 0 です。
オプション:
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
-n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
[+] 印付きのオプションは複数回指定可能です
新規ファイルの追加登録、 および不在ファイルの登録除外:
hg addremove [OPTION]... [FILE]...
作業領域中の新規ファイルの追加登録、 および全不在ファイルの登録除外を 行ないます。
.hgignore 中の記述パターンに合致するファイルは、 明示的な指定がない限り、 無視されます。 hg add と同様に、 実行効果が発揮されるのは、 次回の hg commit 時点です。
ファイルの改名を検知するには -s/--similarity を使用します。 これは、 0 (改名比較無し) から 100 (完全一致で判定) の範囲で、 類似度を指定 するオプションです (パーセンテージ指定)。 0 より大きい指定値の場合、 全ての追加/除外ファイル対象として、 改名の有無が判定されます。 改名判定には、 相応の時間を要する場合があります。 判定結果の確認は、 本コマンドの実行後に hg status -C 出力を参照してください。 -s/--similarity 未指定の場合、 100 が指定されたものとみなされ、 内容が完全に一致するファイルのみが、 改名とみなされます。
例:
ファイル bar.c や foo.c が新規作成された一方で、foobar.c が作業領域から手動 (hg remove 実行なし) で削除されたケース:
$ ls bar.c foo.c $ hg status ! foobar.c ? bar.c ? foo.c $ hg addremove adding bar.c adding foo.c removing foobar.c $ hg status a bar.c a foo.c r foobar.cファイル foobar.c を手動 (hg rename なし) で改名した上で、 多少の変更が加えられたケース:
$ ls foo.c $ hg status ! foobar.c ? foo.c $ hg addremove --similarity 90 removing foobar.c adding foo.c recording removal of foobar.c as rename to foo.c (94% similar) $ hg status -c a foo.c foobar.c r foobar.c
全てのファイルの登録が成功した場合のコマンド終了値は 0 です。
オプション:
-s, --similarity <類似度> | |
ファイル改名推定の際の類似度(0 以上 100 以下) | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
[+] 印付きのオプションは複数回指定可能です
ファイル行毎のリビジョン情報表示:
hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...
ファイルの各行毎に、 その内容が由来するリビジョンIDを表示します。
本コマンドは、 変更の実施者または実施時期を特定するのに有用です。
--file, --user, --date のいずれかが指定された場合、 明示的な --number 指定がない限り、 由来リビジョン番号は表示されません。
-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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
[+] 印付きのオプションは複数回指定可能です
別名: blame
特定リビジョン時点のアーカイブのリポジトリ外への生成:
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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
以前のリビジョンにおける変更の打ち消し:
hg backout [OPTION]... [-r] REV
対象リビジョン内容の打ち消しに相当する変更を、 作業領域で作成します。 衝突なしで打ち消しができた場合は、 変更内容を自動的にコミットします。
作業領域の親リビジョンを打ち消す場合、 打ち消しに相当する内容は、 自動的にコミットされます (--no-commit 指定時を除く)。
Note
hg backout による打ち消し機能は、マージ実施リビジョンに対しては、 適用できません。
例:
作業領域親リビジョンの打ち消し。 打ち消し内容は即時コミットされます:
hg backout -r .
以前のリビジョン 23 での変更内容の打ち消し:
hg backout -r 23
以前のリビジョン 23 での変更内容の打ち消しをしつつ、 打ち消し内容のコミットは保留:
hg backout -r 23 --no-commit hg commit -m "backout revision 23"
特に指定が無い場合、 打ち消しリビジョンは、 単一の親リビジョンしか持たない、 一直線の履歴となるように作成されます。 --merge を指定した場合は、 2つの親リビジョンを持つようになります。 一方の親は作業領域の親リビジョン、 もう一方は、 打ち消しリビジョン (= 打ち消し対象の新規子リビジョン) です。
1.7 版より前の本コマンドの --merge 無し時挙動は、 打ち消しを --merge 付きで実行した後に hg update --clean . 実行したものと等価です。 ここでの hg update --clean . 実行は、 マージ実施をキャンセルし、 後から別途マージできるように、 打ち消しリビジョンを、 ヘッドのまま残す働きをします。
-d/--date での日時表記は hg help dates を参照してください。
ファイルの内容を、 別のリビジョン時点のもので上書きする方法は、 hg help revert を参照してください。
成功時のコマンド終了値は 0、 打ち消しが必要なリビジョンが無い場合や、 未解消の衝突が発生した場合は 1 です。
オプション:
--merge | 打ち消しリビジョンを現親リビジョンとマージ |
--commit | 衝突が検出されない場合のコミット実施 (非推奨) |
--no-commit | コミット実施の抑止 |
--parent <リビジョン> | |
打ち消しリビジョンとのマージ対象 (非推奨) | |
-r, --rev <リビジョン> | |
打ち消し対象リビジョン | |
-e, --edit | コミットログ入力にエディタを起動 |
-t, --tool <値> | マージツールの指定 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-l, --logfile <ファイル> | |
コミットログをファイルから読み込み | |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 |
[+] 印付きのオプションは複数回指定可能です
リビジョンの二分探索:
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
foo と bar の両方を変更したリビジョン以外をスキップ:
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 | 対象リビジョンによる作業領域内容の更新を抑止 |
ブックマークの、新規作成、又は既存の一覧表示:
hg bookmarks [OPTIONS]... [NAME]...
リビジョンへのラベルであるブックマークは、 作業履歴の追跡を助けます。 ブックマークへの操作は履歴記録されず、 移動・削除・改名も可能です。 ブックマークの削除・移動による、 対象リビジョンへの影響はありません。
ブックマークの作成や更新は、 ブックマークを 'アクティブ' 化します。 アクティブなブックマークは '*' 付きで表示されます。 コミットの際に、 アクティブなブックマークの参照先は、 新規リビジョンへと移動します。 アクティブブックマークは、 リビジョン指定無し hg update で移動が、 リビジョン指定付き hg update で非アクティブ化が発生します。
ブックマークは、 リポジトリ間での取り込みや反映が可能です (hg help push および hg help pull 参照)。 連携先リポジトリで、 同名ブックマークの参照先が分岐 (divergent) する場合、 'ブックマーク名@連携先' 形式の '分岐ブックマーク' が新規作成されます。 履歴の分岐は hg merge で解消してください。
ブックマーク '@' が存在する場合、 hg clone での作業領域更新の、 デフォルト対象リビジョンとして使用されます。
例:
新規開発ライン向けに、アクティブブックマークを作成:
hg book new-feature
非アクティブブックマークをマーキング代わりに作成:
hg book -i reviewed
作業領域親リビジョン以外を指す非アクティブブックマークを作成:
hg book -r .^ tested
ブックマーク turkey を dinner に改名:
hg book -m turkey dinner
ブックマーク '@' を作業領域親リビジョンに強制的に移動:
hg book -f @
オプション:
-f, --force | 強制実施 |
-r, --rev <リビジョン> | |
ブックマーク操作対象リビジョン | |
-d, --delete | 指定ブックマークの削除 |
-m, --rename <OLD> | |
指定ブックマークの改名 | |
-i, --inactive | ブックマークを非アクティブ化 |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) 別名: bookmark |
ブランチ名の設定、 または現ブランチ名の表示:
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 | ブランチ名設定を解消し、 親リビジョンのブランチに戻る |
リポジトリ中の名前付きブランチの一覧:
hg branches [-c]
リポジトリ中の名前付きブランチを、 非アクティブ (inactive) か否かと共に一覧表示します。 -c/--closed 指定時には、 閉鎖済みのブランチ (hg commit --close-branch 参照) も表示されます。
作業領域の内容を既存ブランチのもので更新する場合は hg update を 使用してください。
コマンドの終了値は 0 です。
オプション:
-a, --active | 未マージなヘッドを持つブランチのみを表示 (非推奨) |
-c, --closed | 閉鎖済みヘッドも表示 |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
バンドルファイルの生成:
hg bundle [-f] [-t TYPE] [-a] [-r REV]... [--base REV]... FILE [DEST]
連携対象リポジトリに存在しないリビジョンの情報を、 バンドルファイルに書き出します。
-a/--all (又は --base null) 指定がある場合、 バンドルファイルには、 リポジトリの全ての履歴が書き出されます。 明示的な --base 指定の場合、 指定リビジョン以降の履歴が書き出されます。 それ以外の場合は、 指定の連携先 (又は paths での default-push/default 指定先) から、 書き出し対象リビジョンを判断します。
出力形式は -t/--type で指定可能です。 圧縮形式名、 バンドル形式名、 あるいは - で連結した併記形式 (comp-bundle) で指定できます。 利用可能な圧縮形式は none (無圧縮), bzip2, gzip です。 (デフォルト値: bzip2) 利用可能なバンドル形式は v1 と v2 です。 (デフォルト値: 自動選択)
バンドルファイルは 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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
指定されたリビジョン時点のファイル内容の出力:
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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
既存リポジトリの複製:
hg clone [OPTION]... SOURCE [DEST]
既存リポジトリを、 新規ディレクトリに複製します。
複製先ディレクトリ指定が無い場合、 複製元パス名の末尾要素を使用します。
後々の hg pull 実施に備えて、 複製先リポジトリの .hg/hgrc ファイルには、 複製元リポジトリ位置が default 名義で記録されます。
複製先に指定可能なのは、 ローカルファイルシステム上のパスと、 ssh:// 形式 URL のみです。 ssh:// 形式 URL を指定した場合、 作業領域の更新や、 .hg/hgrc の生成は行われません。
複製元リポジトリにブックマーク '@' が設定されている場合、 特に指定がなければ、 複製先の作業領域は、 そのリビジョンで更新されます。
特定のリビジョンで、 作業領域を更新する場合は -u/--update を、 作業領域にデータを持ちたくない場合は -U/--noupdate を指定します。
-r/--rev でのリビジョン指定や、 -b/--branch でのブランチ指定により、 一部のリビジョンのみを取り込むことができます。 複製先のリポジトリは、 指定リビジョンと、 その祖先のみを保持します。 これらのオプション指定 (あるいは hg clone src#rev dest 形式での複製) がある場合、 同一ファイルシステム上のリポジトリの複製でも、 --pull 指定時と、 同様に振舞います。
Note
リビジョン指定にタグ名を用いた場合、 タグ「対処」リビジョンは、 複製先に取り込まれますが、 タグ「実施」リビジョンは取り込まれません。
複製元/複製先が、 同一ファイルシステム上にある場合、 資源効率の点から、 (リポジトリの内部管理データに対してのみ) ハードリンクが使用されます。 ハードリンク実装が不適切な、 ファイルシステム (例: AFS) は、 ハードリンク使用時に、 エラー通知がありません。 このような場合には --pull を指定することで、 ハードリンク使用を抑止してください。
リポジトリの内部管理データと作業領域中のファイル全てに対する、 ハードリンクによる複製の作成には、 以下の方法が使えるかも知れません:
$ cp -al REPO REPOCLONE
この方法は最速の複製方法かもしれませんが、 常に安全とは限りません。 操作の単一性は保障されません (複製中のリポジトリの変更防止は、 利用者責務) し、 利用するエディタのファイル変更時の振る舞いが、 ハードリンクを破棄するものである必要があります (Emacs および多くの Linux 系ツールは、 そのように振舞います)。 この制約は、 MQ エクステンションのように、 .hg ディレクトリ配下に、 管理情報を格納するツールとは相容れません。
Mercurial は、 以下の一覧中で最初に利用可能なリビジョンを用いて、 作業領域を更新します:
サーバ経由で複製した場合、 サーバ側で事前に作成されたデータを元に、 複製を行う可能性があります (サーバ側設定次第)。 そのような場合は、 incoming, changegroup 系フックが、 事前作成データの取り込みで一度、 追加履歴の取り込みでもう一度、 合計二度実行されることになります。 また、 エラーでの複製中断時も、 複製先に履歴が残る可能性があります。 この挙動は将来変更されるかもしれません。 詳細は hg help -e clonebundles を参照してください。
例:
遠隔ホストのリポジトリを、 新規 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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
指定ファイルまたは全ての変更内容のリポジトリへの記録:
hg commit [OPTION]... [FILE]...
指定されたファイルの変更内容を、 管理領域に記録 (コミット) します。 中央集権的な構成管理ツールと異なり、 この操作で変更が記録されるのは、 手元の管理領域に対してのみです。 能動的な変更伝播に関しては、 hg help push を参照してください。
ファイル指定が省略された場合、 hg status により検出される全ての 変更内容がコミットされます。
hg merge 結果をコミットする場合、 ファイル名または -I/-X の、 いずれも指定しないでください。
コミットログが指定されない場合、 メッセージ入力用のプログラムが、 設定に従って起動されます。 コミット処理が失敗した場合でも、 入力したメッセージは .hg/last-message.txt に保存されます。
--close-branch 指定により、 現ブランチヘッドが閉鎖されます。 当該ブランチにおける、 全ブランチヘッドの閉鎖をもって、 そのブランチの閉鎖とみなし、 以後は一覧に列挙されません。
--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 です。
例:
.py 拡張子を持つ全てのファイルの変更を記録:
hg commit --include "set:**.py"
全ての非バイナリ形式ファイルの変更を記録:
hg commit --exclude "set:binary()"
作業領域の親リビジョンの再コミット (日付を現在時刻に更新):
hg commit --amend --date now
オプション:
-A, --addremove | |
新規/不在ファイルを、コミット前に登録/除外対象化 | |
--close-branch | ブランチヘッドを閉鎖します |
--amend | 作業領域の親リビジョンの改変 |
-s, --secret | secret フェーズでコミット中 |
-e, --edit | コミットログ入力にエディタを起動 |
-i, --interactive | |
操作対象変更の対話的な選択 | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-l, --logfile <ファイル> | |
コミットログをファイルから読み込み | |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
[+] 印付きのオプションは複数回指定可能です
別名: ci
全設定ファイルによる最終的な設定内容の表示:
hg config [-u] [NAME]...
引数指定が無い場合、 全ての設定項目に対して、 名前と値を表示します。
'section.name' 形式に合致する引数を1つだけ指定した場合、 その設定項目 値のみを表示します。
複数の引数が指定された場合、 それらをセクション名とみなし、 該当する セクションの設定項目を全て表示します。
--edit 指定のある場合、 ユーザ毎設定ファイルの編集を開始します。 --global 指定のある場合は、 システムワイド設定ファイルが、 --local 指定のある場合は、 リポジトリ毎設定ファイルが、 編集対象になります。
--debug 指定がある場合、 設定項目毎に記述位置(ファイル名と行番号)が 表示されます。
設定ファイルに関する詳細は hg help config を参照してください。
成功時のコマンド終了値は 0、指定セクション不在時は 1 です。
オプション:
-u, --untrusted | |
信頼できない設定項目も表示 | |
-e, --edit | ユーザ毎設定ファイルの編集 |
-l, --local | リポジトリ毎設定ファイルの編集 |
-g, --global | システムワイド設定ファイルの編集 別名: showconfig debugconfig |
指定されたファイルの複製:
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
作業領域全体(または指定ファイル)の差分抽出:
hg diff [OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...
指定されたファイルに対して、 リビジョン間の差分を表示します。
差分は unified diff 形式で表示されます。
Note
マージ実施リビジョンに対する hg diff 結果が、 想定と異なる場合があるのは、 対象リビジョン無指定時の比較対象が、 作業領域の第1親に固定されているためです。
リビジョン指定が2つの場合、 指定リビジョン間の差分が表示されます。 リビジョン指定が1つの場合、 作業領域が指定リビジョンと比較されます。 リビジョン指定がない場合、 作業領域が第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 | 差分表示の際に日付情報の表示を抑止 |
--noprefix | ファイル名の接頭辞 a/ と b/ の省略 |
-p, --show-function | |
差分表示の際に関数名情報を表示 | |
--reverse | 変更を取り消すための差分を生成 |
-w, --ignore-all-space | |
差分判定の際に空白文字を無視 | |
-b, --ignore-space-change | |
差分判定の際に空白文字の数を無視 | |
-B, --ignore-blank-lines | |
差分判定の際に空白行を無視 | |
-U, --unified <数値> | |
差分コンテキストの行数 | |
--stat | diffstat 形式の変更概要を出力 |
--root <ディレクトリ> | |
差分生成の起点ディレクトリ指定 | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
[+] 印付きのオプションは複数回指定可能です
1つ以上のリビジョンに対するヘッダおよび変更内容の出力:
hg export [OPTION]... [-o OUTFILESPEC] [-r] [REV]...
指定リビジョンに対して、 ヘッダ情報および変更内容を表示します。 リビジョン指定が無い場合は、 作業領域の第1親指定とみなします。
ヘッダ情報として表示される情報は:作成者/日付/ (default 以外の場合は)ブランチ名前/ハッシュ値/親リビジョン/コミットログ
Note
マージ実施リビジョンに対する hg export 結果が、 期待と異なる場合があるのは、 差分出力の際の比較対象が、 当該リビジョンの第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 | 差分表示の際に日付情報の表示を抑止 |
[+] 印付きのオプションは複数回指定可能です
管理対象ファイルの一覧表示:
hg files [OPTION]... [PATTERN]...
作業領域又は指定リビジョンにおける、 管理対象ファイルを一覧表示します (登録除外されたファイルは、 対象から除外されます)。
パターン指定が無い場合、 本コマンドは構成管理対象下にある作業領域中の 全てのファイル名を表示します。
例:
現ディレクトリ配下の全てのファイルの列挙:
hg files .
現親リビジョンにおけるサイズ・フラグ情報の表示:
hg files -vr .
README という名前のファイルの一覧:
hg files -I "**/README"
バイナリ形式ファイルの一覧:
hg files "set:binary()"
正規表現に合致する内容のファイルの一覧:
hg files "set:grep('bob')"
xargs と grep コマンドを併用したファイルの検索:
hg files -0 | xargs -0 grep foo
ファイルの指定方法の詳細に関しては hg help patterns および hg help filesets を参照してください。
パターン合致がある場合のコマンド終了値は 0、 それ以外は 1 です。
オプション:
-r, --rev <リビジョン> | |
当該リビジョン時点のファイル一覧から検索 | |
-0, --print0 | ファイル名をNUL文字(0x00)で終端(xargs との併用向け) |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
[+] 印付きのオプションは複数回指定可能です
次回コミットにおける指定ファイルの登録除外:
hg forget [OPTION]... FILE...
指定ファイルの次回コミットにおける登録除外を予約します。
本コマンドでの登録除外は、 現ブランチにおける登録除外のみを意味し、 履歴そのものは保持され続けますし、 作業領域からも削除されません。
作業領域中のファイルを削除する場合は hg remove を使います。
登録除外操作のコミット前取り消しは、 hg help add を参照して ください。
例:
新規追加のバイナリファイルを登録除外:
hg forget "set:added() and binary()"
.hgignore による無視対象ファイルを登録除外:
hg forget "set:hgignore()"
成功時のコマンド終了値は 0 です。
オプション:
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
別ブランチ上から現行ブランチへの指定リビジョンの複製:
hg graft [OPTION]... [-r REV]... REV...
本コマンドは、 あるブランチから別のブランチへ、 Mercurial のマージ機能でリビジョンを複製しますが、 履歴上はマージされません。 これは 'backport' または 'cherry-picking' と呼ばれる機能です。 特に指定の無い場合、 ユーザ名、 日付、 コミットログは、 元リビジョンのものを再利用します。
現行リビジョンの祖先、 既に移植 (graft) 済みのリビジョン、 マージ実施リビジョンは、 複製対象から除外されます。
--log が指定された場合、 以下の形式のコメントがログに付加されます:
(grafted from 移植元リビジョンのハッシュ値)
移植対象リビジョン、 あるいはその移植先リビジョンが、 移植先にとって、 祖先となる場合 (※ 訳注: 前者は直接的、 後者は間接的な祖先) でも、 --force が指定された場合には、 移植が実施されます。 hg backout で打ち消されている移植対象の、 再適用等で有用です。
本コマンドのマージ処理で衝突が検出された場合、 処理が中断されるので、 手動で衝突を解決してください。 全ての衝突が解消されたならば、 -c/--continue 指定により、 未完了の移植を再開してください。
Note
-c/--continue での移植再開の際には、 再度明示的に指定しない限り、 以前に指定したオプションは適用されません (但し --force 除く)。
例:
コミットログを改変しつつ単一リビジョンを stable へ複製:
hg update stable hg graft --edit 9393
日付を更新しつつ、2091 を除く指定範囲中のリビジョンを複製:
hg graft -D "2085::2093 and not 2091"
衝突解消後における、未完了の移植の再開:
hg graft -c
複製元リビジョンの表示:
hg log --debug -r .
日付の昇順で整列した履歴の表示:
hg log -r "sort(all(), date)"
リビジョン指定の詳細は hg help revisions および hg help revsets を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-r, --rev <リビジョン[+]> | |
移植対象リビジョン | |
-c, --continue | 中断された未完了の移植を再開 |
-e, --edit | コミットログ入力にエディタを起動 |
--log | コミットログへの移植情報の付与 |
-f, --force | 移植の強制実施 |
-D, --currentdate | |
現時刻をコミット日時として記録 | |
-U, --currentuser | |
現ユーザをコミットユーザとして記録 | |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 | |
-t, --tool <値> | マージツールの指定 |
-n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
[+] 印付きのオプションは複数回指定可能です
特定のパターンに合致するファイルとリビジョンの検索:
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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
ブランチヘッドを表示:
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 <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
指定されたトピックのヘルプや、 ヘルプ概要の表示:
hg help [-ecks] [TOPIC]
引数指定が無い場合、 コマンドの一覧と概要を表示します。
トピックやコマンド名が指定された場合、 指定対象のヘルプを表示します。
成功時のコマンド終了値は 0 です。
オプション:
-e, --extension | |
エクステンションのヘルプのみを表示 | |
-c, --command | コマンドに関するヘルプのみを表示 |
-k, --keyword | キーワードに合致するトピック一覧を表示 |
-s, --system <値[+]> | |
指定環境に固有のヘルプを表示 |
[+] 印付きのオプションは複数回指定可能です
作業領域または特定リビジョンの識別情報表示:
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/
識別用ハッシュ値等を含む、 特定リビジョンの情報参照に関する詳細は、 hg log を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-r, --rev <リビジョン> | |
当該リビジョンの識別情報を表示 | |
-n, --num | リビジョン番号を表示 |
-i, --id | ハッシュ値を表示 |
-b, --branch | ブランチ名を表示 |
-t, --tags | タグを表示 |
-B, --bookmarks | |
ブックマークの表示 | |
-e, --ssh <コマンド> | |
SSH 連携で使用する ssh コマンド | |
--remotecmd <コマンド> | |
遠隔ホスト側で実行される hg コマンド | |
--insecure | 接続先証明書の検証省略(web.cacerts 設定の無視) 別名: id |
パッチの順次取り込み:
hg import [OPTION]... PATCH...
列挙されたパッチの取り込みおよびコミットを (--no-commit 指定が無い限り) 個別に行います。
標準入力からパッチを取り込むには、 パッチ名に "-" を指定します。 URL が指定された場合、 パッチを当該 URL からダウンロードします。
取り込み作業は作業領域で実施されるため、 未コミット変更がある場合は、 取り込み操作は中断されます (--bypass 指定時除く)。
--bypass 指定時は、 作業領域内容の変更無しに、 履歴に記録します。 --exact 指定が無い場合、 変更は作業領域の親リビジョンに適用されます。
添付ファイル形式 (但し text/plain または text/x-patch 型限定) を含めて、 電子メールからもパッチを取り込めます。 作成者/コミットログが無い場合、 電子メールの From および Subject ヘッダ値を使用します。 差分データに先立つ text/plain パートは、 コミットログに追記されます。
hg export により生成されたパッチを取り込む場合、 電子メールの ヘッダやボディの情報よりも、 パッチに含まれる情報の方が優先します。 コマンドラインでの -m/--message または -u/--user 指定は、 これらよりも更に優先します。
If --exact is specified, import will set the working directory to the parent of each patch before applying it, and will abort if the resulting changeset has a different ID than the one recorded in the patch. This will guard against various ways that portable patch formats and mail systems might fail to transfer Mercurial data or metadata. See hg bundle for lossless transmission.
--partial 指定により、 パッチが部分的にしか適用されない場合でも、 新規リビジョンの生成が保証されます。 適用失敗したパッチ部位は、 対象ファイル.rej ファイルに保存されます。 適用失敗部位の問題を、 手動で解消した上で、 hg commit --amend で取り込むことも可能です。 --partial には、 パッチに含まれるメタデータ情報 (コミットユーザ名、 日付、 コミットログなど) を失うことを回避する目的があります。
Note
パッチ適用が完全に失敗した場合でも、 hg import --partial は、 メタデータのみが記録された、 新規リビジョンを作成します。
-s/--similarity が指定された場合、 hg addremove と同様な方針で、 パッチによる変更結果から、 改名や複製を検出します。
ui.patch 設定により、 外部プログラムでのパッチ適用も可能です。 デフォルトのパッチ適用で使用される Mercurial の内部処理でも、 patch.fuzz 設定により fuzz 挙動を制御可能です。 設定ファイルや、 上記設定項目の詳細に関しては hg help config を参照してください。
-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
内部パッチ適用ツールでは fuzz 要因で適用が難しいパッチを、 外部パッチツールを使って適用
hg import --config ui.patch="patch --merge" fuzzy.patch
デフォルトの fuzz 許容量 2 から緩和して 7 に設定
hg import --config ui.fuzz=7 fuzz.patch
成功時のコマンド終了値は 0、部分成功時は 1 です (--partial 参照).
オプション:
-p, --strip <数値> | |
パス要素除去数(patch コマンドの同名オプションと同機能) (デフォルト値: 1) | |
-b, --base <パス> | |
基底パス (非推奨) | |
-e, --edit | コミットログ入力にエディタを起動 |
-f, --force | 作業領域中の未コミット変更の確認を省略 (非推奨) |
--no-commit | 作業領域の更新のみで、 コミット実施を抑止 |
--bypass | 作業領域の内容を変更せずにパッチを適用 |
--partial | 適用失敗があってもコミットを実施 |
--exact | 適用時にパッチ内容が損なわれる場合は中断 |
--prefix <ディレクトリ> | |
パッチ適用先サブディレクトリの指定 | |
--import-branch | |
パッチ中のブランチ情報を利用(--exact 指定時は自動適用) | |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-l, --logfile <ファイル> | |
コミットログをファイルから読み込み | |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 | |
-s, --similarity <類似度> | |
ファイル改名推定の際の類似度(0 以上 100 以下) 別名: patch |
指定リポジトリ中の未取り込みリビジョンの検索:
hg incoming [-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]
ファイルパス、 URL または hg pull の無指定時連携先リポジトリ中の、 未取り込みリビジョンを検索します。 これらのリビジョンは hg pull を実行した際に、 取り込み対象となります。
対象リポジトリの指定形式は hg help pull を参照してください。
-B/--bookmarks 指定時は、 手元のリポジトリと連携先リポジトリとの、 ブックマーク比較結果が表示されます。 -v/--verbose が指定された場合、 各ブックマーク毎に、 以下の様な状態情報が表示されます:
BM1 01234567890a 追加 BM2 1234567890ab 更新 BM3 234567890abc 分岐 BM4 34567890abcd 変更
各ブックマークの状態に応じて、 手元のリポジトリで hg pull 時に実施される処理が異なります:
追加: | 当該ブックマークを作成 |
---|---|
更新: | 当該ブックマークを更新 |
分岐: | (@付きの)分岐先ブックマークを作成 |
変更: | 参照先リビジョンに応じて挙動が変化 |
仮に手元のリポジトリで削除されたブックマークであったとしても、 hg pull 挙動の観点から、 連携先にのみ存在するものは、 追加 扱いされます。
--bundle での書き出し結果を利用した hg pull の実施は、 hg 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
指定されたディレクトリでの新規リポジトリの作成:
hg init [-e CMD] [--remotecmd CMD] [DEST]
指定されたディレクトリに新規リポジトリを作成します。 指定された ディレクトリが存在しない場合には、 ディレクトリを作成します。
ディレクトリが指定されない場合、 現ディレクトリが初期化されます。
複製先として ssh:// URL 形式を指定することも可能です。 詳細に関しては、 hg help urls を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-e, --ssh <コマンド> | |
SSH 連携で使用する ssh コマンド | |
--remotecmd <コマンド> | |
遠隔ホスト側で実行される hg コマンド | |
--insecure | 接続先証明書の検証省略(web.cacerts 設定の無視) |
指定されたパターンに合致する名前を持つファイルの特定 (非推奨):
hg locate [OPTION]... [PATTERN]...
構成管理対象となるファイルの中から、 指定されたパターンに合致する 名前のファイルを特定します。
特に指定が無い場合、 本コマンドは構成管理対象となる作業領域中の 全ディレクトリを検索対象とします。 現ディレクトリとその配下のみを検索 対象とする場合は "--include ." を指定します。
パターン指定が無い場合、 本コマンドは構成管理対象下にある作業領域中の 全てのファイル名を表示します。
本コマンドの出力を "xargs" コマンドへと渡す場合、 本コマンドと "xargs" コマンドの両方に "-0" を指定してください。 空白文字を 含む単一のファイル名を、 "xargs" が複数のファイル名に解釈して しまう問題は、 このオプションにより解消されます。
より高機能な hg files コマンドのヘルプを参照してください。
パターン合致がある場合のコマンドの終了値は 0、 それ以外は 1 です。
オプション:
-r, --rev <リビジョン> | |
当該リビジョン時点のファイル一覧から検索 | |
-0, --print0 | ファイル名をNUL文字(0x00)で終端(xargs との併用向け) |
-f, --fullpath | ファイルシステムのルートからの絶対パスで表示 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
リポジトリ全体またはファイルの変更履歴の表示:
hg log [OPTION]... [FILE]
特定のファイルまたはリポジトリ全体の変更履歴を表示します。
特に指定されない場合、 対象となるリビジョンの範囲は tip:0 とみなされますが、 --follow が指定された場合は、 作業領域の 親リビジョンが開始リビジョンとみなされます。
ファイルの履歴表示では、 改名/複製時の元ファイルにまでさかのぼった 履歴は表示しません。 元ファイルの履歴をさかのぼる場合は、 ファイル名 と一緒に -f/--follow を使用します。 --follow 指定の際にファイル名が 指定されない場合は、 開始リビジョンに連なるリビジョンのみを表示 します。
特に指定が無い場合、 本コマンドが出力する情報は - リビジョン番号、 識別用ハッシュ値、 タグ、 (リビジョン番号の離れた) 親リビジョン、 作成者、 作成日時およびコミットログの1行目 - です。 -v/--verbose が指定された場合、 変更対象ファイル一覧と、 コミットログの全文も表示されます。
--graph 指定がある場合、 最新リビジョンを上にした履歴グラフ (DAG) を、 ASCII アートで描画します。 履歴グラフにおける 'o' はリビジョン、 '@' は作業領域の親、 'x' は廃止 (obsoleted) リビジョンを意味します。 また '+' は、 同一行の 'o' が '+' 下方のリビジョンを親としたマージで、 且つこのマージによって、 履歴が枝分かれしていることを表します。
Note
マージ実施リビジョンに対する hg log --patch 結果が、 期待と異なる場合があるのは、 差分出力の際の比較対象が、 当該リビジョンの第1親に固定されているためです。 また、 更新ファイル一覧に列挙されるのは、 マージ実施リビジョンでの内容が、 両方の親リビジョンのいずれとも異なるファイルのみです。
Note
hg log FILE 形式での実行時は、 実行性能劣化防止の観点から、 複数ブランチ上での同一変更や、 登録除外、 実行モードのみの変更、 といったリビジョンが、 表示対象から除外される可能性があります。 --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 . --template "{node}\n"
利用可能なテンプレートスタイル一覧の表示:
hg log -T list
リビジョン a21ccf が指定タグ時点に含まれているかを確認:
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
現時点または指定時点でのリポジトリマニフェストの出力:
hg manifest [-r REV]
指定リビジョンにおける構成管理対象ファイルの一覧を表示します。 リビジョン指定が無い場合、 作業領域の(第1)親リビジョンか、 作業領域の更新前なら null が使用されます。
-v が指定された場合、 ファイルアクセス権やシンボリックリンク、 実行可能ビットといったものも表示されます。 --debug が指定された場合、 各ファイルのリビジョンのハッシュ値が 表示されます。
--all が指定された場合、 リビジョンに関わる全ファイルが表示されます。 この場合、 削除/改名対象ファイルも含まれます。
成功時のコマンド終了値は 0 です。
オプション:
-r, --rev <リビジョン> | |
表示対象リビジョン | |
--all | 関連する全ファイルの表示 |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
他リビジョンを作業領域にマージ:
hg merge [-P] [[-r] REV]
現時点での作業領域の内容を、 指定されたリビジョンへと至るまでの 共通の親リビジョンからの変更内容とマージします。
両方の親リビジョンに対して差分のあるファイルは、 次回コミットの際には 変更されたものとして記録されますので、 必要以上の変更が実施される前に コミットを実施してください。 このコミット時に生成されるリビジョンは、 親リビジョンを2つ持つリビジョンとなります。
--tool を使用することで、 ファイルのマージに使用するコマンドを指定可能です。 このオプションによる指定は、 HGMERGE 環境変数や設定ファイルによる指定を上書きします。 指定の詳細に関しては、 hg help merge-tools を参照してください。
マージ対象リビジョンの指定が無く、 作業領域の親リビジョンがヘッドで、 且つ現行ブランチがもう1つだけヘッドを持つ場合、 そのヘッドがマージ 対象となります。 それ以外の場合は、 明示的なリビジョン指定が必要です。
衝突の扱いに関する詳細は hg help resolve を参照してください。
コミット前にマージ処理を取り消す場合は、 hg update --clean . が使用できますが、 マージ前の親リビジョンの内容で上書きするため、 作業領域中の全ての変更内容が失われます。
成功時のコマンド終了値は 0、 未解消ファイルがある場合は 1 です。
オプション:
-f, --force | 作業領域中の未コミット変更ごとマージを実施 (非推奨) |
-r, --rev <リビジョン> | |
マージ対象リビジョン | |
-P, --preview | マージ対象リビジョンの確認(マージ処理は未実施) |
-t, --tool <値> | マージツールの指定 |
連携先リポジトリに含まれないリビジョンの表示:
hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]
指定された連携先リポジトリ (または、 無指定時の hg push 先リポジトリ) に含まれないリビジョンを表示します。 ここで表示されるリビジョンは、 hg push 実施の際に、 連携先へと反映されます。
有効なリポジトリ指定形式は hg pull を参照してください。
-B/--bookmarks 指定時は、 手元のリポジトリと連携先リポジトリとの、 ブックマーク比較結果が表示されます。 -v/--verbose が指定された場合、 各ブックマーク毎に、 以下の様な状態情報が表示されます:
BM1 01234567890a 追加 BM2 削除 BM3 234567890abc 更新 BM4 34567890abcd 分岐 BM5 4567890abcde 変更
各ブックマークの状態に応じて、 連携先リポジトリで hg push 時に実施される処理が異なります:
追加: | -B 併用時のみ当該ブックマークを作成 |
---|---|
削除: | -B 併用時のみ当該ブックマークを削除 |
更新: | 当該ブックマークを更新 |
分岐: | -B 併用時のみ当該ブックマークを更新 |
変更: | -B 併用時のみ当該ブックマークを更新 |
仮に連携先リポジトリで追加されたブックマークであったとしても、 hg push 挙動の観点から、 連携先にのみ存在するものは、 削除 扱いされます。
反映可能リビジョンがある場合のコマンド終了値は 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
作業領域(または指定リビジョン)の親リビジョンの表示 (非推奨):
hg parents [-r REV] [FILE]
作業領域の親リビジョンを表示します。 -r/--rev でのリビジョン指定が ある場合、 指定リビジョンの親リビジョンを表示します。 ファイルが指定 された場合、 (作業領域の親リビジョン、 または --rev 指定のリビジョン 以前のもので)そのファイルを最後に更新したリビジョンを表示します。
本コマンドは以下と等価です (※ 訳注: 2つ目以降は FILE や --rev REV 指定時の挙動に対応します):
hg log -r "p1()+p2()" hg log -r "p1(REV)+p2(REV)" hg log -r "max(::p1() and file(FILE))+max(::p2() and file(FILE))" hg log -r "max(::p1(REV) and file(FILE))+max(::p2(REV) and file(FILE))"
関連情報は hg summary や hg help revsets を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-r, --rev <リビジョン> | |
親リビジョンの表示対象 | |
--style <スタイル> | 当該スタイルで表示をカスタマイズ (非推奨) |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
連携先リポジトリの別名一覧の表示:
hg paths [NAME]
指定されたシンボル名に相当する連携先リポジトリを表示します。 シンボル名が指定されない場合、 全ての別名定義が表示されます。
-q/--quiet が指定された場合、 シンボル名検索の過程における表示は抑止され、 結果表示もシンボル名のみが表示されます。
シンボル定義は、 個人の設定ファイルや /etc/mercurial/hgrc 等の [paths] セクションに記述されます。 作業領域での実行の場合は .hg/hgrc での記述も参照されます。
default および default-push は特別な意味を持ちます。 push/pull の際にコマンド行で連携先リポジトリが指定されない場合、 これらのパスが使用されます。 default-push が設定されている場合、 default-push は hg push で使用され、 default は hg pull で使用されます。 default-push が未設定であれば、 push/pull 共に default を使用します。 リポジトリの複製では、 複製元リポジトリが default として .hg/hgrc に記録されます。
Note
default および default-push は全ての取り込み (例: hg incoming) および反映 (例: hg outgoing 、 hg email および hg bundle) 操作において適用されます。
詳細は hg help urls を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
現行フェーズ状態の変更または表示:
hg phase [-p|-d|-s] [-f] [-r] [REV...]
引数無しの場合、 作業領域の親リビジョンのフェーズ名を表示します。
-p/--public、 -d/--draft または -s/--secret が指定された場合、 指定リビジョンのフェーズを指定値に変更します。
-f/--force が指定されない限り、 低い方から高い方へのフェーズ変更は、 実施できません。 フェーズの高低は以下のように定義されています:
public < draft < secret
成功時のコマンドの終了値は 0、 フェーズ状態変更失敗時は 1 です。
(フェーズに関する詳細は、 hg help phases を参照してください)
オプション:
-p, --public | リビジョンのフェーズを public 化 |
-d, --draft | リビジョンのフェーズを draft 化 |
-s, --secret | リビジョンのフェーズを secret 化 |
-f, --force | フェーズ境界の移動を伴う強制実行 |
-r, --rev <リビジョン[+]> | |
対象リビジョン |
[+] 印付きのオプションは複数回指定可能です
指定リポジトリからの変更履歴の取り込み:
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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
指定リポジトリへの変更履歴の反映:
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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
中断されたトランザクションの取り消し:
hg recover
commit や pull が中断された場合の復旧を行います。
本コマンドは、 操作が中断された際のリポジトリ状態の修復を行います。 本コマンドの実行は、 Mercurial が実行を促した場合のみで十分です。
成功時のコマンド終了値は 0、 修復不要または修復失敗時は 1 です。
次回コミットにおける指定ファイルの登録除外:
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 |
Note
作業領域における追加 [A] 状態のファイルに関しては、 hg remove が破棄することはありません (--force 指定時含む)
成功時のコマンド終了値は 0、 警告検出時は 1 です。
オプション:
-A, --after | 手動で削除済みのファイルに対して、 登録除外の旨を記録 |
-f, --force | 追加登録の取り消しと、 変更済みファイルの登録除外 |
-S, --subrepos | サブリポジトリへの再帰的適用 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
別名: rm
ファイルの改名(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
マージの再実施、 または各ファイルのマージ状況管理:
hg resolve [OPTION]... [FILE]...
未解消の衝突の多くは internal:merge や diff3 などを使用した 非対話的なマージに由来します。 本コマンドは、 hg merge 実行後から hg commit 実行にかけて、 マージに関与するファイルを管理します。 (この際には、 作業領域は2つの親リビジョンを持つ必要があります) マージツール設定の詳細は hg help merge-tools を参照してください。
本コマンドは、 以下の形式で使用されます:
Note
衝突未解消のファイルがある間はコミットできません。 マージにおける衝突解消の際には、 コミット前に hg resolve -m ... を実施してください。
成功時のコマンド終了値は 0、 衝突解消失敗がある場合は 1 です。
オプション:
-a, --all | 衝突未解消の全ファイルを処理対象にする |
-l, --list | マージの必要なファイルの解消状態一覧 |
-m, --mark | 当該ファイルを衝突解消済み状態に設定 |
-u, --unmark | 当該ファイルを衝突未解消状態に設定 |
-n, --no-status | |
状態記号の表示を抑止 | |
-t, --tool <値> | マージツールの指定 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
[+] 印付きのオプションは複数回指定可能です
親リビジョンの状態でファイルを復旧:
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 で抑止できます。 ui.origbackuppath 設定で、 変更前内容の保存先ディレクトリを、 リポジトリルート相対で、 任意に指定できます。
-d/--date での日時表記は hg help dates を参照してください。
以前のリビジョンでの変更を打ち消す方法に関しては、 hg help backout を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
-a, --all | 引数指定が無い場合に、 全ファイルの内容を復旧 |
-d, --date <日時> | |
当該日時の最新リビジョンを使用 | |
-r, --rev <リビジョン> | |
当該リビジョン時点の内容で復旧 | |
-C, --no-backup | |
取り消し実施前内容のバックアップを抑止 | |
-i, --interactive | |
操作対象変更の対話的な選択 (実験的実装) | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
[+] 印付きのオプションは複数回指定可能です
直前のトランザクションの巻き戻し (要注意) (非推奨):
hg rollback
直前のコミットをやり直す場合は、 rollback の代わりに、極力 hg commit --amend を使用してください。
本コマンドの使用には注意を要します。 巻き戻しは1段階限りで、 巻き戻し後の再実施はできません。 直前のトランザクション時点の、 作業領域状態が復元され、 その時点以後の変更は全て失われます。 但し、 作業領域の内容は変更されません。
トランザクションとは、 コマンド実行による、 新規リビジョンの作成や、 外部からのリビジョンの取り込みといった、 リポジトリ操作を、 ひとまとめにするものです。
例えば、 以下のコマンドはいずれもトランザクションを形成するため、 本コマンドにより、 その効果を巻き戻し可能です:
データが永遠に失われるのを回避するため、 コミットの巻き戻し操作は、 作業領域の親リビジョン以外に対しては、 失敗するようになっています。 この回避挙動は --force 指定により抑止されます。
rollback コマンドは、 ui.rollback 設定を false にすることで、 使用を禁止できます。 禁止を解除して、 どうしても使用したい場合は、 明示的に ui.rollback 設定を true にしてください。
本コマンドは、 公開リポジトリでの実行を想定していません。 一旦他の ユーザから hg pull 可能な状態になってしまったなら、 公開リポジトリ でトランザクションを巻き戻しても(既に他のユーザが複製している可能性 があるので)効果を持ちません。 その上、 リポジトリからの情報読み取りに 際して、 競合が発生し得ます。 例えば、 併走している hg pull 処理が 巻き戻しによって失敗してしまう可能性があります。
成功時のコマンド終了値は 0、 巻き戻せるデータが無い場合は 1 です。
オプション:
-n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
-f, --force | 安全判定を無視 |
作業領域のルート(最上位)ディレクトリ位置の表示:
hg root
現リポジトリのルートディレクトリ位置を表示します。
成功時のコマンド終了値は 0 です。
独立したウェブサーバの実行開始:
hg serve [OPTION]...
リポジトリ参照と hg pull のための HTTP サーバを起動します。 この HTTP サーバを用いることで、 リポジトリの共有/参照を、 即席で行うことができます。 リポジトリを長期間公開する際には、 通常のウェブサーバの使用をお勧めします。
本コマンドで起動されるサーバは、 アクセス制御が実装されていません。 特に設定が無い場合、 誰もがリポジトリを参照可能で、 且つリポジトリは 誰にも更新できない状態にあります。 web.allow_push 設定を * に設定することで、 誰もがリポジトリに hg push できます。 ユーザ認証が必要な場合は、 通常のウェブサーバを使用してください。
特に指定が無い場合、 サーバはアクセスログを標準出力に、 エラーを標準エラー出力に表示します。 ログをファイルに記録する場合は、 -A/--accesslog や -E/--errorlog で指定します。
サーバに空きポート番号の検出および使用をさせる場合、 ポート番号には 0 を指定します。 この場合、 使用するポート番号が表示されます。
成功時のコマンド終了値は 0 です。
オプション:
-A, --accesslog <ファイル> | |
アクセスログの書き出し先ファイル | |
-d, --daemon | バックグラウンドでのサーバ実行 |
--daemon-postexec <値[+]> | |
(バックグラウンド実行時での内部用途向け) | |
-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 証明書ファイル |
[+] 印付きのオプションは複数回指定可能です
作業領域のファイル操作状況の表示:
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
権限設定の変更やマージが行われた場合、 hg status 結果が、 差分表示から期待される結果とは、 異なる可能性があります。 標準的な差分形式は、 権限変更の情報を含みませんし、 マージ実施リビジョンでの差分表示は、 差分出力の際の比較対象が、 当該リビジョンの第1親に固定されているためです。
1つのリビジョンが指定された場合、 比較元リビジョンとして扱われます。 2つのリビジョンが指定された場合、 両リビジョン間で状態を比較します。 --change 指定を使うことで、 第1親から変更されたファイル一覧を簡単に 表示させることができます。
ファイルの状態を表す記号は以下の通り:
M = 変更有り(Modified) A = 追加登録予定(Added) R = 登録除外予定(Removed) C = 変更無し(Clean) ! = 構成管理対象にも関わらず作業領域にファイルが無い(missing) ? = 構成管理対象外(unknown) I = 無視(Ignored) = 直前に表示される新規登録予定ファイル(A)の複製元
例:
作業領域と指定リビジョンとの間での状態変更を表示:
hg status --rev 9353
作業領域中の状態を、現ディレクトリ相対で表示 (パターン指定の詳細は hg help patterns を参照):
hg status re:
指定リビジョンにおける状態変更 (複製元含む) を表示:
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 | サブリポジトリへの再帰的適用 |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
[+] 印付きのオプションは複数回指定可能です
別名: st
作業領域状態の概要表示:
hg summary [--remote]
親リビジョン、 ブランチ、 想定コミット結果、 フェーズ、 作業領域更新候補等を含む、 作業領域状態の概要を表示します。
--remote が指定された場合、 default 連携先に対する取り込み/反映に 関する概要も表示します。 この処理には時間を要する場合があります。
成功時のコマンド終了値は 0 です。
オプション:
--remote | push/pull 実施結果の確認 別名: sum |
現リビジョンまたは指定リビジョンへのタグの付与:
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 <ユーザ> | |
指定ユーザをコミットユーザとして記録 |
リポジトリ中のタグ一覧の表示:
hg tags
本コマンドは、 通常のタグおよびローカルタグの両方を一覧表示します。 -v/--verbose が指定された場合、 ローカルタグには "local" 表示の 第3のカラムが追加されます。 -q/--quiet 指定時はタグ名のみ表示します。
成功時のコマンド終了値は 0 です。
オプション:
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ (実験的実装) |
tip リビジョンの表示 (非推奨):
hg tip [-p] [-g]
tip リビジョン (一般には単に tip と表記) とは、 リポジトリにおける、 最新の追加リビジョンです (最新の変更されたヘッドでもあります)
コミットした直後であれば、 生成されたリビジョンが tip となります。 他のリポジトリから変更履歴の取り込みをした直後であれば、 連携先 リポジトリでの tip が現リポジトリの tip となります。 "tip" タグは 特別なタグで、 改名や、 他のリビジョンへの付け替えはできません。
本コマンドは非推奨です。 hg heads を使用してください。
成功時のコマンド終了値は 0 です。
オプション:
-p, --patch | パッチ形式での表示 |
-g, --git | git 拡張差分形式の使用 |
--style <スタイル> | 当該スタイルで表示をカスタマイズ (非推奨) |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
バンドルファイルの適用:
hg unbundle [-u] FILE...
hg bundle コマンドで生成されたバンドルファイルを適用します。
成功時のコマンド終了値は 0、 衝突未解消ファイルがある場合は 1 です。
オプション:
-u, --update | 新規取り込みの際は、 新規ブランチヘッドで、 作業領域を更新 |
作業領域の内容更新(またはリビジョンの切り替え):
hg update [-c] [-C] [-d DATE] [[-r] REV]
指定されたリビジョン時点の内容で、 作業領域を更新します。 対象リビジョンが指定されない場合、 作業領域と同じ名前付きブランチの、 最新リビジョンで更新した上で、 アクティブブックマークを更新します。 (詳細は hg help bookmarks 参照)
作業領域の親リビジョンを、 指定されたリビジョンに更新します (hg help parents 参照)。
指定リビジョンが、 作業領域の祖先/直系の子孫のいずれでもでない場合、 作業領域の更新は中断されます。 -c/--check が指定された場合、 作業領域中の未コミット変更の有無を確認し、 変更が無かった場合には、 作業領域を指定リビジョンで更新します。
作業領域の変更が未コミットの場合、 以下の規則が適用されます:
マージ実施を途中で取り消す場合は 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 <リビジョン> | |
リビジョン | |
-t, --tool <値> | マージツールの指定 別名: up checkout co |
リポジトリの整合性検証:
hg verify
現リポジトリの整合性を検証します。
本コマンドは、 リポジトリの整合性に関する広範な検証を行います。 変更履歴・マニフェスト・各構成管理対象ファイルにおけるハッシュ値 およびチェックサム、 相互関連付けおよびインデックス等の整合性が 検証されます。
リポジトリ破損時の復旧に関する詳細は、 以下の URL を参照してください。 https://mercurial-scm.org/wiki/JapaneseRepositoryCorruption
成功時のコマンドの終了値は 0、 エラー発生時は 1 です。
バージョンおよび著作権情報の表示:
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 push や hg pull のような Mercurial の内部形式で実施される操作に関しては、 バイナリ形式で変更 情報の授受を行うことから、 情報の欠落に関しては心配する必要はありません。
Mercurial から git 拡張差分形式の出力を得るには、 受理可能なコマンドに 対して --git を指定するか、 設定ファイルの [diff] セクションに 'git = True' 記述を追加してください。 hg import や mq エクステンションを使用する場合は、 この指定は不要です。
コミットの際のメッセージ入力を行うためのエディタの名前。 EDITOR 環境変数についても参照してください。
(非推奨: 設定ファイル経由で指定してください)
マージの際の衝突解消に使用するコマンド。 指定されたコマンドの起動には、 作業領域のファイル、 マージ対象別リビジョンのファイル、 両者の親リビジョンのファイルを表す、 3つの引数が指定されます。
(非推奨: 設定ファイル経由で指定してください)
設定ファイル読込のための、 ファイルまたはディレクトリの一覧の指定。 一覧要素の区切り記号は、 Unix なら ":"、 WIndows なら ";" です。 HGRCPATH 環境変数が設定されていない場合、 各稼働環境に応じた 読み込み先から読み込まれます。 空の値が設定されている場合、 現リポジトリの .hg/hgrc のみが読み込まれます。
指定された一覧の各要素に対して、 以下のように振舞います:
この環境変数が設定された場合、 Mercurial の表示設定を変更し得る 設定ファイル中の記述が全て無視されます。 encoding や defaults の指定、 verbose モード、 debug モード、 quiet モード、 トレースバック表示設定や各国語設定が対象となります。 ユーザ設定を温存したままで、 ツール等から Mercurial を使用する場合に有用です。
コマンドラインや環境変数によって、 同等のオプションが、 明示的に指定された場合には、 こららは無視されません。
HGPLAIN による設定無効化の際でも、 継続して利用したい機能名を、 カンマ区切りで列挙します。 現在利用可能な機能名は以下の通り:
HGPLAINEXCEPT に何らかの設定 (空設定でも可) をした場合、 設定無効化が機能します。
コミット時に記録する、 リビジョン作成者名の指定。 作成者名として採用される値は、 以下の順序で決定されます:
(非推奨: 設定ファイル経由で指定してください)
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 バグ管理システムとの連携用フック集 censor: 指定リビジョンのファイル内容の検閲/消去 churn: 変更履歴の統計情報表示のコマンド clonebundles: advertise pre-generated bundles to seed clones color: コマンド出力のカラー化 convert: 他の構成管理ツールから Mercurial への履歴取り込み eol: 管理対象ファイルにおける改行形式の自動管理 extdiff: リビジョン間差分表示での外部コマンドの利用 factotum: factotum での http 認証 gpg: リビジョンへの署名および検証コマンド hgk: グラフィカルな UI によるリポジトリ参照 highlight: hgweb におけるシンタックスハイライト (要 Pygments) histedit: 対話的な履歴改変 keyword: 構成管理対象ファイル中のキーワード展開 largefiles: 大容量バイナリファイルの管理 mq: パッチ併用の管理 notify: 電子メールによる push 通知送信用フック集 pager: コマンド出力に対する外部ページャーの使用 patchbomb: 電子メールによる変更内容パッチ送付のコマンド purge: 作業領域中の未登録ファイルを削除するコマンド rebase: 履歴上の異なる位置への一連のリビジョンの移動 relink: 複製リポジトリ間でのハードリンクの再生成 schemes: 連携先リポジトリ群に対する略記指定の拡張 share: 複数作業領域による履歴情報領域の共有 shelve: 作業領域中の変更内容の退避および復旧 strip: 指定リビジョンと子孫の履歴からの破棄 transplant: 別ブランチからのリビジョンの移植 win32mbcs: 問題ある文字コードをパス名に使用する場合の対処 zeroconf: ローカルネットワーク上でのリポジトリの検出/公開
Mercurial はファイル指定のための問い合わせ言語を提供しています。
他のファイルパターン指定と同様に、 パターン種別が定められていて、 'set:' 接頭辞で記述を始めます。 問い合わせ言語は「述語」 (predicate) (※ 訳注: いわゆる「関数」的なもの) を提供しており、 二項演算子による結合や、 括弧によるグループ化も可能です。
ファイル名やパターンが、 [.*{}[]?/\_a-zA-Z0-9\x80-\xff] 以外の文字や、 既存の述語と一致する場合、 引用符(') または二重引用符(") で囲ってください。 この仕様は、 glob 対象や述語の引数以外の、 全てのファイルパターンに適用されます。
エスケープ表記により、 引用符中の文字列中で、 特殊文字を使用可能です。 例: \n は改行文字扱い。 特殊文字として解釈させたくない場合は、 文字列指定の冒頭に r を付けます。 例: r'...'.
使用可能な前置単項演算子を以下に列挙します:
使用可能な二項演算子を以下に列挙します:
使用可能な述語を以下に列挙します:
サイズが指定条件に合致するファイル。条件例:
問い合わせの記述例:
作業領域中のバイナリ扱いのファイルの状態を表示:
hg status -A "set:binary()"
.hgignore 対象の中で、 既に構成管理されているファイルを登録除外:
hg forget "set:hgignore() and not ignored()"
正規表現 magic が含まれているテキストファイルの名前を表示:
hg files "set:grep(magic) and not binary()"
UTF-8 以外の文字コードを使う C 言語ソースのファイル名を表示:
hg files "set:**.c and not encoding('UTF-8')"
指定サイズ以上でバイナリ扱いのファイルの複製を取り消し:
hg revert "set:copied() and binary() and size('>1M')"
foo.lst の一覧中で a 又は b を名前に含むファイルを登録除外:
hg remove "set: 'listfile:foo.lst' and (**a* or **b*)"
hg help patterns も参照してください。
[ブックマーク] コミットの都度移動しつつ、 一定のリビジョンを指す、 一種のポインタです。 リビジョン指定の際には、 タグと同様に、 常にブックマーク名を使用できます: 例 hg update 対象。 タグとの違いは、 コミットの都度、 ブックマークが移動することです。
ブックマークは、 改名、 複製および削除可能です。 リポジトリ間で、 明示的な反映/取り込みをしない限り、 ブックマークは伝播しません。 ブックマークの反映/取り込みにより、 他のメンバーとの連携の際に、 名前付きブランチの代替として、 ブックマークが使用可能となります。
(名詞) [ブランチ] ヘッドではない (= 他に子リビジョンを持つ) リビジョンを親として、 作成された子リビジョン。 これは 「構造的 (topological) ブランチ」 と呼ばれます。 ('Branch, topological' 参照) 構造的ブランチが名前を持つ場合は 「名前付きブランチ」、 名前を持たない場合は「名前無しブランチ」 と呼ばれます。 (※ 訳注: 名前を「持つ/持たない」は、 「親と異なる名前」を持つ/持たない、 を意味します) 'Branch, anonymous' および 'Branch, named' も参照してください。
連携先リポジトリで生成されたリビジョンが、 リポジトリ間連携 (反映/取り込み) の際に、 新規ヘッドとして取り込まれることで、 ブランチが生成される場合もあります。 「ブランチ」という呼称は、 複数の要件に対して、 個別に作業が行われる状況を指す場合もあります。 このような作業は、 明示的に名前付きブランチを作成した上で、 実施されることもあれば、 ローカルホスト上で、 ブックマーク機能や、 リポジトリ複製と名前無しブランチによって、 実施される場合もあります。
例: "実験的な(開発用)ブランチ"
(動詞) [ブランチする/分岐する/枝分かれする] あるリビジョンにおいて、 2つ目以降の子リビジョンを作成する操作。
例: "リビジョン X からブランチする"
[非アクティブなブランチ] 構造的なヘッドが無い名前付きブランチは、 非アクティブなブランチとみなされます。 例えば default ブランチに、 機能実装用の名前付きブランチがマージされると、 機能実装用ブランチは、 非アクティブになります。 hg branches は、 --active 指定が無い場合、 非アクティブなブランチも表示します。
備考: 履歴ツリー構造を元にした、 暗黙的な状況を元にしていることから、 この概念の常用は非推奨です。 不要になった名前付きブランチは、 hg commit --close-branch により、 明示的に閉鎖してください。
[名前付きブランチ] 同一のブランチ名を持つリビジョンの集合。 名前付きブランチに属するリビジョンは、 その子リビジョンも、 同じ名前付きブランチに属します。 別な名前付きブランチを、 明示的に指定することで、 次のコミットで生成される子リビジョンの、 所属ブランチを変更できます。 ブランチ管理の詳細は、 hg help branch 、 hg help branches および hg commit --close-branch を参照してください。
名前付きブランチは、 リポジトリの履歴を構成するリビジョン群を、 重複の無い部分集合へと分割する、 名前空間の一種とも言えます。 名前付きブランチは、 必ずしも構造的ブランチである必要はありません。 ある名前付きブランチ (default でも可) のヘッドとなるリビジョンを親に、 別の名前付きブランチを新規生成した場合、 元ブランチに対して、 以後の新規リビジョン追加が無ければ、 元ブランチは (構造的な意味で) 『分岐』したのではなく、 名前が付いているだけと言えます。
[チェックアウト] (名詞) 指定リビジョンの内容で、 更新された作業領域。 同等の意味を表す場合、 「リビジョン」 の方が妥当なので、 この用法での使用は避けましょう。
例: "チェックアウトした X を使用する。"
(動詞) 指定リビジョンでの作業領域の更新。 hg help update も参照してください。
例: "リビジョン X をチェックアウトする。"
(名詞) [複製(リポジトリ)] あるリポジトリの全体、 または一部から、 複製されたリポジトリ。 部分複製リポジトリの持つ変更履歴は、 指定リビジョンと、 その祖先から構成されます。
例: "あなたの複製(リポジトリ)は最新ですか?"
(動詞) [(リポジトリの)複製] 複製リポジトリを作成する操作。 hg clone を使用します。
例: "リポジトリを複製します"
[コミット] (名詞) リビジョンの別称。
例: "最新のコミットで、 バグは修正されていますか?"
(動詞) 変更内容をリポジトリに記録する操作。 コミットの際には、 コミット対象ファイルの、 作業領域中の内容と、 親リビジョンにおける内容から、 差分が取られ、 リポジトリにおいて、 新規リビジョンが作成されます。
例: "その変更は、 すぐにコミットすべきです。"
(名詞) [差分] 2つのリビジョン、 または作業領域とリビジョン間での、 ファイルの内容と属性の差異。 差分の表現は、 "diff" または "patch" と呼ばれる形式で表現されます。 ファイルの複製/改名や属性の変更は、 "diff" や "patch" の形式では表現できないため、 "git diff" 形式を使って表現されます。
例: "私の修正の差分を見てもらえましたか?"
(動詞) [差分を取る] 2つのリビジョン間で差分を取る行為は、 "diff" や "patch" 形式を生成することを意味します。
Example: "リビジョン X との差分を取れば、 私の意図がわかります。"
[ヘッド] 使用する文脈に応じて、 ブランチのヘッドと、 リポジトリのヘッドの、 2つの意味で使用されます。 それぞれの詳細は、 'Head, branch' および 'Head, repository' を参照してください。
開発において、 ヘッドは日常的に発生し、 作業領域更新や、 マージ操作の対象となります。
[閉鎖(された)ブランチ(の)ヘッド] ヘッドへの閉鎖を実施したリビジョン。 (※ 訳注: 閉鎖操作(commit)の実施は、 閉鎖対象リビジョン上で行うため、 閉鎖実施リビジョン = 閉鎖ブランチヘッドとなります) 閉鎖済みヘッドは hg heads で列挙されません。 全てのヘッドが閉鎖されると、 その名前付きブランチは閉鎖済みとみなされ、 以降の hg branches で名前が列挙されなくなります。
閉鎖ブランチのヘッドに対して、 新規の子リビジョンを生成することで、 当該ヘッドの閉鎖状態が解消されます。
(名詞) [パッチ] 差分取得操作で得られる出力。
例: "私のパッチを送りました。"
(動詞) [パッチ(を)当て(る)] あるリビジョン時点の内容に対する、 パッチ適用による変更操作 (※ 訳注: 暗に新規リビジョンの生成を想定)。
Example: "そのリビジョンへのパッチ当てが必要です。"
(名詞) [更新内容] リビジョンの言い換え。
例: "更新内容を反映しておきました"
(動詞) [更新] 作業領域を、 特定リビジョン時点の内容で書き換える操作。 hg help update を参照してください。
例: "(作業領域の)更新が必要です"
Mercurial では、リポジトリのルート直下に置かれた .hgignore と呼ばれるファイルを使用して、構成管理対象からの ファイルの除外を制御します。
Mercurial の作業領域には、 構成管理対象にしたくないファイルも 多数存在し得ます。 例えば、 エディタの作成するバックアップファイルや コンパイラが生成する中途/最終成果物等です。 作業領域のルート直下に置いた .hgignore ファイルにおいて、 対象ファイルの名前を列挙することで、 これらを無視することができます。 .hgignore は明示的に手動で作成しなければなりません。 一般的には、 このファイルも構成管理対象に含めますので、 履歴の反映や取り込みによって、 設定内容は他のリポジトリにも伝播します。
未登録ファイルが、 作業領域のルートからの相対パス、 またはそのパスの先頭部分が、 .hgignore に記述されたパターンと合致する場合、 そのファイルは Mercurial からは無視されます。
例えば、 未登録ファイル file.c が、 作業領域の a/b/file.c に位置すると仮定します。 a/b/file.c, a/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 部分には、 以下のいずれかを記述します:
文法変更の指定は、 次に文法を指定するまでに記述された、 全てのパターンに対して有効です。
glob と regexp のいずれの場合も、 作業領域ルートからの相対パスに対して、 部分一致すれば合致とみなされます。 glob 文法での *.c パターン指定は、 任意のディレクトリにおける .c 拡張子ファイルに合致しますし、 regexp 文法での \.c$ パターン指定も、 同様のファイルに合致します。 ルート直下のファイルにのみ合致させたい場合、 regexp 文法であれば、 パターン記述を ^ で開始してください。
リポジトリルートの .hgignore に subinclude:path/to/subdir/.hgignore 記述を追加することで、 各サブディレクトリ固有の .hgignore 設定が可能です。 subinclude: と include: の詳細は hg help patterns を参照してください。
Note
.hgignore 記述の場合、 作業領域ルートからの相対パスに対して、 途中要素の部分一致でも合致とみなされますが、 通常のパターン指定では、 相対パスの先頭からの合致が要求されます。 詳細は hg help patterns を参照してください。
無視設定ファイルの記述例を以下に示します。
# Shell 形式パターンマッチ文法を指定。 syntax: glob *.elc *.pyc *~ # 正規表現文法への切り替え。 syntax: regexp ^\.pc/
Mercurial の内部ウェブサーバ機能 hgweb は、 単一リポジトリまたは、 リポジトリのツリーを公開可能です。 後者の場合、 専用の設定ファイルにより、 パスやオプション設定を定義可能です。 設定ファイルは hg serve, hgweb.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 を使用してください。
リポジトリ参照 URL 配下のパスは /{command}[/{arguments}] 形式です。 {command} は機能を、 {arguments} は機能に対する引数指定を表します。
ウェブサーバにはデフォルトの表示スタイルがあります。 スタイル定義は、 名前付きテンプレート群をまとめたものです。 個々のテンプレートは、 リビジョン情報や差分など、 表示要素を文字列化します。
ウェブサーバへの要求の際に、 スタイルを指定する方法は2つあります。 {command} がハイフン (-) を含む場合、 ハイフンの前の部分で、 スタイル名を指定します。 例えば /atom-log は log 機能の結果を atom スタイルで文字列化します。 もう一つの指定方法は、例えば /log?style=atom のような、 style クエリ文字列引数での指定です。 推奨される指定方法は、 ハイフンを使用する形式の方です。
スタイルと処理の組み合わせ次第では、 未定義のテンプレートの存在により、 応答が正しく文字列化されない可能性があります。
多くの処理で、 {command} に続く URL パス要素として {revision} を指定できます。 これは処理対象のリビジョンを指定するものです。 多くの場合、 16進12桁の短縮形式ハッシュ値が使用されますが、 hg help revisions 中で説明されている形式は、 概ね機能します。
ウェブサーバに指定可能なコマンドと URL 形式を以下に示します:
ファイル各行の由来リビジョンの表示。
結果出力には fileannotate テンプレートを使用します。
特定リビジョン時点の内容のアーカイブでの取得。
アーカイブの内容や種別は、 URL パス要素で指定します。 {format} にはアーカイブのファイル拡張子を指定します (例: zip, tar.bz2 )。 利用可能な種別は、 サーバ設定により異なります。
URL パス要素 {path} は、 アーカイブ対象ファイルを指定します。 省略時は、 当該リビジョン時点の管理対象ファイル全てが格納されます。 {path} 指定時は、 当該ファイル (ディレクトリ指定時は、 当該ディレクトリ配下のファイル) のみがアーカイブされます。
この処理の結果出力では、 テンプレートを使用しません。 アーカイブ内容そのままが出力されます。
ブックマーク情報の表示。
指定可能な引数はありません。
結果出力には bookmarks テンプレートを使用します。
名前付きブランチ情報の表示。
名前付きブランチを一覧表示します (閉鎖済みのものも含む)
指定可能な引数はありません。
結果出力には branches テンプレートを使用します。
リビジョン情報の表示。
{revision} 省略時は、 tip 以前のリビジョンを一覧表示します。 それ以外の場合、 指定リビジョン以前のリビジョンを一覧表示します。
{revision} 省略時に、 クエリ文字列引数 rev が指定された場合、 その値を使ってリビジョンの検索が実施されます。
クエリ文字列引数 rev には、 単一の識別子、 revset 記述または、 単一の検索キーワード (hg log -k 相当) が指定可能です。
クエリ文字列引数 revcount で、 読み込みの最大数を指定できます。
検索以外での表示形式には、 changelog テンプレートを使用します。
指定リビジョンの情報の表示。
URL の {revision} 部分は、 表示対象リビジョンの識別用の情報です。 指定可能な識別情報の詳細は hg help revisions を参照してください。 {revision} 省略時は、 tip 指定とみなされます。
結果出力には changeset テンプレートを使用します。 この表示は、 changesettag, changesetbookmark, filenodelink filenolink および差分表示に関するテンプレート出力から構成されます。
指定リビジョンにおける、 対象ファイルの変更内容の表示。
この機能と diff 機能の違いは、 表示形式の side-by-side (※ 訳注: 変更前後の内容を、 左右に表示) と unified diff の差です。
クエリ文字列引数 context で、 差分コンテキスト行数を指定できます。
結果出力には filecomparison テンプレートを使用します。
指定リビジョンでの変更内容の表示。
結果出力には filediff テンプレートを使用します。
この機能は /diff と /filediff の両方の URL で利用可能です。 新しい実装では主に /diff を利用しています。
リポジトリ中のディレクトリまたはファイルに関する情報の表示。
URL パス要素 {path} に関する情報を表示します。
{path} がディレクトリ相当の場合、 配下の要素一覧が表示されます。 この形式は manifest 機能と同等です。
{path} がファイル相当の場合、 ファイル自体の情報を filerevision テンプレートを使って表示します。
{path} 部分が無指定の場合、 ルートディレクトリ指定とみなされます。
指定リビジョンでの変更内容の表示。
結果出力には filediff テンプレートを使用します。
この機能は /diff と /filediff の両方の URL で利用可能です。 新しい実装では主に /diff を利用しています。
指定ファイルの履歴の表示。
クエリ文字列引数 revcount で、 読み込みの最大数を指定できます。
結果出力には filelog テンプレートを使用します。
履歴情報のグラフ表示。
この機能は、 履歴の木構造をグラフで描画します。
URL パス要素 {revision} で、表示開始リビジョンを指定できます。
クエリ文字列引数 revcount で、 読み込みの最大数を指定できます。
結果出力には graph テンプレートを使用します。
ヘルプドキュメントの表示。
この機能は hg help とおおむね同等です。 URL パス要素 {topic} が指定された場合は、 当該トピックのヘルプが表示されます。 それ以外の場合は、 トピックの一覧が表示されます。
特定トピックの表示には help テンプレートを使用します。 トピック一覧の表示には helptopics テンプレートを使用します。
リポジトリまたはファイルに関する履歴の表示。
/log/{revision} 形式 URL の場合、 revision 以前のリビジョンを、 一覧表示します。 {revision} 省略時は tip 指定とみなされます。 この形式は changelog 機能と同等です。
/log/{revision}/{file} 形式 URL の場合、 一覧表示対象は {file} に関するリビジョンに限定されます。 この形式は filelog 機能と同等です。
ディレクトリ情報の表示。
URL での引数指定がない場合、 ルートディレクトリ配下の tip における要素一覧を表示します。
manifest はディレクトリ表示専用なので、 ファイル/ディレクトリの、 両方に対応できる file 機能の使用をお勧めします。
結果出力には manifest テンプレートを使用します。
指定リビジョンの情報の表示。
URL の {revision} 部分は、 表示対象リビジョンの識別用の情報です。 指定可能な識別情報の詳細は hg help revisions を参照してください。 {revision} 省略時は、 tip 指定とみなされます。
結果出力には changeset テンプレートを使用します。 この表示は、 changesettag, changesetbookmark, filenodelink filenolink および差分表示に関するテンプレート出力から構成されます。
基本的なリビジョン情報の表示。
この処理は changelog 機能と同様の引数を受理します。 changelog 機能との違いは、 結果出力の際に changelog テンプレートではなく、 shortlog テンプレートを使用する点です。
リポジトリの概要情報の表示
履歴、 ブックマーク、 タグおよびブランチの最新情報を表示します。 (※ 訳注: デフォルトの表示スタイル paper は summary 未対応です)
結果出力には summary テンプレートを使用します。
タグ情報の表示。
指定可能な引数はありません。
結果出力には tags テンプレートを使用します。
bundles: 履歴情報授受のためのデータ形式 changegroups: revlog データの表現形式 requirements: リポジトリの requires 設定 revlogs: 履歴情報格納形式
Mercurial でのファイル内容のマージには、 マージツールを使用します。
マージツールは、 2つの異なるリビジョンにおけるファイルの内容を、 1つのファイルに統合します。 マージツール実行時には、 統合対象となる2つのリビジョン時点の内容を持つファイルに加えて、 2つの共通の祖先となるリビジョン時点の内容を持つファイルが与えられ、 双方のリビジョンにおける変更内容が特定されます。
マージツールは、 hg resolve 、 hg merge 、 hg update や hg backout およびいくつかのエクステンションの実行時に起動されます。
一般的なマージツールは、 統合対象となるリビジョンに至る過程で、 共通の祖先を元に独立して実施された、 異なる部位への変更に関しては、 それぞれが両立できるように、 自動的に双方の変更を取り込みます。 それに加えて、 近接箇所への異なる変更によって、 衝突 (conflict) が生じる場合には、 グラフィカルな UI での対話的な衝突の解消や、 衝突マークを結果ファイルに埋め込んだりします。 Mercurial 自身は対話的なマージツールを提供せずに、 外部ツールと連携するようになっています。
外部のマージツールとその実行に関する設定は、 設定ファイルの merge-tools セクションに記述されますが、 設定記述の際の名前には、 外部ツールのコマンド名そのものを使用するが通例です - hgrc(5) を参照してください (※ 訳注: hg help config でも参照可能)。
マージツール設定は、 システム上に実行可能ファイルが存在し、 且つマージ処理が可能である場合に意味を持ちます。 実行可能ファイルの指定は、 絶対または相対パスで指定されるか、 コマンドサーチパス設定上に、 同名の実行可能ファイルが存在する場合に有効となります。 マージツールはマージ処理が可能であるものと仮定されます。 対象がシンボリックリンクで シンボリックリンクが扱える (設定の) 場合、 対象がバイナリファイルで バイナリファイルが扱える (設定の) 場合、 あるいは GUI が必要な設定で GUI が利用可能な場合は、 それぞれ適切に機能することが要求されます。
以下のような内部マージツールも利用可能です:
内部マージツールは、 常に利用可能で GUI も必要としませんが、 シンボリックリンクやバイナリファイルには対応しません。
Mercurial で使用されるマージツールは以下の順序で決定されます:
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 パターンとして扱われます。
パターン指定をファイルから読み込む場合は、 include: や subinclude: を使用します。 include: で読み込まれた内容は、 手動での直接指定と、 同じ効果を持ちます。 subinclude: で読み込まれた内容は、 読み込み対象ファイルのディレクトリと、 その配下にのみ適用されます。 パターンファイルの形式詳細は hg help hgignore を参照してください。
パターンはディレクトリにも合致します。 合致ディレクトリ配下のファイルも、 パターンに合致したものとみなされます。但し( -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 も参照してください。
ファイル読み込み例:
include:path/to/mypatternfile 読み込みパターンはリポジトリ全体に適用 subinclude:path/to/subignorefile 読み込みパターンはサブディレクトリ 配下にのみ適用
フェーズ (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 を参照してください。
以下の記述を設定ファイルに追加することで、 新規コミット時のフェーズを secret に変更できます:
[phases] new-commit = secret
特に指定の無い場合、 全てのサーバで 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'...'.
使用可能な前置単項演算子を以下に列挙します:
使用可能な二項演算子を以下に列挙します:
x の子孫且つ y の祖先に相当するリビジョン群 (x および y 自身を含む)。 左側のリビジョン指定 (x) が省略された場合は ancestors(y), 右側のリビジョン指定 (y) が省略された場合は descendants(x) と等価です。
x..y とも表記可能。
使用可能な後置単項演算子を以下に列挙します:
使用可能な述語を以下に列挙します:
パターンに合致する名前のファイルを登録したリビジョン。
明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。
指定リビジョン郡に共通な最新の祖先。
任意の数のリビジョンを指定可能です。 リビジョン指定が無い場合、結果は空となります。 1つのリビジョンだけが指定された場合、 そのリビジョン自身が『共通の祖先』とみなされます。
探索状態に合致するリビジョン群:
指定ブックマーク対象、または全ブックマーク対象。
name が re: で始まる場合、 残りは正規表現として扱われます。 ブックマーク名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。
指定ブランチまたはリビジョン群の属するブランチ群に、 属するリビジョン。
string が re: で始まる場合、 残りは正規表現として扱われます。 ブランチ名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。
public フェーズなリビジョンの後継で、 且つ改変可能なリビジョン。
非 public で、且つ廃止設定されていないリビジョンのみが bumped とみなされます。
バンドルファイル中のリビジョン群。
バンドルファイルは -R オプションで指定される必要があります。
パターンに合致する名前のファイルが存在するリビジョン群。 (変更の有無は判定しません) パターンの詳細は hg help patterns を参照。
実行効率上、 明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルに厳密一致する必要があります。
extra メタデータに、 特定の名前の値を持つリビジョン群。 値指定により、 合致対象が更に絞り込まれます。
value が re: で始まる場合、 残りは正規表現として扱われます。 値そのものが re: で始まる場合は、 値を literal: 付きで指定してください。
パターンに合致するファイルに変更を行ったリビジョン群。
多少厳密さに欠けても、 性能が必要な場合は、 代わりに filelog() の使用を検討してみてください。
本述語でのパターンのデフォルト種別は glob: です。
パターンに合致するファイルの変更に関連付けられたリビジョン群。
性能上の理由から、 全リビジョンに対する変更実施の有無確認ではなく、 ファイル単位の履歴記録を元に抽出します (高速な代わりに、 登録除外や、 同一変更の複数実施などは、 検出できません)。 実行性能の高さよりも、 正確な結果が必要な場合は file() を使用してください。
実行効率上、 明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルに厳密一致する必要があります。
不可視なリビジョンが該当する場合は、 別な可視リビジョンが無いか、 ある程度の事後処理が実施されます (※ 訳注: 代替リビジョンの返却は、 未保証です)
指定リビジョン群 (revision) と、指定項目 (field) 値が同一な、 リビジョンの抽出 (※ 訳注: and 結合等での抽出元指定が無い場合、 全リビジョンが抽出元になります)。
複数項目の合致判定は、 対象項目を空白区切りで指定します (例: 'author description')。
リビジョンの一般的な項目以外に、 特別な項目も指定できます。
一般的な項目には、 description, author, branch, date, files, phase, parents, substate, user および diff があります。 author と user は同一項目です。 diff は各リビジョンでの差分を指します。 2つのリビジョンにおいて diff が一致する場合は files も一致します。
特殊項目には summary および metadata があります: summary は description の1行目に相当します。 metadata は description user date との合致に相当します (この名称は、 「主なメタデータ項目との合致」判定に由来します)
フィールド指定が無い場合、 metadata フィールドが対象となります。 同時に複数フィールドの合致判定が可能です。
パターンに合致するファイルを変更したリビジョン群。
明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。
指定名前空間に属するリビジョン群。
namespace が re: で始まる場合、 残りは正規表現として扱われます。 名前空間名そのものが re: で始まる場合は、 名前の先頭に literal: を付けて指定してください。
指定リビジョン群に存在しないものが含まれている場合は空集合、 それ以外なら指定リビジョン群そのもの。
対象リビジョン群が、 存在しないリビジョンを含む場合、 通常であれば、 処理が中断されますが、 present() によって処理を継続することができます。
パターンに合致する名前のファイルを登録除外したリビジョン群。
明示的種別(例 glob: )を持たないパターンは、 作業領域相対で、 且つファイルまたはディレクトリに合致する必要があります。
key での指定方法で整列した集合。 基本の整列方式は昇順で、 降順整列の場合は -key 形式で記述します。
指定可能な整列方式は:
整列指定 topo は他の整列指定と併用できません。 topo 指定時のみ topo.firstbranch オプション引数を指定可能です。 この引数には、 整列の際にどのブランチを優先するか、 revset 記述ベースで指定します。
指定タグ対象リビジョン、 またはタグ付け対象の全リビジョン群。
name が re: で始まる場合、 残りは正規表現として扱われます。 タグ名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。
文字列をユーザ名に持つリビジョン群。 合致判定は文字大小を無視。
string が re: で始まる場合、 残りは正規表現として扱われます。 ユーザ名そのものが re: で始まる場合は、 ユーザ名を literal: 付きで指定してください。
既存の述語や別名 (alias) を組み合わせることで、 新しい述語を定義可能です。 別名は、 Mercurial 設定ファイルの revsetalias セクションにおける、 以下のような記述で定義します:
<別名> = <定義>
別名記述部分において a1 や a2 といった形式の引数を記述することで、 別名定義部分でその引数を使用できます。
記述例
[revsetalias] h = heads() d(s) = sort(s, date) rs(s, k) = reverse(sort(s, k))
上記の記述で、 3つの別名 h, d および rs が定義されます。 rs(0:tip, author) は reverse(sort(0:tip, author)) と同一です。
二項演算子 ## は、 文字列やシンボル名を、 単一文字列に結合します。 例えば:
[revsetalias] issue(a1) = grep(r'\bissue[ :]?' ## a1 ## r'\b|\bbug\(' ## a1 ## r'\)')
上記の別名が定義されている場合、 issue(1234) という記述は grep(r'\bissue[ :]?1234\b|\bbug\(1234\)') と等価です。 このパターンは "issue 1234", "issue:1234", "issue1234" および "bug(1234)" の全てに合致します。
他の全ての演算子は ## よりも結合優先順位が低くなります。 例えば a1 ## a2~2 は (a1 ## a2)~2 と等価です。
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)
問い合わせの記述例:
default ブランチのリビジョン群:
hg log -r "branch(default)"
タグ 1.5 以後の default ブランチのリビジョン群 (マージ実施除く):
hg log -r "branch(default) and 1.5:: and not merge()"
閉鎖 (close) されていないブランチのヘッド:
hg log -r "head() and not closed()"
タグ 1.3 と 1.5 の間で "bug" に言及し hgext/* に影響するリビジョン群:
hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
2008 年 5 月 (May 2008) におけるリビジョン群をユーザ名順で表示:
hg log -r "sort(date('May 2008'), user)"
"bug" 又は "issue" に言及したリビジョン群のうち、 タグ tagged 時点の内容に含まれないもの:
hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tag())"
本トピックでは、 スクリプトや自動化での Mercurial 利用において、 コマンド出力の機械処理方法などに関して、 注意すべき点について説明します。
機械処理における Mercurial との連携方法には、 以下のような選択肢があります:
hg コマンドの実行は、 人間が対話シェル経由で利用するのと同じ形態です。 Mercurial 利用者であれば、 既にお馴染みの形態でしょう。
HTTP サーバ機能は hg serve でも起動できます。 通常このコマンドは、 "hgweb" HTTP サーバを起動します。 このサーバは、 JSON 形式のような、 機械可読 (machine-readable) 形式の出力が可能です。 詳細は hg help hgweb を参照してください。
hg serve コマンドは、 「コマンドサーバ」の起動も可能です。 専用プロトコルで接続したクライアントから、 コマンドサーバ上での Mercurial コマンドの実行を依頼できます。 クライアント向けライブラリの詳細を含む、 コマンドサーバの情報は、 https://mercurial.selenic.com/wiki/CommandServer を参照してください。
hg serve ベースの連携方法 (hgweb およびコマンドサーバ) には、 hg コマンド実行での連携と比較して、 効率の高さ等の利点があります。 hg コマンド実行の場合、 コマンド実行毎の Python プロセス起動が、 所要時間に対するオーバヘッドになるためです。
Tip
短時間での複数 hg コマンドの起動や、 所要時間短縮が必要な場合は、 サーバベース連携の採用を、 強くお勧めします。
hg help environment で説明されているように、 Mercurial の挙動は、 様々な環境変数から影響を受けます。 とりわけ以下に列挙する環境変数は、 出力の機械可読性に、 強い影響を持っています:
この環境変数が未設定の場合、 Mercurial の出力は、 文字コード指定や [ui] verbose 設定 (又は --verbose)、 ロケール指定といった、 各種設定情報の影響を受けます。
機械可読性が必要な場合は、 この環境変数を設定した上で hg コマンドを起動することを、 強くお勧めします。
この環境変数が未設定の場合、 Mercurial が使用するロケールは、 他の環境変数を元に決定されます (※ 訳注: LANGUAGE や LC_ALL 等。 Windows 環境では、 システムのデフォルトロケール設定の影響も受けます)。 確定したロケールが、 出力内容に含まれる文字をサポートしていない場合、 Mercurial は当該文字を適切に出力できません (多くの場合、 当該文字は "?" 等で置き換えられます)。
出力の一貫性を保つ上では、 この環境変数の明示指定をお勧めします。 UNIX 系 OS 上では "utf-8" あたりが妥当と思われます。
この環境変数が未設定の場合、 hg help config での手順に沿って、 設定ファイル群が読み込まれます。 ユーザ毎設定や、 システム毎設定も、 読み込み対象に含まれます。
設定内容を完全に制御したい場合、 必要な設定のみが書かれたファイルを、 HGRCPATH で明示的に指定することをお勧めします。 ユーザ毎設定や、 システム毎設定を、 完全に排除したい場合は、 空のファイルやデバイス (/dev/null 等) の指定でも良いでしょう。 なお、ユーザ毎設定や、 システム毎設定は、 ユーザ名設定や、 必須とされるエクステンション設定 (※ 訳注: 例えば largefiles 無効化は、 リポジトリアクセスを阻害します) 等に対して、 予期せぬ影響を生じ得る点に、 留意してください。
Mercurial との連携では、 コマンド出力の解析や、 データ抽出が必要です。 本節では、 出力解析/データ抽出で必要とされる、 各種手法を説明します。
最も単純で実践的なコマンド出力の解析方法は、 hg コマンドの出力を、 そのまま解析するやり方です。
コマンド出力形式の多くが、 grep, sed や awk 等のツールで、 簡単に解析できます。
コマンド出力の直接解析には、 Merurial のバージョンアップに伴って、 出力形式が変更されるかもしれない、 という潜在的な短所があります。 Mercurial は、 後方互換性に最大限配慮していますが、 場合によっては、 コマンド出力形式が、 変更される可能性があります。 一般論として、 hg コマンドでの連携では、 互換性テストの用意をお勧めしますが、 出力の直接解析を行う場合は、 互換性テストは更に重要になります。
多くの hg コマンドが、 -T/--template オプション指定による、 出力整形に対応しています。 詳細は hg help templates を参照してください。
テンプレート機能を利用することで、 コマンド出力を明示的に制御できるので、 必要な情報を必要な書式で得られます。 例えば log -T {node}\n からは、 ユーザ名、 日付、 コミットログ等を含む、 人間向けの表示の代わりに、 改行区切りのハッシュID一覧を得ることができます。
Tip
コマンドの出力形式が複雑過ぎて、 直接解析が難しい場合、 テンプレート機能の利用をお勧めします。
-T/--template オプションでの指定値には、 事前定義された「スタイル」 も指定できます。 Mercurial には JSON 形式の json および XML 形式の xml が同梱されています。 これらを使用することで、 コマンド出力を、 そのまま機械可読形式にできます。
Important
現時点では、 json および xml スタイルは、 実験的実装扱いです。 これらを使うことで、 機械可読形式の出力を、 容易に得られる一方で、 今後のバージョンアップ時に、 挙動が変化する可能性もあります。
特定の文字コードと併用した場合、 これらのスタイルでの出力結果が、 予期せぬ結果となる可能性があります。 Mercurial では、 ファイル名等を、 単なるバイト列として扱いますが、 JSON や XML 形式での出力の際の、 これらのバイト列の正規化が、 文字コード指定によっては、 期待と異なる (※ 脚注: SJIS 等での、 「バックスラッシュを含む文字」や、 Mac OS X における NFD なファイル名のことか?) かもしれません。
コマンドサーバ で Mercurial 連携を行う場合、 連携処理部分を抽象化する、 既存のライブラリを使うことでしょう。 ライブラリが解析処理を兼ねる場合、 出力解析処理を、 自前で行う手間を省くことができます。
機械可読性のあるスタイル (例: -T json) を使用する場合であっても、 コマンドの出力は、 冗長性指定の影響を受けます。 -v/--verbose や --debug が引数に指定された場合、 コマンドの出力する情報には、 より冗長性の高いものが含まれます。
明示的なテンプレート指定により、 -v/--verbose 等の指定無しでも、 必要なデータを得ることができます。
revsets とは、 リビジョン指定のための問い合わせ言語のことです。 Mercurial の履歴情報における、 SQL 的なものと考えてください。 revsets での問い合わせにより、 特定の条件での履歴抽出が可能です。
詳細は hg help revsets を参照してください。
share エクステンションにより、 複数のローカルリポジトリ間で、 履歴情報を共有できます。 同一由来のリポジトリを複製する際に、 自動的に共有領域を作成することもできます。
share エクステンションは、 ディスク領域や通信帯域の消費を、 大幅に低減できます。 継続的インテグレーション (CI) を行う場合、 このような資源消費の低減は有用です。
詳細は hg help -e share を参照してください。
サブリポジトリ (subrepository) 機能は、 Mercurial リポジトリを親に、 外部のリポジトリやプロジェクトを入れ子にし、 コマンドの実行の際に、 それら一連のリポジトリに対して処理を行えるようにします。
現時点でサブリポジトリとして使用できるのは、Mercurial Git Subversion のリポジトリです。
サブリポジトリは、 3つの要素から構成されます:
入れ子リポジトリの作業領域。 親リポジトリの作業領域中の、 任意の場所に配置可能です。
入れ子リポジトリへの参照。 親リポジトリの作業領域ルート直下に配置した .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 を生成し、 親リポジトリにおいて、 履歴管理対象に追加する必要があります。
入れ子リポジトリの状態情報。 親リポジトリのルート直下に配置された .hgsubstate において、 親リポジトリでのコミット時点における、 サブリポジトリの状態を復旧するために、 必要な情報が格納されます。 このファイルの生成は、 親リポジトリでのコミットの際に、 Mercurial によって自動的に実施されます。
Note
.hgsubstate は決して手動編集しないでください。
まだ .hgsub が親リポジトリに存在しない場合は、 手動で作成した上で、 履歴管理対象に登録してください。 親リポジトリの作業領域中の任意の場所に、 外部リポジトリを元に、 作業領域を生成 (checkout) してください。 追加対象の外部リポジトリのためのエントリを .hgsub に追加してください。 これ以後、 このサブリポジトリは管理対象となり、 次回のコミットにおいて、 .hgsubstate に状態が記録され、 親リポジトリのリビジョンに対して、 対応付けが行われます。 (※ 訳注: サブリポジトリに関する「構成管理」は、 あくまで 「親リポジトリの各リビジョンが、 サブリポジトリの各リビジョンと、 どう対応するのか?」 という対応付け情報のみです)
構成管理下にあるサブリポジトリの作業領域は、 最新状態への自動的な追従が、 行われなくなります。 その代わり、 親リポジトリのリビジョンにおいて、 関連付けが記録されたリビジョンの内容で更新されるようになります。 この挙動により、 親リポジトリ側と一貫性のある状態が維持できます
そのため、 サブリポジトリの作業領域は、 手動で更新する必要があります。 各サブリポジトリの作業領域を、 希望するリビジョンで更新したならば、 親リポジトリにおいて (適宜テストを実施した上で) コミットを実施することで、 新たなリビジョンの組み合わせが記録されます。
親リポジトリからサブリポジトリを削除する場合、 対応するエントリを .hgsub から削除した上で、 関連するファイルを削除してください。
add: | -S/--subrepos 指定が無い限り、 構成管理対象へのファイル登録は、 再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、 サブリポジトリ中のファイルへのパスが、 直接指定された場合は、 対象ファイルを構成管理対象として登録します。 なお、 サブリポジトリが Subversion 形式の場合、 現状では、 何の表示も無しに、 登録要求を無視します。 |
---|---|
addremove: | -S/--subrepos 指定が無い限り、 addremove による登録/除外は、 再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、 サブリポジトリ中のファイルへのパスが、 直接指定された場合は、 対象ファイルの登録/除外が実施されます。 なお、 サブリポジトリが Git または Subversion 形式の場合、 警告表示の後、 処理が続行されます。 |
archive: | -S/--subrepos 指定が無い限り、 アーカイブの作成は、 再帰的には実施されません。 |
cat: | 現状では、 サブリポジトリ中のファイルと厳密一致した場合のみ、 処理を実施します。 Subversion 形式の場合は何も実施しません。 |
commit: | コミットの実施により、 親リポジトリと配下のサブリポジトリ間の、 整合性の取れた対応関係が、 (親リポジトリ側に) 記録されます。 未コミット変更があるサブリポジトリは、 コミット動作を中断させます。 -S/--subrepos を指定するか、 設定ファイル記述 (hg help config 参照) での "ui.commitsubrepos=True" 設定により、 コミット実施の際に、 サブリポジトリ中の未コミット変更が、 再帰的にコミットされます。 全てのサブリポジトリから、 未コミット変更が無くなった後で、 各サブリポジトリの状態記録が、 親リポジトリにおいてコミットされます。 --addremove オプションも -S/--subrepos 指定に従いますが、 サブリポジトリが Git または Subversion 形式の場合は、 警告表示の後、 処理を中断します。 |
diff: | -S/--subrepos 指定が無い限り、 差分表示は、 再帰的には実施されません。 サブリポジトリのファイルの差分表示は、 通常の差分表示形式と同じです。 Subversion 形式の場合は、 何の表示も無しに、 差分表示要求を無視します。 |
file: | -S/--subrepos 指定が無い限り、 管理対象ファイルの一覧表示は、 再帰的には実施されません。 但し、 -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 形式の場合、 現状では、 何の表示も無しに、 状態表示要求を無視します。 |
remove: | -S/--subrepos 指定が無い限り、 構成管理対象からのファイル除外は、 再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、 サブリポジトリ中のファイルへのパスが、 直接指定された場合は、 対象ファイルを構成管理対象として登録します。 なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、 何の表示も無しに、 登録除外要求を無視します。 |
update: | 作業領域更新により、 サブリポジトリは、 指定リビジョンにおける、 コミット時点の状態が復元されます。 サブリポジトリにおいて、 復元対象リビジョンが利用不可能な場合、 作業領域更新に先立って、 対象リビジョンの取り込みが実施されます。 (※ 訳注: Subversion 形式は、 履歴情報がサーバ側にあるため、 常に対象リビジョンの取り込みが必要) この挙動は、 サブリポジトリ利用によって、 作業領域更新の際に、 ネットワーク接続が必要となる可能性があることを意味します。 |
親リポジトリの利用期間中に、 サブリポジトリの連携先が変更された場合、 変更前に親リポジトリで記録されたリビジョンが持つ連携先情報は、 無効となってしまいます。 親リポジトリの hgrc ファイルまたは Mercurial の設定ファイルにおいて、 連携先情報の書き換えルールを定義することで、 この問題を解消可能です。 詳細に関しては hgrc(5) の [subpaths] セクションを参照してください。 (※ 訳注: hg help config でも参照可能)
Mercurial は、 コマンド出力をテンプレート機能でカスタマイズ可能です。 コマンドラインの --template オプション経由で、 テンプレート指定や、 スタイル定義 (※ 訳注: 同梱のもの以外に独自定義可能) を指定できます。
「log 的」な出力を行う一連のコマンド出力をカスタマイズ可能です: log, outgoing, incoming, tip, parents, heads
いくつかのスタイル定義が Mercurial に同梱されています。 スタイルの一覧は hg log --template list で表示されます。 スタイル定義の利用例:
$ hg log -r1.0::1.1 --template changelog
テンプレートとは、 変数展開マークアップ機能を備えたテキストです:
$ hg log -r1 --template "{node}\n" b56ce7b07c52de7d5fd79fb89701ea538af65746
波括弧で囲まれた部分は「キーワード」と呼ばれます。 キーワード利用の 可否は、 テンプレートの利用される状況に依存します。 以下のキーワードは log 的なコマンドでのテンプレート利用の際には常に使用可能です:
activebookmark: | 文字列. アクティブブックマーク (対象リビジョンに対して、 関連付けられている場合のみ) |
---|---|
author: | 文字列。 リビジョンの作者名(記録情報そのまま)。 |
bisect: | 文字列。 当該リビジョンの二分探索状態。 |
bookmarks: | 文字列列挙。 当該リビジョンに付与されたブックマークの一覧。 アクティブブックマークが存在する場合は 'active' が設定されます。 |
branch: | 文字列。 リビジョンの属するブランチ名。 |
changessincelatesttag: | |
数値。 最新タグ以降の全祖先リビジョン数。 (※ 訳注: 履歴中に分岐がない場合は latesttagdistance と等価です) | |
children: | 文字列列挙。 リビジョンの子供。 |
date: | 日時情報。 リビジョンが記録された日時。 |
desc: | 文字列。 リビジョンのコミットログ。 |
diffstat: | 文字列。 以下の形式での変更概要。 "変更対象ファイル: +追加行数/-削除行数" |
extras: | 辞書の列挙。当該リビジョンの 'extras' 情報一覧。 (※ 訳注: 各辞書は key および value というキーを持ちます) |
file_adds: | 文字列列挙。 当該リビジョンでの追加ファイル一覧。 |
file_copies: | 文字列列挙。 当該リビジョンでの複製元ファイル一覧。 |
file_copies_switch: | |
文字列列挙。 "file_copies" と同義だが、 --copied 指定のある時のみ表示。 | |
file_dels: | 文字列列挙。 当該リビジョンでの登録除外ファイル一覧。 |
file_mods: | 文字列列挙。 当該リビジョンでの変更ファイル一覧。 |
files: | 文字列列挙。 当該リビジョンでの、 変更/追加登録または 登録除外ファイルの一覧。 |
graphnode: | 文字列。 ASCII 文字での履歴グラフ表示の際に、 リビジョン表示で使用する文字。 |
latesttag: | 文字列列挙。 当該リビジョンの祖先に対して、 最も最近に付与されたグローバルタグの一覧 |
latesttagdistance: | |
整数。 最新タグへの最長パス | |
namespaces: | 列挙の辞書。 リビジョンに関連付けられている名前を、 名前空間毎に列挙したもの。 |
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: | 整数。 各リポジトリ固有のリビジョン番号。 |
subrepos: | 文字列挙。 当該リビジョンで更新されたサブリポジトリ名。 |
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" |
count: | 列挙または文字列。 長さを整数値で返します。 |
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 フィルタの説明も参照してください。 |
lower: | 文字列。 文字列を小文字に変換します。 |
nonempty: | 文字列。 与えられた文字列が空の場合 '(none)'となります。 |
obfuscate: | 文字列。 全ての文字を XML エンティティ形式に変換します。 |
person: | 文字列。 メールアドレスを RFC 5322 形式で解析して、 名前部分だけを取り出します。 |
revescape: | 文字列。 @ 以外の全ての「特殊」文字を変換します。 ウェブサービスによる早期の復号を防ぐため、 スラッシュ ("/") は二重に変換されます。 例えば "@foo bar/baz" は "@foo%20bar%252Fbaz" となります。 |
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" 形式で可読化します。 |
splitlines: | 文字列。 文字列を行のリストに分割します。 |
stringify: | 任意のデータ。 値を文字列化して連結します |
stripdir: | 文字列。 与えられた文字列をパスとみなし、 ディレクトリ 階層があればそれを取り除きます。 例) "foo" および "foo/bar" は "foo" |
tabindent: | 文字列。 最初の行以外の非空行をタブ文字で字下げします。 |
upper: | 文字列。 文字列を大文字に変換します。 |
urlescape: | 文字列。 全ての「特殊」文字を変換します。 例えば "foo bar" は "foo%20bar" となります。 |
user: | 文字列。 ユーザ名またはメールアドレスから、 ユーザ名の短縮形式部分を取り出します。 |
utf8: | 文字列。実行環境の文字コードから UTF-8 に変換します |
フィルタは関数呼び出しに過ぎません。 例えば、 expr|filter は filter(expr) と等価です。
フィルタの他に、 以下の様な基本的な組み込み関数があります:
date(date[, fmt]): | |
---|---|
日付情報の整形。 整形方法の詳細は hg help dates を参照してください。 fmt が未指定の場合は、UNIX の date コマンド形式 (タイムゾーン込み) で整形します: "Mon Sep 04 15:13:13 2006 0700" | |
diff([includepattern [, excludepattern]]): | |
差分を表示します。 表示対象/除外対象ファイルのパターンを指定が可能です。 | |
fill(text[, width[, initialident[, hangindent]]]): | |
指定の字下げ形式で、 パラグラフ群を字下げします。 "fill" フィルタも参照してください。 | |
get(dict, key): | dict から key 相当の情報を取得します。 この関数により、 複雑な形式を持つオブジェクトから、 情報を取得することができます。 |
if(expr, then[, else]): | |
expr 結果に応じて then または else を実施します。 | |
ifcontains(search, thing, then[, else]): | |
"search" 結果が "thing" に含まれるか否かに応じて then または else を実施します。 | |
ifeq(expr1, expr2, then[, else]): | |
expr1 と expr2 の一致状況に応じて then または else を実施します。 | |
indent(text, indentchars[, firstline]): | |
空白行以外を indentchars を使って字下げします。 firstline が指定された場合、 最初の行は、 firstline を使って字下げされます。 | |
join(list, sep): | |
list 中の要素を sep で連結します。 | |
label(label, expr): | |
expr の結果出力に label を付与します。 label の付与は、 表示への色付け等の、 出力加工処理で使用されます。 | |
latesttag([pattern]): | |
当該リビジョンの祖先に対し、最も直近に付与された、 指定パターン pattern に合致するグローバルタグの一覧。 | |
localdate(date[, tz]): | |
日時情報を、 指定のタイムゾーンに変換します。 タイムゾーン tz 無指定時は、 ローカルタイムゾーンに変換します。 | |
pad(text, width[, fillchar=' '[, right=False]]): | |
fillchar 文字で text を width 幅に字詰めします。 | |
revset(query[, formatargs...]): | |
revset 記述による問い合わせを実行します。 詳細は hg help revset を参照してください。 | |
rstdoc(text, style): | |
出力を ReStructuredText として整形します。 | |
separate(sep, args): | |
非空な args 要素を区切り文字 sep で連結します。 | |
shortest(node, minlength=4): | |
node リビジョンを特定可能な、 最短のハッシュ値識別子を算出します。 | |
startswith(pattern, text): | |
text 冒頭が pattern と一致する場合は text を、 それ以外の場合は空白文字を返却します。 | |
strip(text[, chars]): | |
chars 中の文字を text 両端から除外します。 chars 無指定の場合は、 空白文字/改行文字を除外します。 | |
sub(pattern, replacement, expression): | |
正規表現により文字列を置換します。 | |
word(number, text[, separator]): | |
text の number 個目の単語を抽出します。 |
また、 列挙形式を返す expr に対しては、 以下の様な記述が可能です:
expr % "{template}"
上記例で見られるように、 {template} はテンプレートとして解釈されます。 テンプレートとしての解釈を抑止する場合は、 \{ で開始するか、 文字列指定の冒頭に r を付けて下さい (例: r'...')
Mercurial 設定ファイルの templatealias セクションにおいて、 キーワードや関数を、 独自に定義可能です:
<別名> = <定義>
別名記述部分において a1 や a2 といった形式の引数を記述することで、 別名定義部分でその引数を使用できます。
記述例
[templatealias] r = rev rn = "{r}:{node|short}" leftpad(s, w) = pad(s, w, ' ', True)
上記記述は、 r と rn の2つのシンボルと、 関数 leftpad() を別名として定義します。
コマンドラインでのテンプレート指定例:
files のような列挙形式の整形:
$ hg log -r 0 --template "files:\n{files % ' {file}\n'}"
ファイル一覧を ", " で連結:
$ hg log -r 0 --template "files: {join(files, ', ')}\n"
非空引数のみを " " で連結:
$ hg log -r 0 --template "{separate(' ', node, bookmarks, tags}\n"
コミットログの各行の行頭に文字を追加:
$ hg log --template "{splitlines(desc) % '**** {line}\n'}"
日時情報の整形:
$ hg log -r 0 --template "{date(date, '%Y')}\n"
日付を UTC で表示:
$ hg log -r 0 --template "{localdate(date, 'UTC')|date}\n"
コミットログの各行を30桁で揃えて出力:
$ hg log -r 0 --template "{fill(desc, 30)}"
default ブランチか否かで表示内容を切り替え:
$ hg log -r 0 --template "{ifeq(branch, 'default', 'on the main branch', 'on branch {branch}')}\n"
空でない場合は改行を追加:
$ hg tip --template "{if(author, '{author}\n')}"
color エクステンション向けに、出力をラベル付け:
$ hg log -r 0 --template "{label('changeset.{phase}', node|short)}\n"
firstline フィルタの逆(一行目以外):
$ hg log -r 0 --template "{sub(r'^.*\n?\n?', '', desc)}\n"
リビジョンの 'extra' 情報の内容を1行1データで表示:
$ hg log -r 0 --template "{join(extras, '\n')}\n"
アクティブなブックマークに '*' を表示:
$ hg log --template "{bookmarks % '{bookmark}{ifeq(bookmark, active, '*')} '}\n"
直前のリリース候補 (Release Candidate) タグ、 および当該タグからの、総リビジョン数、 最長距離の表示:
$ hg log -r . --template "{latesttag('re:^.*-rc$') % '{tag}, {changes}, {distance}'}\n"
作業領域の親リビジョンに '@' を表示:
$ hg log --template "{ifcontains(rev, revset('.'), '@')}\n"
親リビジョンの詳細表示:
$ hg log --template "{revset('parents(%d)', rev) % '{desc|firstline}\n'}"
"template" で始まるコミットログのみを表示:
$ hg log --template "{startswith('template', firstline(desc))}\n"
コミットログの最初の語のみを表示:
$ hg log --template "{word(0, desc)}\n"
有効な 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 を併用する場合の注意点:
SSH アクセス先ホスト上に、 shell アカウントと hg コマンドが必要です。 hg コマンドがアクセス先ホストの PATH 設定で利用可能になっていない 場合は、 --remotecmd で明示的に指定してください。
URL 中のパス指定は、 アクセス先ホスト上のユーザのホームディレクトリ からの相対パスとみなされます。 絶対パスを指定する場合は、 パスの先頭に 更にスラッシュ('/')を付与してください:
例: ssh://example.com//tmp/repository
SSH 連携の際には Mercurial は自身の圧縮処理を行いません。 以下のように ~/.ssh/config 等で SSH の圧縮実施を指示することをお勧めします:
Host *.mylocalnetwork.example.com Compression no Host * Compression yes
あるいは、 設定ファイルにおける ssh コマンド指定や、 コマンドラインでの --ssh に対して、 'ssh -C' を指定する方法もあります。
連携先 URL は、 設定ファイルの [paths] セクションで、 別名を付けて記述することができます:
[paths] alias1 = URL1 alias2 = URL2 ...
URL 指定が必要なコマンドに対しては、 別名を指定することができます (例えば、 hg pull alias1 は hg pull URL1 と同義です)。
コマンドに URL を指定しなかった場合に、 暗黙の連携先として使用される 重要な別名が2つあります:
ここでは、 Mercurial に同梱されるエクステンションについて説明します。 それ以外のエクステンションに関しては、 各コマンドのオンラインヘルプを参照してください。
リポジトリにおけるアクセス制御用のフック集
アクセス制御用フックを使用することで、 pretxnchangegroup や pretxncommit 契機で更新反映を受理した際に、 指定されたブランチやパスに対して、 アクセス (= 改変) の可否を制御できます。
本エクステンションでは、 各リビジョンのコミット実施者 (この情報は、 あまり有益ではありません) の名前ではなく、 フックが実行される環境での、 ログインユーザ名情報をベースに、 アクセス可否が判定されます。
ACL エクステンションのフックは、 hgsh (※ 訳注: contrib 成果物として、 配布されています) のような、制限付きのシェルと併用することで、 push/pull 以外の操作に関して、 ログイン済みユーザに対する抑止を行う、 という様な用途に適しています。 ユーザがログインできる一般的な環境では、 ユーザによって設定が無効化される可能性があるため、 ACL フックでの制限は、 安全とは言えません。 同一アカウントを、 複数人で共有するような場合も、 アクセス元のユーザを特定できないため、 安全とは言えません。
アクセス可否の判定順序は、 以下の通りです:
許可/禁止のいずれも、 キー/値の対で設定します。
ブランチベースのアクセス制御には、 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
Check for unrecorded moves at commit time (EXPERIMENTAL)
This extension checks at commit/amend time if any of the committed files comes from an unrecorded mv.
The threshold at which a file is considered a move can be set with the automv.similarity config option. This option takes a percentage between 0 (disabled) and 100 (files must be identical), the default is 95.
リポジトリにおけるイベントの記録(デバッグ用)
Logs event information to .hg/blackbox.log to help debug and diagnose problems. The events that get logged can be configured via the blackbox.track config key.
記述例:
[blackbox] track = * # dirty is *EXPENSIVE* (slow); # each log entry indicates `+` if the repository is dirty, like :hg:`id`. dirty = True # record the source of log messages logsource = True [blackbox] track = command, commandfinish, commandexception, exthook, pythonhook [blackbox] track = incoming [blackbox] # 記録先ファイルの最大サイズ maxsize = 1.5 MB # 記録先ファイルサイズが上限を超えた場合の最大ローテート数 maxfiles = 3
最新のリポジトリイベントの表示:
hg blackbox [OPTION]...
最新のリポジトリイベントの表示
オプション:
-l, --limit <値> | |
イベント表示数 (デフォルト値: 10) |
Bugzilla バグ管理システムとの連携用フック集
本エクステンションのフックは、 記録されたリビジョンからの Bugzilla バグ ID 検出を契機に、 Bugzilla 上のバグ情報に対して、 コメントを追加します。 Mercurial のテンプレート機能を使うことで、 コメント形式を変更可能です。
コミットログからのバグIDの抽出では、 Bugzilla の「作業時間」を更新する、 所要時間情報の取り出しも可能です (オプション)。 バグ状態を「解決済み」 にすることも可能です。
Bugzilla との連携方式は、 以下の3種類から選択できます:
データベースの直接操作での連携は、 スキーマ変更の影響を受け易く、 且つ、 コメント追加通知のメール送信に、 寄贈扱い (contrib) の Bugzilla スクリプトを必要とします。 Mercurial の実行ユーザの権限がそのまま、 このスクリプトの実行権限となりますが、 Bugzilla の稼動ホスト上での実行で、 且つ Bugzilla の設定ファイルの読み出し権限を持っている必要があります。 それに加えて、 Bugzilla データベースに対して、 フルアクセス可能な MySQL ユーザの、 ユーザ名とパスワードが必要となります。 以上の条件から、 この連携方式は、 現在は非推奨であり、 Bugzilla の更新にも対応しません。 この連携方式では、 コメントの追加のみがサポートされています。
XMLRPC 連携では、 Bugzilla ユーザ名とパスワードを設定ファイルに記述し、 当該ユーザの権限でコメントが追加されます。 ユーザ名とパスワードは、 当該リポジトリ上で Mercurial を実行する、 全ユーザから参照可能なため、 コメント追加に必要な権限しか持たない、 Bugzilla 連携専用ユーザで、 運用する事を推奨します。 バグの状態を「解決済み」 (fixed) にするには、 Bugzilla 4.0 版以降が必要です。
XMLRPC/email 連携では、 Bugzilla への問い合わせに XMLRPC を使用しますが、 バグへのコメント追加には、 メールを使用します。 メールの From 欄には、 各リビジョンに記録されたユーザ情報中の、 メールアドレスが使用されるため、 各リビジョンの作成者によって、 コメントが追加されたように見えます。 リビジョンのメールアドレス情報が、 Bugzilla ユーザのものと対応しない場合、 Bugzilla へのアクセスで使用されるユーザ名で、 メールが送信されます。 サポート対象の全ての版の Bugzilla で、 バグの状態を「解決」にできます。
全連携方式で共通の設定項目は以下の通りです:
連携方式の選択。 指定可能な値は以下の通り:
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 未満限定 |
コメントの整形に使用するテンプレート。 スタイルファイル指定よりも、 こちらが優先します。 通常のものに加えて、 以下のキーワードが使用できます:
{bug}: | Bugzilla のバグ ID |
---|---|
{root}: | Mercurial リポジトリのフルパス |
{webroot}: | Mercurial リポジトリのスラッシュ除外 (strip) 後パス |
{hgweb}: | Mercurial リポジトリの URL 生成用のベース URL |
無指定の場合、 リポジトリ {root} のリビジョン {node|short} がバグ {bug} に関連。\n詳細:\n\t{desc|tabindent} が使用されます。
連携方式 XMLRPC+email と MySQL で共通の設定項目は以下の通りです:
Mercurial の各リビジョンの、 生成者情報のメールアドレスと、 Bugzilla ユーザのメールアドレスの、 対応一覧ファイルへのパス。 対象ファイルは、 1行1対応付けの、 以下の形式で記述してください:
リビジョン作成者 = Bugzilla ユーザ
[usermap] セクションの説明も参照してください。
[usermap] セクションは、 Mercurial の各リビジョンの、 生成者情報のメールアドレスと、 Bugzilla ユーザのメールアドレスの、 対応付けを行います。 bugzilla.usermap 設定の説明も参照してください。 記述形式は リビジョン生成者 = Bugzilla ユーザ です。
XMLRPC 連携固有の設定項目は以下の通りです:
XMLRPC+email 経由での連携では、 XMLRPC 経由連携に関する設定に加えて、 以下の設定が必要です:
以上の設定に加えて、 Mercurial のメール設定も必要です。 hgrc(5) ドキュメント (※ 訳注: hg help config でも参照可能) の [email] および [smtp] セクションを参照してください。
MySQL 経由連携固有の設定項目は以下の通りです:
エクステンションの有効化:
[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+email 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 (※ ここには各リビジョンのコミットログが展開されます)
指定リビジョンのファイル内容の検閲/消去
censor コマンドは、 指定リビジョン時点における、 指定ファイルの内容を、 消去しますが、 当該リビジョンの ハッシュ値は変えない 点が特徴です。 ハッシュ値が変わらないため、 既存の履歴の有効性は維持したままで、 消去されたデータが clone/pull 等で伝搬することを防止できます。
censor コマンドによる検閲/消去が、 必要とされる典型的なケースは、 以下のようなデータの扱いで、 セキュリティ的/法的に必要とされるケースです:
* パスワード、秘密鍵、暗号化情報 * 有効期限の切れたライセンスにひも付いた、データ/プログラム/ライブラリ * 個人識別情報、あるいはそれに類する個人情報
検閲によって消去されたファイル内容は、 参照することができなくなります。 hg cat や hg revert 等のコマンドは、 単純に処理が中断されます。 hg verify や hg update 等の場合、 検閲済みのファイルを無視して、 処理を継続することもできます。 検閲済みファイルによる中断を回避するには、 [censor] policy=ignore を設定してください。
hg censor -r REV [-t TEXT] [FILE]
オプション:
-r, --rev <リビジョン> | |
指定リビジョンのファイル内容の検閲 | |
-t, --tombstone <テキスト> | |
差し替え用の墓碑 (tombstone) データ |
command server extension for cHg (EXPERIMENTAL)
[chgserver] idletimeout = 3600 # seconds, after which an idle server will exit skiphash = False # whether to skip config or env change checks
子リビジョン表示のコマンド (非推奨)
本エクステンションは非推奨です (hg log -r "children(REV)" で代替可能)
指定リビジョンの子リビジョンの表示:
hg children [-r REV] [FILE]
作業領域の子リビジョンを表示します。 -r/--rev 指定がある場合、 指定リビジョンの子リビジョンを表示します。 ファイルが指定された場合、 ファイルが (作業領域の親、 または --rev での指定リビジョン後に) 最後に変更されたリビジョンを表示します。
本コマンドの代わりに hg log を使うようにしてください:
hg children => hg log -r "children()" hg children -r REV => hg log -r "children(REV)"
詳細は hg help log や hg help revsets.children を参照のこと。
オプション:
-r, --rev <リビジョン> | |
指定リビジョンの子リビジョンの表示 | |
--style <スタイル> | 当該スタイルで表示をカスタマイズ (非推奨) |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
変更履歴の統計情報表示のコマンド
リポジトリにおける変更の統計分布表示:
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, --oldtemplate <テンプレート> | |
リビジョン表示をグループ化するためのテンプレート (非推奨) | |
-T, --template <テンプレート> | |
リビジョン表示をグループ化するためのテンプレート (デフォルト値: {author|email}) | |
-f, --dateformat <書式> | |
日時グループ化のための strftime 互換形式フォーマット | |
-c, --changesets | |
リビジョン数で統計 | |
-s, --sort | キーによる整列(無指定時: 統計量で整列) |
--diffstat | 追加/削除行表示の分離 |
--aliases <ファイル> | |
ユーザ名変換用ファイル | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
advertise pre-generated bundles to seed clones
"clonebundles" is a server-side extension used to advertise the existence of pre-generated, externally hosted bundle files to clients that are cloning so that cloning can be faster, more reliable, and require less resources on the server.
Cloning can be a CPU and I/O intensive operation on servers. Traditionally, the server, in response to a client's request to clone, dynamically generates a bundle containing the entire repository content and sends it to the client. There is no caching on the server and the server will have to redundantly generate the same outgoing bundle in response to each clone request. For servers with large repositories or with high clone volume, the load from clones can make scaling the server challenging and costly.
This extension provides server operators the ability to offload potentially expensive clone load to an external service. Here's how it works.
Instead of the server generating full repository bundles for every clone request, it generates full bundles once and they are subsequently reused to bootstrap new clones. The server may still transfer data at clone time. However, this is only data that has been added/changed since the bundle was created. For large, established repositories, this can reduce server load for clones to less than 1% of original.
To work, this extension requires the following of server operators:
Strictly speaking, using a static file hosting server isn't required: a server operator could use a dynamic service for retrieving bundle data. However, static file hosting services are simple and scalable and should be sufficient for most needs.
Bundle files can be generated with the hg bundle command. Typically hg bundle --all is used to produce a bundle of the entire repository.
hg debugcreatestreamclonebundle can be used to produce a special streaming clone bundle. These are bundle files that are extremely efficient to produce and consume (read: fast). However, they are larger than traditional bundle formats and require that clients support the exact set of repository data store formats in use by the repository that created them. Typically, a newer server can serve data that is compatible with older clients. However, streaming clone bundles don't have this guarantee. Server operators need to be aware that newer versions of Mercurial may produce streaming clone bundles incompatible with older Mercurial versions.
A server operator is responsible for creating a .hg/clonebundles.manifest file containing the list of available bundle files suitable for seeding clones. If this file does not exist, the repository will not advertise the existence of clone bundles when clients connect.
The manifest file contains a newline ( ) delimited list of entries.
Each line in this file defines an available bundle. Lines have the format:
<URL> [<key>=<value>[ <key>=<value>]]
That is, a URL followed by an optional, space-delimited list of key=value pairs describing additional properties of this bundle. Both keys and values are URI encoded.
Keys in UPPERCASE are reserved for use by Mercurial and are defined below. All non-uppercase keys can be used by site installations. An example use for custom properties is to use the datacenter attribute to define which data center a file is hosted in. Clients could then prefer a server in the data center closest to them.
The following reserved keys are currently defined:
A "bundle specification" string that describes the type of the bundle.
These are string values that are accepted by the "--type" argument of hg bundle.
The values are parsed in strict mode, which means they must be of the "<compression>-<type>" form. See mercurial.exchange.parsebundlespec() for more details.
hg debugbundle --spec can be used to print the bundle specification string for a bundle file. The output of this command can be used verbatim for the value of BUNDLESPEC (it is already escaped).
Clients will automatically filter out specifications that are unknown or unsupported so they won't attempt to download something that likely won't apply.
The actual value doesn't impact client behavior beyond filtering: clients will still sniff the bundle type from the header of downloaded files.
Use of this key is highly recommended, as it allows clients to easily skip unsupported bundles. If this key is not defined, an old client may attempt to apply a bundle that it is incapable of reading.
Whether Server Name Indication (SNI) is required to connect to the URL. SNI allows servers to use multiple certificates on the same IP. It is somewhat common in CDNs and other hosting providers. Older Python versions do not support SNI. Defining this attribute enables clients with older Python versions to filter this entry without experiencing an opaque SSL failure at connection time.
If this is defined, it is important to advertise a non-SNI fallback URL or clients running old Python releases may not be able to clone with the clonebundles facility.
Value should be "true".
Manifests can contain multiple entries. Assuming metadata is defined, clients will filter entries from the manifest that they don't support. The remaining entries are optionally sorted by client preferences (experimental.clonebundleprefers config option). The client then attempts to fetch the bundle at the first URL in the remaining list.
Errors when downloading a bundle will fail the entire clone operation: clients do not automatically fall back to a traditional clone. The reason for this is that if a server is using clone bundles, it is probably doing so because the feature is necessary to help it scale. In other words, there is an assumption that clone load will be offloaded to another service and that the Mercurial server isn't responsible for serving this clone load. If that other service experiences issues and clients start mass falling back to the original Mercurial server, the added clone load could overwhelm the server due to unexpected load and effectively take it offline. Not having clients automatically fall back to cloning from the original server mitigates this scenario.
Because there is no automatic Mercurial server fallback on failure of the bundle hosting service, it is important for server operators to view the bundle hosting service as an extension of the Mercurial server in terms of availability and service level agreements: if the bundle hosting service goes down, so does the ability for clients to clone. Note: clients will see a message informing them how to bypass the clone bundles facility when a failure occurs. So server operators should prepare for some people to follow these instructions when a failure occurs, thus driving more load to the original Mercurial server when the bundle hosting service fails.
コマンド出力のカラー化
本エクステンションは、 Mercurial コマンドの出力をカラー化します。 例えば、 diff コマンドでは、 追加行は緑、 削除行は赤といった色付けが、 status コマンドでは、 変更状態のファイルが赤紫 (magenta) で表示されます。 他の多くのコマンドの出力も、 同様にカラー化されます。 カラー化設定は、 カスタマイズ可能です。
色付け以外の効果として、 文字の強調や、 下線付けも可能です。 色付けや効果を行うための、 端末情報の取得には、 デフォルトでは terminfo データベースが使用されます。 terminfo が使用できない場合は、 ECMA-48 SGR 制御機能 (「ANSI エスケープコード」の別名) を使用します。
terminfo 使用時に有効な効果は、 'blink', 'bold', 'dim', 'inverse', 'invisible', 'italic', 'standout' および 'underline' です。 ECMA-48 使用時に有効な効果は、 'bold', 'inverse', 'italic' および 'underline' です。 各指定が実際の表示に与える効果は、 端末の実装に依存します。 当該端末で無効な効果に関しては、 警告等を発せずに無視されます。
出力のカラー化は、 個々の表示要素が持つ 「ラベル」 情報の影響を受けます。 Mercurial コマンドの出力の多くは、 ラベル情報付き表示要素で構成されます。 テンプレート機能の 'label' 関数を使うことで、 独自ラベルも定義できます。 (詳細は hg help templates 参照) 単一の表示要素に対して、 複数ラベルの付与も可能です。 複数ラベルが指定された場合のカラー化では、 他の効果を打ち消す "none" 指定を含め、最後のラベルのものが優先します。
ラベル情報は不可視ですが、 ラベルと表示要素の関係を視認したい場合は、 --color=debug を指定します。 以下は複数ラベルを持つ単一表示要素の例です
[log.changeset changeset.secret|changeset: 22611:6f0a53c8f587]
以下はラベルと表示効果のデフォルト設定です。 これらのデフォルト設定は、 設定ファイル既述ににより上書き可能です:
[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.tab = diff.trailingwhitespace = bold red_background # 空値設定により、より外側のカラー設定を引き継ぎます changeset.public = changeset.draft = changeset.secret = resolve.unresolved = red bold resolve.resolved = green bold bookmarks.active = 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 使用の場合、 基本色定義が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' 以外の値が指定された場合、 色付けは無効化されます。
pager エクステンションでの less -R 使用と、 terminfo 使用の併用は、 稼動環境によっては、 色付けが正しく機能しない可能性があります。 less -R が ECMA-48 の色指定しか解釈しないことから、 less が解釈しない色指定制御が terminfo 使用時に除外される場合があるためです。 このような場合、 端末指定に ansi (または auto) を用いるか、 less -r (色指定以外の全ての端末制御が、 透過的に伝播されます) を使用することで、 状況が改善される可能性があります。
環境によっては、 "pager" エクステンションが起動するページャプログラムと、 ターミナルソフトの色付け方式が異なる場合があります (Windows 上の MSYS 等)。 ページャプログラム起動の有無に応じて、 異なる色付け方式の指定が可能です:
[color] mode = auto pagermode = ansi
pagermode が無指定の場合は、 mode 設定が使用されます。
他の構成管理ツールから Mercurial への履歴取り込み
別 SCM のリポジトリから Mercurial リポジトリへの変換:
hg convert [OPTION]... SOURCE [DEST [REVMAP]]
変換元として使用可能な形式は以下の通り [括弧内は識別名]:
変換先として使用可能な形式は以下の通り [括弧内は識別名]:
リビジョン指定が無い場合、 全ての履歴が変換されます。 リビジョンが指定された場合は、 当該リビジョンまでが変換対象です。 (変換元形式にとって、 受理可能な形式で指定してください)
変換先ディレクトリ指定が無い場合、 変換元パス名の末尾要素に -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 変換元/での/パス 変換先/での/パス
コメント行は # で始めます。 ファイルの相対パスと完全一致するか、 親ディレクトリと一致した場合に、 パスが合致したと判定されます。 include や exclude は、 最長合致した指示が選択されますので、 記述の順序は意味を持ちません。
ファイルやディレクトリが include 指定に合致した場合、 当該ファイルや、 ディレクトリ配下のファイルは、 変換対象になります。 include 指定がない場合、 全ファイルが変換対象です。 include 指定がある場合、 指定パターンに合致するファイル以外は、 変換対象から除外されます。 ファイルやディレクトリが exclude 指定に合致した場合、 それらは変換対象から除外されます。 変換対象ファイルが rename 指定に合致する場合、 ファイル名や、 ディレクトリ名が改名 (= 移動) されます。 サブディレクトリ配下から、 リポジトリルート直下に改名する場合、 改名先に . を使います。
--full は、 変換後のリビジョンにおいて、 ファイルとその内容を、 厳密に対応付けるために使用します。 通常の filemap 使用時と異なり、 変換対象リビジョン時点で存在するファイルは、変更が発生しないものも、 変換対象に含まれます (ファイル名補正済みのものは、 除外されます)。 継続的に変換を行うケース等で --full は有用です。 この機能は現在、 Mercurial と Subversion からの変換に対してのみ機能します。
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 形式からの変換の場合、 コマンド行での --config 使用により、 以下のオプションを指定できます:
convert.hg.ignoreerrors: | |
---|---|
読み込みにおける整合性エラーを無視します。 Mercurial 形式から Mercurial 形式への変換の際に使用することで、 revlog に問題のあるリポジトリを復旧可能です。 デフォルト値は False | |
convert.hg.saverev: | |
変換元におけるリビジョン ID の、 埋め込み要否を示す真偽値 (変換先でのリビジョン ID は、 確実に変更されます) (※ 訳注: ハッシュ値計算元となるデータが、 ID 埋め込みで変化するため)。 デフォルト値は False。 | |
convert.svn.startrev: | |
変換対象 (Mercurial) の開始リビジョン。 デフォルト値は 0。 | |
convert.hg.revs: | |
変換元における変換対象リビジョンの revset 表記。 |
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 形式からの変換では、 伝統的な trunk/branches/tags 構造が検出されます。 特に指定が無い場合、 変換元 URL 指定の svn://repo/path/ は単一ブランチに変換されます。 svn://repo/path/trunk が存在する場合、 default ブランチには、 そちらの内容が格納されます。 svn://repo/path/branches が存在する場合、 サブディレクトリ群を、 ブランチ一覧候補とみなします。 svn://repo/path/tags が存在する場合、 変換後リビジョンを指す、 タグの特定に使用されます。 trunk, branches および 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。 |
The Git importer converts commits from all reachable branches (refs in refs/heads) and remotes (refs in refs/remotes) to Mercurial. Branches are converted to bookmarks with the same name, with the leading 'refs/heads' stripped. Git submodules are converted to Git subrepos in Mercurial.
--config 使用により、 以下のオプションを指定できます:
convert.git.similarity: | |
---|---|
改名/複製扱いでの、 類似度のパーセント値。 0 (判定無し) から 100 (厳密一致) までの整数値。 例えば 90 の場合、 追加登録・登録除外された一対のファイルに関して、 お互いの内容が 90% 以上一致すれば、 改名操作とみなされます。 デフォルト値は 50。 (※ 訳注: 本機能で必要とされる --find-copies オプションは git 1.7.4 以降で追加されたものなので、 これより古い git コマンドを使用する環境では 0 値を設定してください) | |
convert.git.findcopiesharder: | |
複製判定の際に、 変更対象だけでなく、 全てのファイルを比較対象にするか否か。 大規模リポジトリの場合、 処理に時間を要します。 convert.git.similarity が 0 の場合は、 効果を持ちません。 デフォルト値は False。 | |
convert.git.remoteprefix: | |
remote refs are converted as bookmarks with convert.git.remoteprefix as a prefix followed by a /. The default is 'remote'. | |
convert.git.skipsubmodules: | |
ルートレベルの .gitmodules ファイル、 又は、 モード 160000 によりサブモジュールを意味するファイルの、 変換の抑止 (デフォルト値: False) |
Perforce (P4) 形式での取り込み元指定には、 p4 depot へのパスか、 クライアント仕様を指定します。 変換元の全てのファイルが、 平坦な Mercurial リポジトリに変換されます: ラベルやブランチ、 統合 (※ 訳注: "integration" は Mercurial で言うマージのこと?) は無視されます。 depot へのパス指定の場合、 変換先指定が無い場合、 変換先の名前が ...-hg になる点に注意してください。
--config 使用により、 以下のオプションを指定できます:
convert.p4.encoding: | |
---|---|
Perforce コマンドラインツールにおける、 標準出力の文字コード。 無指定時は、 システム標準の文字コードを使用。 | |
convert.p4.startrev: | |
変換対象 (Perforce) の開始リビジョン (Perforce チェンジリスト番号)。 |
Mercurial 形式への変換で、 変換先ディレクトリ配下のサブリポジトリに、 <dest>/<sub>/.hg/shamap がある場合、 親リポジトリの .hgsubstate は、 自動的に更新されます。 サブリポジトリを含むリポジトリの変換は、 個々のリポジトリの変換を、 ボトムアップで実施してください。
サブリポジトリを含むリポジトリの変換例を示します:
# 変換先 converted が hg init 済みであることから # converted への hg convert 実行の際には # 変換先形式 (= Mercurial形式) が自動的に特定されます $ hg init converted $ hg convert orig/sub1 converted/sub1 $ hg convert orig/sub2 converted/sub2 $ hg convert orig converted
以下のオプションを指定できます:
convert.hg.clonebranches: | |
---|---|
変換元ブランチ毎に変換先リポジトリを作成。 デフォルト値は False。 | |
convert.hg.tagsbranch: | |
タグ付けを実施するリビジョンのブランチ名。 デフォルト値は default 。 | |
convert.hg.usebranchnames: | |
変換元におけるブランチ名の維持の要否。 デフォルト値は True。 | |
convert.hg.sourcename: | |
指定文字列を extra メタデータ 'convert_source' として変換先の各リビジョンに記録します。 デフォルト値: 無指定 |
以下のオプションは、 全ての変換先形式に対して氏愛知可能です:
convert.skiptags: | |
---|---|
変換元から変換先へのタグ情報の反映を抑止します。 デフォルト値: False |
オプション:
--authors <ファイル> | |
ユーザ名変換ファイルの指定 (非推奨) (--authormap を使用してください) | |
-s, --source-type <種別> | |
変換元リポジトリ種別 | |
-d, --dest-type <種別> | |
変換先のリポジトリ種別 | |
-r, --rev <リビジョン[+]> | |
変換元の指定リビジョンまでの取り込み | |
-A, --authormap <ファイル> | |
変換時のユーザ名変換用ファイル | |
--filemap <ファイル> | |
変換時のファイル名変換用ファイル | |
--full | 全ての管理対象ファイルに filemap を適用 |
--splicemap <ファイル> | |
継ぎ合わせによる履歴の合成 | |
--branchmap <ファイル> | |
変換時のブランチ名変換用ファイル | |
--branchsort | ブランチによるリビジョンの並び替え |
--datesort | 日付によるリビジョンの並び替え |
--sourcesort | 元リポジトリでのリビジョン順を尊重 |
--closesort | 閉鎖実施リビジョン群の並び替え |
[+] 印付きのオプションは複数回指定可能です
管理対象ファイルにおける改行形式の自動管理
本エクステンションは、 リポジトリおよび作業領域中のファイルにおける、 改行形式 (CRLF または LF) を管理するためのエクステンションです。 Windows 環境では CRLF 形式、 Unix/Mac 環境では LF 形式と言う様に、 各 OS 固有の改行形式を使用することが可能になります。
本エクステンションは、 作業領域のルート直下のファイル .hgeol (履歴管理可能) から設定を読み込みます。 .hgeol ファイルの文法は、 他の Mercurial 設定ファイルと同じです。 本設定ファイルでは、 [patterns] と [repository] の2つのセクションを記述可能です。
[patterns] セクションは、 作業領域とリポジトリ記録の間における、 改行変換方法に関して記述します。 ファイルパターン形式で記述します。 先に合致したパターンが採用されますので、 より特徴的なパターンほど、 より先頭で記述してください。 指定可能な改行形式は LF 、 CRLF および BIN です。
CRLF または LF が指定されたファイルは、 作業領域への取り出しや、 リポジトリへの格納の際に、 指定の改行形式に変換されますが、 バイナリ (BIN) 指定されたファイルは、 改行変換されません。 これらに加えて、 実行環境固有の改行形式の使用を意味する native も使用可能です: Unix (Mac OS X 含む) 環境では LF 、 Windows 環境では CRLF 。 BIN (改行変換無し) は、 Mercurial のデフォルトの挙動です: 一般的なパターン指定に、 意図せず合致してしまうのを回避したい場合に、 当該パターンよりも先に合致させる場合にのみ有用です。
[repository] セクションは付加的なもので、 リポジトリ格納の際の、 改行形式を指定します。 記述可能な設定は native のみで、 [patterns] セクションにおいて native 指定されたファイルを、 履歴に記録する際の改行形式を指定します。 指定可能な値は LF または CRLF です。 無指定時は LF とみなされます。 例えば Windows 上で native (デフォルト設定は CRLF) 指定されたファイルは、 改行形式が LF に変換された上で、 履歴に記録されます。 [patterns] セクションにおいて LF 、 CRLF または 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種類です:
本エクステンションは、 非推奨の win32text エクステンションと同様に、 cleverencode: および cleverdecode: フィルタを提供しています。 そのため、 win32text の無効化と eol の有効化を行っても、 既存のフィルタ設定は機能し続けます。 既存のフィルタ設定が必要なのは、 .hgeol 設定を記述するまでです。
win32text エクステンションによる win32text.forbid* フック群は、 単一の eol.checkheadshook フックに統合されました。 このフックは、 期待する改行形式を .hgeol から特定しますので、 フック使用の際には、 まずは .hgeol 利用へと移行する必要があります。 eol.checkheadshook が確認するのは、 ヘッド (head) リビジョンのみで、 それ以外のリビジョンは、 改行形式が不正でも無視されます。 全てのリビジョンにおいて、 不正な改行形式を禁止したい場合は eol.checkallhook を使用します。 これらのフックは pretxnchangegroup フックとしての使用を想定しています。
パターン合致に関する詳細は hg help patterns を参照してください。
リビジョン間差分表示での外部コマンドの利用
本エクステンションは、 リビジョン間、 またはリビジョンと作業領域の間で、 差分表示を行う際に、 外部コマンドを利用可能にします。 外部コマンドは、 設定で変更可能なオプション群と、 2つの引数 (比較対象ファイルを格納した、 スナップショットディレクトリへのパス) を使って起動されます。
本エクステンションでは、 差分コマンドを定義可能なので、 実行の都度、 hg extdiff -p kdiff3 のような指定をする必要ありません:
[extdiff] # 'context diff' モードで GNU diff(1) を起動する設定を追加 cdiff = gdiff -Nprc5 ## 旧来の方式での設定: #cmd.cdiff = gdiff #opts.cdiff = -Nprc5 # meld コマンドを起動する同名定義の追加 (同名の場合は設定右辺を省略可能) # meld という名前の実行ファイルが見つからない場合、[merge-tools] 設定に # 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、 およびファイル名、 ディレクトリ名の指定が可能です。 この場合、 本エクステンションは、 差分表示に必要な分だけ、 スナップショットを作成しますので、 外部の差分表示コマンドの実行は、 ある程度高速化されます (少なくとも、 リポジトリ全体に対する差分表示よりは、 確実に早い筈です)。
外部コマンドを使用したリポジトリ(または指定ファイル)の差分表示:
hg extdiff [OPT]... [FILE]...
指定ファイルのリビジョン間差分を、 外部コマンドを使って表示します。 特に指定が無い場合、 外部プログラムには、"-Npru" オプション付きの "diff" コマンドが使用されます。
外部プログラムを変更する場合は、 -p/--program で指定します。 外部プログラム起動時には、 比較対象のディレクトリが2つ指定されます。 付加的なオプションが必要な場合は、 -o/--option で指定します。 外部プログラムの起動引数としては、 オプション指定の方が、 比較対象ディレクトリよりも先に指定されます。
リビジョン指定が2つの場合、 指定リビジョン間の差分が表示されます。 リビジョン指定が1つの場合、 作業領域が指定リビジョンと比較されます。 リビジョン指定がない場合、 作業領域が第1親リビジョンと比較されます。
オプション:
-p, --program <コマンド> | |
差分表示プログラム | |
-o, --option <オプション[+]> | |
差分表示プログラムへのオプション指定 | |
-r, --rev <リビジョン[+]> | |
リビジョン | |
-c, --change <リビジョン> | |
当該リビジョンにおける変更内容の表示 | |
--patch | 2つのリビジョンに対するパッチの比較 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
[+] 印付きのオプションは複数回指定可能です
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 設定は、 キーの読み込みに使用するサービス名を制御します。
pull, update, merge の一括実行 (非推奨)
連携先リポジトリからの取り込みと、 必要に応じたマージ実施:
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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
Faster status operations with the Watchman file monitor (EXPERIMENTAL)
Integrates the file-watching program Watchman with Mercurial to produce faster status results.
On a particular Linux system, for a real-world repository with over 400,000 files hosted on ext4, vanilla hg status takes 1.3 seconds. On the same system, with fsmonitor it takes about 0.3 seconds.
fsmonitor requires no configuration -- it will tell Watchman about your repository as necessary. You'll need to install Watchman from https://facebook.github.io/watchman/ and make sure it is in your PATH.
The following configuration options exist:
[fsmonitor] mode = {off, on, paranoid}
When mode = off, fsmonitor will disable itself (similar to not loading the extension at all). When mode = on, fsmonitor will be enabled (the default). When mode = paranoid, fsmonitor will query both Watchman and the filesystem, and ensure that the results are consistent.
[fsmonitor] timeout = (float)
A value, in seconds, that determines how long fsmonitor will wait for Watchman to return results. Defaults to 2.0.
[fsmonitor] blacklistusers = (list of userids)
A list of usernames for which fsmonitor will disable itself altogether.
[fsmonitor] walk_on_invalidate = (boolean)
Whether or not to walk the whole repo ourselves when our cached state has been invalidated, for example when Watchman has been restarted or .hgignore rules have been changed. Walking the repo in that case can result in competing for I/O with Watchman. For large repos it is recommended to set this value to false. You may wish to set this to true if you have a very fast filesystem that can outpace the IPC overhead of getting the result data for the full repo from Watchman. Defaults to false.
fsmonitor is incompatible with the largefiles and eol extensions, and will disable itself if any of those are active.
リビジョンへの署名および検証コマンド
特定リビジョンに関する全署名の検証:
hg sigcheck REV
特定リビジョンに関する全署名の検証
指定リビジョンへの署名の付与:
hg sign [OPTION]... [REV]...
リビジョンが指定されない場合、 作業領域の親リビジョンが、 親リビジョンが null の場合は tip が対象になります。
gpg.cmd 設定により、 使用するコマンドを指定可能です。 デフォルトの鍵は gpg.key で指定可能です。
-d/--date での日時表記は hg help dates を参照してください。
オプション:
-l, --local | 自リポジトリローカルな署名 |
-f, --force | 署名ファイルが変更されていても署名を実施 |
--no-commit | 署名後の署名ファイルのコミットを抑止 |
-k, --key <ID> | 署名に使用する鍵ID |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-e, --edit | コミットログ入力にエディタを起動 |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 |
署名済みリビジョンの一覧表示:
hg sigs
署名済みリビジョンの一覧表示
端末での履歴ツリー表示のコマンド (非推奨)
本エクステンションの機能は Mercurial 2.3 から標準機能になりました。 hg log -G ... を使うようにしてください。
本エクステンションは、 incoming, outgoing および log コマンドに、 新規オプション --graph を付与します。 --graph 指定により、 ASCII 文字による履歴ツリーが表示されます。
ASCII 文字による履歴ツリー併用の履歴表示:
hg glog [OPTION]... [FILE]
ASCII 文字による履歴ツリー併用の変更履歴を表示します。
@ 文字で表示されるリビジョンは、 作業領域の親リビジョンです。
本コマンドは hg log -G の別名です。
オプション:
-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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
グラフィカルな 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 を起動する項目が追加されます。
対話的な履歴参照の開始:
hg view [-l LIMIT] [REVRANGE]
対話的な履歴参照の開始
オプション:
-l, --limit <数値> | |
最大表示リビジョン数 |
hgweb におけるシンタックスハイライト (要 Pygments)
本エクステンションには、 シンタックスハイライトライブラリの Pygments が必要です: http://pygments.org/
本エクステンションに対しては、以下の設定のみが可能です:
[web] pygments_style = <style> (デフォルト値: colorful) highlightfiles = <fileset> (デフォルト値: size('<5M')) highlightonlymatchfilename = <bool> (デフォルト値: False)
highlightonlymatchfilename は、ファイル名から内容が特定可能な時のみ、 ハイライト処理を行うための指定です。 無効化時 (= デフォルトの設定) には、 Pygments が内容からファイル種別を特定するために、(確実性があまり高くない) パターンマッチングを含む、 コスト高な処理が行われます。
対話的な履歴改変
本エクステンションの有効化により 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 = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合 # r, roll = リビジョンを採用: 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 = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合 # r, roll = リビジョンを採用: 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 によって (pick や fold 操作の際に) 検出された場合に、 一旦コマンド入力に戻る点は 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 を指定することで、 元リポジトリとの関連ありとみなすことができます。
生成される改変指示の行は、 80 カラムでの切り詰めがデフォルトです。 以下の設定により、 切り詰めのカラム幅を変更できます:
[histedit] linelen = 120 # 改変指示行を 120 カラムで切り詰め
hg histedit は、 適切な改変対象リビジョンを、 自動的に選択します。 対象の選択方式を変更したい場合、 設定ファイルに以下の様な記述を追加します:
[histedit] defaultrev = only(.) & draft()
全ての改変対象リビジョンに対して、 改変指示の記述が必要になります。 特定のリビジョンを破棄する場合は drop 操作を指定してください。 以下の記述を追加することで、 改変指示のないリビジョンに対して、 drop 操作を実施させることができます:
[histedit] dropmissing = True
対話的な履歴の改変:
hg histedit [OPTIONS] ([ANCESTOR] | --outgoing [URL])
本コマンドは、 作業領域の親と、 その直系の祖先の履歴改変を行います (作業領域中の変更は、 事前にコミット/破棄してください)。 利用可能な改変操作機能は以下の通りです:
改変対象リビジョンの指定には、 以下の様な方法があります:
--outgoing 指定の際に、改変対象の選択が紛らわしい場合、 履歴改変は中止されます。 例えば、 反映候補リビジョンが、 複数のブランチ上に存在するケースなどです。
紛らわしさのために --outgoing が使用できない場合、 "min(outgoing() and ::.)" または同等の revset 表記により、 改変対象リビジョンを、 厳密に指定してください。 リビジョン指定の詳細は hg help revsets を参照してください。
例:
複数のリビジョンがコミット済みの状態。 リビジョン 3 が不要になったケース。
リビジョン 3 以降の履歴の編集を開始してください:
hg histedit -r 3以下のようなリビジョンと改変操作の一覧と共に、 エディタが起動されます:
pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancyリビジョン一覧に続けて、 指定可能な改変操作一覧も表示されます。
履歴からリビジョン 3 を取り除くには、 リビジョン 3 の対応行の冒頭の改変操作を 'drop' に変更します:
drop 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancy複数のリビジョンがコミット済みの状態。 リビジョン 2 と 4 の順序を入れ替えたいケース。
リビジョン 2 以降の履歴の編集を開始してください:
hg histedit -r 2以下のようなリビジョンと改変操作の一覧と共に、 エディタが起動されます:
pick 252a1af424ad 2 Blorb a morgwazzle pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlogエディタ上での対応行の入れ替えで、 リビジョン 2 と 4 の、 順序を入れ替えできます:
pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 5339bf82f0ca 3 Zworgle the foobar pick 252a1af424ad 2 Blorb a morgwazzle
成功時のコマンド終了値は 0、 ユーザによる作業 ("edit" 指定による、 意図的なもの以外に、 予期せぬ衝突発生時も含みます) が必要な場合は 1 です。
オプション:
--commands <ファイル> | |
履歴改変指示を指定ファイルから読み込み | |
-c, --continue | 中断された未完了の履歴改変を再開 |
--edit-plan | 残りの改変指示内容の編集 |
-k, --keep | 改変元の履歴を改変完了後も保持 |
--abort | 未完了の履歴改変を中止 |
-o, --outgoing | 連携先リポジトリに含まれないリビジョンを選択 |
-f, --force | 連携先が無関係なリポジトリでも比較を実施 |
-r, --rev <リビジョン[+]> | |
改変対象の最初のリビジョン |
[+] 印付きのオプションは複数回指定可能です
Track previous positions of bookmarks (EXPERIMENTAL)
This extension adds a new command: hg journal, which shows you where bookmarks were previously located.
show the previous position of bookmarks and the working copy:
hg journal [OPTION]... [BOOKMARKNAME]
The journal is used to see the previous commits that bookmarks and the working copy pointed to. By default the previous locations for the working copy. Passing a bookmark name will show all the previous positions of that bookmark. Use the --all switch to show previous locations for all bookmarks and the working copy; each line will then include the bookmark name, or '.' for the working copy, as well.
If name starts with re:, the remainder of the name is treated as a regular expression. To match a name that actually starts with re:, use the prefix literal:.
By default hg journal only shows the commit hash and the command that was running at that time. -v/--verbose will show the prior hash, the user, and the time at which it happened.
Use -c/--commits to output log information on each commit hash; at this point you can use the usual --patch, --git, --stat and --template switches to alter the log output for these.
hg journal -T json can be used to produce machine readable output.
オプション:
--all | show history for all names |
-c, --commits | show commit metadata |
-p, --patch | パッチ形式での表示 |
-g, --git | git 拡張差分形式の使用 |
-l, --limit <数値> | |
最大表示リビジョン数 | |
--stat | diffstat 形式の変更概要を出力 |
--style <スタイル> | 当該スタイルで表示をカスタマイズ (非推奨) |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
構成管理対象ファイル中のキーワード展開
本エクステンションは、 構成管理対象ファイル中の 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}" は、 コミットログの最初の一行を埋め込みます。
[keywordmaps] での設定内容および展開例の表示:
hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...
現時点、 固有またはデフォルトのキーワードテンプレートマップ、 およびその展開例を表示します。
引数でのマップ指定や、 -f/--rcfile 指定による外部設定ファイルからの 読み込みにより、 現時点での設定を拡張することができます。
-d/--default 指定により、 現時点のキーワードテンプレート設定を 一時的に無効化することもできます。
テンプレートやフィルタ機能に関しては hg help templates を参照してください。
オプション:
-d, --default | デフォルトのテンプレートマップで表示 |
-f, --rcfile <ファイル> | |
設定ファイルからのマップ設定の読み込み |
作業領域におけるキーワードの展開:
hg kwexpand [OPTION]... [FILE]...
キーワード埋め込みが(再)有効化されてから実行してください。
指定されたファイルの変更が未コミットの場合、 実行は中止されます。
オプション:
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
キーワード展開対象ファイルの表示:
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 <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
作業領域中のキーワード展開の取り消し:
hg kwshrink [OPTION]... [FILE]...
キーワード展開の設定変更/無効化の前に、 必ず実施してください。
指定されたファイルの変更が未コミットの場合、 実行は中止されます。
オプション:
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
大容量バイナリファイルの管理
大容量バイナリファイルの取り扱いは、 圧縮、 差分取得、 マージの点で、 非常に難しいです。 バイナリ差分の圧縮をベースにした 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 を指定する必要があります。
既存リポジトリから largefiles を利用するリポジトリへの変換:
hg lfconvert SOURCE DEST [FILE ...]
リポジトリ SOURCE を変換し、 新規リポジトリ DEST を生成します。 SOURCE に対する DEST の違いは、 指定パターンへの名前の合致、 または、 指定閾値以上のサイズのファイルが、 大容量ファイル扱いになっている、 という点です。 大容量ファイル扱いの要否判定に使用するサイズ値には、 各ファイルが最初に登録された時点のサイズが使用されます。 サイズ閾値の指定は、 --size か、 largefiles.size 設定によって行います。
このコマンドの実施後は、 変換後リポジトリの連携先リポジトリでも、 largefiles エクステンションが有効になっている事を確認してください。
largefiles エクステンションを使用しないリポジトリへの変換には、 --to-normal を指定します。 変換後リポジトリは、 largefiles エクステンション無しでも使用できます。
オプション:
-s, --size <SIZE> | |
大容量ファイル化するファイルの最小サイズ (MB) | |
--to-normal | 大容量ファイル使用リポジトリから通常リポジトリへの変換 |
指定リビジョンに関連する大容量ファイルの取り込み:
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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
Send ui.log() data to a subprocess (EXPERIMENTAL)
This extension lets you specify a shell command per ui.log() event, sending all remaining arguments to as environment variables to that command.
Each positional argument to the method results in a MSG[N] key in the environment, starting at 1 (so MSG1, MSG2, etc.). Each keyword argument is set as a OPT_UPPERCASE_KEY variable (so the key is uppercased, and prefixed with OPT_). The original event name is passed in the EVENT environment variable, and the process ID of mercurial is given in HGPID.
So given a call ui.log('foo', 'bar', 'baz', spam='eggs'), a script configured for the `foo event can expect an environment with MSG1=bar, MSG2=baz, and OPT_SPAM=eggs.
Scripts are configured in the [logtoprocess] section, each key an event name. For example:
[logtoprocess] commandexception = echo "$MSG2$MSG3" > /var/log/mercurial_exceptions.log
would log the warning message and traceback of any failed command dispatch.
Scripts are run asychronously as detached daemon processes; mercurial will not ensure that they exit cleanly.
パッチ併用の管理
本エクステンションは、 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 コマンドを提供しています。
適用中のパッチ一覧の表示:
hg qapplied [-1] [-s] [PATCH]
成功時のコマンド終了値は 0 です。
オプション:
-1, --last | 直前に適用したパッチのみを表示 |
-s, --summary | パッチヘッダの最初の行を表示 |
リポジトリとパッチ管理領域の同時複製:
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 設定の無視) |
パッチ管理領域の変更をコミット(非推奨):
hg qcommit [OPTION]... [FILE]...
本コマンドは非推奨です。 hg commit --mq を使用してください。
オプション:
-A, --addremove | |
新規/不在ファイルを、コミット前に登録/除外対象化 | |
--close-branch | ブランチヘッドを閉鎖します |
--amend | 作業領域の親リビジョンの改変 |
-s, --secret | secret フェーズでコミット中 |
-e, --edit | コミットログ入力にエディタを起動 |
-i, --interactive | |
操作対象変更の対話的な選択 | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 | |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-l, --logfile <ファイル> | |
コミットログをファイルから読み込み | |
-d, --date <日時> | |
指定日時をコミット日時として記録 | |
-u, --user <ユーザ> | |
指定ユーザをコミットユーザとして記録 | |
-S, --subrepos | サブリポジトリへの再帰的適用 |
[+] 印付きのオプションは複数回指定可能です
別名: qci
管理対象からのパッチ除外:
hg qdelete [-k] [PATCH]...
パッチ名指定には、 最低1つの未適用パッチ名の指定が必要です。 また、 名前は厳密なものを指定してください。 -k/--keep を指定した場合、 パッチファイルそのものは管理領域に残されたままとなります。
管理対象外となったパッチを通常リビジョン化する場合は hg qfinish を使用してください。
オプション:
-k, --keep | パッチファイルの削除を抑止 |
-r, --rev <リビジョン[+]> | |
指定リビジョンを管理対象から除外(非推奨) |
[+] 印付きのオプションは複数回指定可能です
別名: qremove qrm
現行パッチと作業領域変更の結合結果の表示:
hg qdiff [OPTION]... [FILE]...
現行パッチの変更内容と、 前回の qrefresh 実施以後の作業領域における 変更内容を合わせた差分(= 現時点での qrefresh 実施によるパッチ内容の 更新結果)を表示します。
前回の hg qrefresh 実施以後の作業領域における変更内容を見たい 場合は hg diff を、 作業領域の変更内容を含まない現行パッチの内容 のみを見たい場合は hg export qtip を使用してください。
成功時のコマンド終了値は 0 です。
オプション:
-a, --text | 全ファイルをテキストファイルと仮定 |
-g, --git | git 拡張差分形式の使用 |
--nodates | 差分表示の際に日付情報の表示を抑止 |
--noprefix | ファイル名の接頭辞 a/ と b/ の省略 |
-p, --show-function | |
差分表示の際に関数名情報を表示 | |
--reverse | 変更を取り消すための差分を生成 |
-w, --ignore-all-space | |
差分判定の際に空白文字を無視 | |
-b, --ignore-space-change | |
差分判定の際に空白文字の数を無視 | |
-B, --ignore-blank-lines | |
差分判定の際に空白行を無視 | |
-U, --unified <数値> | |
差分コンテキストの行数 | |
--stat | diffstat 形式の変更概要を出力 |
--root <ディレクトリ> | |
差分生成の起点ディレクトリ指定 | |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
適用中パッチの通常リビジョン化:
hg qfinish [-a] [REV]...
指定されたリビジョン(適用中パッチに相当)を、 MQ 管理下から除外し、 通常のリビジョンとしてリポジトリに記録します。
リビジョン範囲指定や、 -a/--applied が指定可能です。 --applied が指定 された場合、 全ての適用中パッチが MQ 管理下から除外されます。 それ 以外の場合、 指定されたリビジョンは、 適用中スタックの最下位からの 一連のリビジョンでなければなりません。
この機能は、 上流のリポジトリでパッチが受理された場合や、 パッチ内容を上流リポジトリに反映する場合などに有用です。
成功時のコマンド終了値は 0 です。
オプション:
-a, --applied | 全ての適用中パッチを通常リビジョン化 |
指定パッチの現行パッチへの併合:
hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...
併合対象パッチは、 未適用でなければなりません。 個々のパッチは、 指定された順序で、 現行パッチの上に、 連続して適用されます。 併合対象パッチの適用が、 全て成功した場合、 現行のパッチは、 対象パッチ全ての累積として更新され、 併合パッチは削除されます。 -k/--keep が指定された場合、 併合対象パッチのファイルは、 併合後も保持されます。
併合対象パッチのヘッダ情報は、 * * * 行を区切り記号として、 現行のパッチに追加されます。
成功時のコマンド終了値は 0 です。
オプション:
-e, --edit | コミットログ入力にエディタを起動 |
-k, --keep | 併合対象パッチのパッチファイル削除を抑止 |
-m, --message <テキスト> | |
指定テキストをコミットログとして使用 | |
-l, --logfile <ファイル> | |
コミットログをファイルから読み込み |
指定パッチを適用パッチの最上位にする qpush/qpop の実施:
hg qgoto [OPTION]... PATCH
成功時のコマンド終了値は 0 です。
オプション:
--keep-changes | 衝突しない作業領域中の変更を許容 |
-f, --force | 作業領域中の変更を上書き |
--no-backup | 取り消し実施前内容のバックアップを抑止 |
パッチのガード設定または表示:
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 | 全てのガード設定を破棄 |
現行パッチまたは指定パッチのヘッダ表示:
hg qheader [PATCH]
成功時のコマンド終了値は 0 です。
パッチまたは既存リビジョンの取り込み:
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)を実施 |
[+] 印付きのオプションは複数回指定可能です
パッチ管理領域の初期化(非推奨):
hg qinit [-c]
特に指定が無い場合、 パッチ管理領域は構成管理されません。 -c/--create-repo が指定された場合、 本コマンドはパッチ管理領域自体を Mercurial のリポジトリとして作成します(既存のパッチ管理領域を後から Mercurial リポジトリ化するのにも使用できます)。 管理領域の変更内容は qcommit によってコミットすることができます。
本コマンドは推奨されません。 -c 指定無しでの作成なら、 他の関連コマンド によって作成されます。 -c 指定有りでの作成ならば、 hg init --mq を使用してください。
オプション:
-c, --create-repo | |
パッチ管理自身を Mercurial で構成管理 |
新規パッチの作成:
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 <ファイル> | |
コミットログをファイルから読み込み |
[+] 印付きのオプションは複数回指定可能です
現行パッチの「次」に適用されるパッチの名前表示:
hg qnext [-s]
成功時のコマンド終了値は 0 です。
オプション:
-s, --summary | パッチヘッダの最初の行を表示 |
現行パッチの適用解除:
hg qpop [-a] [-f] [PATCH | INDEX]
引数指定が無い場合、 適用中パッチ群のうち、 最上位パッチを解除します。 パッチ名が指定された場合、 当該パッチが適用最上位パッチになるまで、 他のパッチの適用解除を行います。
作業領域に未コミット変更がある場合、 通常はコマンドが中止されます。 --keep-changes が指定された場合、 未コミット変更とパッチとの間で、 重複がある場合のみ、 中止されます。 -f/--force が指定された場合、 変更内容をバックアップした上で、 未コミット変更の内容を破棄します。
成功時のコマンド終了値は 0 です。
オプション:
-a, --all | 全てのパッチの適用を解除 |
-n, --name <名前> | |
パッチ解除先のパッチ管理領域名(非推奨) | |
--keep-changes | 衝突しない作業領域中の変更を許容 |
-f, --force | パッチ対象ファイルに対する作業領域中の変更を破棄 |
--no-backup | 取り消し実施前内容のバックアップを抑止 |
直前に適用されたパッチ名の表示:
hg qprev [-s]
成功時のコマンド終了値は 0 です。
オプション:
-s, --summary | パッチヘッダの最初の行を表示 |
次のパッチの適用:
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 | 取り消し実施前内容のバックアップを抑止 |
複数のパッチキューの管理:
hg qqueue [OPTION] [QUEUE]
複数の異なるパッチキューの間での切り替え、 新規パッチキューの作成 および既存パッチキューの削除を行います。
キュー名称の指定が無いか、 -l/--list が指定された場合、 登録済みキューが一覧表示されます。 通常は "patches" が登録済みです。 実行時点で使用中のキューには "(使用中)" が表示されます。 --active が指定された場合は、 使用中のキューのみが表示されます。
新規キューの作成には -c/--create を指定します。 新規作成キューは、 自動的に使用キューとなります。 ただし、 新規キューの作成時点で、 既存のキューからパッチが適用中の場合は、 新規キューは作成されますが、 使用キューの切り替えは実施されません。
--delete が指定された場合、 既存のキューを削除します。 その時点で使用中のキューは削除できません。
成功時のコマンド終了値は 0 です。
オプション:
-l, --list | 有効なキューの一覧表示 |
--active | 使用中のキュー名の表示 |
-c, --create | 新規キューの作成 |
--rename | 使用中のキューの改名 |
--delete | キューへの参照の削除 |
--purge | キューおよび管理ディレクトリの削除 |
現行パッチの更新:
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 <ファイル> | |
コミットログをファイルから読み込み |
[+] 印付きのオプションは複数回指定可能です
パッチの改名:
hg qrename PATCH1 [PATCH2]
引数が1つの場合、 現行パッチを指定された名前に改名します。 引数が2つの場合、 1つ目のパッチの名前を2つ目に改名します。
成功時のコマンド終了値は 0 です。
別名: qmv
指定リビジョンによって保存されたパッチ管理状態の復旧(非推奨):
hg qrestore [-d] [-u] REV
本コマンドは非推奨です。 hg rebase を使用してください。
オプション:
-d, --delete | 保存エントリの破棄 |
-u, --update | パッチ管理領域の更新 |
パッチ管理状態の保存(非推奨):
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 <ファイル> | |
コミットログをファイルから読み込み |
作業領域におけるガード選択の設定または表示:
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 実施後に再度パッチを適用 |
既知のパッチ一覧の表示:
hg qseries [-ms]
成功時のコマンド終了値は 0 です。
オプション:
-m, --missing | パッチ管理領域中の未知のパッチファイルを表示 |
-s, --summary | パッチヘッダの最初の行を表示 |
現行パッチの名前表示:
hg qtop [-s]
成功時のコマンド終了値は 0 です。
オプション:
-s, --summary | パッチヘッダの最初の行を表示 |
未適用のパッチ一覧の表示:
hg qunapplied [-1] [-s] [PATCH]
成功時のコマンド終了値は 0 です。
オプション:
-1, --first | 最初の未適用パッチのみを表示 |
-s, --summary | パッチヘッダの最初の行を表示 |
電子メールによる 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 にしない限り、 メールは送信されません。 詳細は後述の説明を参照してください。
通知内容は、 以下の設定により変更可能です:
空白区切りの変更反映元一覧。 変更反映元が一覧要素と合致する場合のみ、 メール送信が有効になります。 指定可能な要素は:
serve: | http または ssh 経由での取り込み |
---|---|
pull: | hg pull 経由での取り込み |
unbundle: | hg unbundle 経由での取り込み |
push: | hg push 経由での反映/取り込み |
bundle: | hg unbundle 経由での反映 |
デフォルト値は serve です。
通知のカスタマイズには、 以下の設定も利用可能です:
コマンド出力に対する外部ページャーの使用
使用するページャーの設定は、 以下のような設定で行います:
[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 設定は無視されます。
attend-<command> 設定により、 ページングの有無を、 個別のコマンド毎に、 設定可能です。 既存の attend や ignore 設定やデフォルト挙動よりも、 この設定が優先されます:
[pager] attend-cat = false
hg version や hg help のようなグローバルコマンドで、 ページャー使用を抑止したい場合、 個人の設定ファイル中で、 その旨を明記してください。
--pager=<value> を指定することで、 ページャの使用を、コマンド実行の都度、 明示することができます:
- 必要に応じて使う: `auto` - 使用する: `yes` または `on` - 使用しない: `no` または `off` (不正な値は `off` 相当の扱い)
電子メールによる変更内容パッチ送付のコマンド
一連のメールは、 "[PATCH 0 of N]" を Subject ヘッダに持つ、 説明メール から始まります。
個々のメールの Subject ヘッダは、 "[PATCH M of N]" で始まり、 対応する リビジョンのコミットログの最初の行の内容が記載されます。 メールの本文は、 以下の様な2または3の部位から構成されます:
個々のメールは、 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 でも参照可能)
コマンド実行時や、 設定ファイルでの指定がない場合、 hg email は To や CC ヘッダ値を、 ユーザに問い合わせます。 空値の設定は、 問い合わせを抑止します:
[email] cc =
メール投函の際の、 導入メッセージメールの有無は patchbomb.intro 設定項目で指定できます。 この設定項目の値は、 コマンドラインにおける --intro や --desc といったフラグで上書きされます:
[patchbomb] intro=auto # 1つ以上メールする場合に導入メッセージを含める (デフォルト) intro=never # 導入メッセージを含めない intro=always # 導入メッセージを常に含める
patchbomb.confirm へ真値を設定することより、 パッチ送信の際に、 常に確認の問い合わせを行わせることができます。
電子メールによる変更内容のパッチ送付:
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 のバンドル形式ファイルを添付 ファイルとする単一のメールとして送信されます。 hg bundle --type 指定と同様のバンドル形式指定を行う場合、 patchbomb.bundletype 設定を使用してください。
-m/--mbox が指定された場合、 PAGER での表示やメール送信の代わりに、 パッチのメールを格納した UNIX mbox 形式ファイルを作成します。 このファイルは UNIX mbox 形式に対応しているツールで閲覧可能です。
-n/--test 指定のある場合、 一連の処理手順は実行されますが、 メールの送信は行われません。 その代わりに、 送信先アドレスや、 パッチ説明文の入力が促されます。 必要な入力が完了すると、 送信されるメールの内容が表示されます。 PAGER 環境変数が設定されている場合、 パッチ爆弾を構成する メールごとに、 環境変数に設定されたプログラムが起動されますので、 内容を確認することができます。
メール送信に失敗した場合、 導入メッセージは .hg/last-email.txt に保存されます。
本コマンドのデフォルト挙動は、 設定により変更可能です (詳細は hg help patchbomb を参照してください)。
例:
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 設定の無視) |
[+] 印付きのオプションは複数回指定可能です
作業領域中の未登録ファイルを削除するコマンド
Mercurial の管理対象外ファイルの削除:
hg purge [OPTION]... [DIR]...
本コマンドは Mercurial の管理対象外のファイルを削除します。 記録済みのリビジョンや、 未コミット変更をテストする場合など、 作業領域を綺麗にしたい場合に有用です。
本コマンドのデフォルト挙動では、 以下のファイルが削除されます:
その一方で、 以下のファイルは保持されます:
--files/--dirs により、 ファイルのみ、 ディレクトリのみ、 あるいは両方を、 削除対象に指定できます。 オプション無指定の場合は、 ファイル・ディレクトリの両方が削除されます。
引数としてディレクトリが指定された場合、 指定ディレクトリ配下のみが、 処理対象となります。
本コマンドの実施により、 登録し忘れたファイルが削除された場合、 当該ファイルは復旧できませんので、 十分注意してください。 削除対象ファイルの名前を確認したいだけの場合は、 --print を指定してください。
オプション:
-a, --abort-on-err | |
エラー発生時には処理を中止 | |
--all | 無視対象ファイルも削除 |
--dirs | 空ディレクトリを削除 |
--files | ファイルを削除 |
-p, --print | ファイル削除の変わりにファイル名表示を実施 |
-0, --print0 | ファイル名をNUL文字(0x00)で終端(xargs -p/--print との併用向け) |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
別名: clean
履歴上の異なる位置への一連のリビジョンの移動
本エクステンションは、 既存の Mercurial リポジトリ上での、 リビジョン群の移動を実現します
詳細は以下を参照してください: https://mercurial-scm.org/wiki/RebaseExtension
別な履歴位置へのリビジョン(およびその子孫)の移動:
hg rebase [-s REV | -b REV] [-d REV] [OPTION]
本コマンドは、 反復的なマージを行なうことで、 ある履歴位置 (移動元) から別な位置 (移動先) へとリビジョン群を移植します。 この機能は、 手元のリポジトリでの成果を、 開発用の共有リポジトリに反映する際に、 枝分かれの無い状態にしたい場合などで有用です。
public フェーズのリビジョンは、 移動対象に指定できません (hg help phases 参照)。 複製によるリビジョンの移植に関しては、 hg help graft を参照してください。
If you don't specify a destination changeset (-d/--dest), rebase will use the same logic as hg merge to pick a destination. if the current branch contains exactly one other head, the other head is merged with by default. Otherwise, an explicit revision with which to merge with must be provided. (destination changeset is not modified by rebasing, but new changesets are added as its descendants.)
移動対象リビジョンの指定には、 以下の様な方法があります:
- --rev は、 移動対象の直接指定
- --source は、 指定リビジョン、 およびその子孫の移動
- --base は、 移動「先」と指定リビジョンとの共通祖先、 およびその子孫の移動 (但し、 移動「先」の祖先は含まず)
- 上記 --rev, source, --base の指定がない場合、 --base . 相当の指定で移動を実施
--keep 指定がない場合、 移動元リビジョンは破棄されます。 移動操作は、 ブックマークの移動も伴います。
移動後に変更を伴わないリビジョン (例: 移動先ブランチからのマージ実施) は、 移動の際に破棄されます。
作業領域の親が、 名前付きブランチの最新リビジョンである場合は、 当該ブランチにもう1つヘッドがあっても、 本コマンドは何もしません。 ヘッドが2つあった場合に、 必ずマージを実施する hg merge とは、 この点で挙動が異なります。 このような場合は、 移動元/先を、 明示的に指定してください。
--tool でのツール指定により、 マージ時の衝突解消を自動化可能です。 詳細は hg help merge-tools を参照してください。 なお現時点では、 ファイルの登録除外に関する衝突解消は、 自動化できません。
手動マージによる衝突解消が必要な場合、 移動処理が中断されますので、 衝突解消後に --continue/-c で再開するか、 --abort/-a で中止 (移動関連情報の破棄) してください。
例:
「ローカルの変更」 (作業領域親リビジョン分岐元以降) を、 現行ブランチの最新リビジョンへ移動 (hg pull 後の実施を想定):
hg rebase
単一のリビジョンを stable ブランチへ移動:
hg rebase -r 5f493448 -d stable
リビジョン c0c3 とその全ての子孫を、 リビジョン 4cf9 へと移動:
hg rebase --source c0c3 --dest 4cf9
ブックマーク myfeature が示す枝分かれを default ブランチに移動:
hg rebase --base myfeature --dest default
指定リビジョン群を単一リビジョン化:
hg rebase --collapse -r 1520:1525 -d .
ブランチ名前を維持しつつ、 名前付きブランチ全体を移動:
hg rebase -r "branch(featureX)" -d 1.3 --keepbranches
成功時のコマンド終了値は 0、 移動が必要なリビジョンが無い場合や、 未解消の衝突が発生した場合は 1 です。
オプション:
-s, --source <リビジョン> | |
指定リビジョンとその子孫の移動 | |
-b, --base <リビジョン> | |
指定リビジョンの枝分かれ元以降のリビジョンの移動 | |
-r, --rev <リビジョン[+]> | |
指定リビジョン群の移動 | |
-d, --dest <リビジョン> | |
移動先リビジョン | |
--collapse | 移動後に移動リビジョンを単一化 |
-m, --message <テキスト> | |
指定テキストを要約コミットログとして使用 | |
-e, --edit | コミットログ入力にエディタを起動 |
-l, --logfile <ファイル> | |
要約コミットログをファイルから読み込み | |
-k, --keep | 元リビジョンを維持 |
--keepbranches | 元ブランチ名を維持 |
-D, --detach | (非推奨) |
-i, --interactive | |
(非推奨) | |
-t, --tool <値> | マージツールの指定 |
-c, --continue | 中断された未完了の移動を再開 |
-a, --abort | 中断による未完了な移動の情報を破棄(=中止) |
--style <スタイル> | 当該スタイルで表示をカスタマイズ (非推奨) |
-T, --template <テンプレート> | |
当該テンプレートで表示をカスタマイズ |
[+] 印付きのオプションは複数回指定可能です
commit や qrefresh における対話的な変更取り込みの選択 (非推奨)
本エクステンションの機能は標準機能に取り込まれました。 hg commit --interactive 等を使うようにしてください。
新規パッチのコミット内容を対話的に選択:
hg qrecord [OPTION]... PATCH [FILE]...
用法等の詳細は hg help qnew および hg help 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 | |
差分判定の際に空白行を無視 |
[+] 印付きのオプションは複数回指定可能です
複製リポジトリ間でのハードリンクの再生成
2つのリポジトリ間でのハードリンクの再生成:
hg relink [ORIGIN]
リポジトリの複製が、 同一ファイルシステム上で行われた場合、 管理情報ファイルがハードリンクされるため、 ディスク消費量は、 リポジトリ1つ分で済みます。
残念な事に、 いずれかのリポジトリにおいて、 変更が取り込まれると、 このハードリンクは解消されます。 これは、 両方のリポジトリが、 全く同じ変更を取り込んだ場合でも変わりません。
同様に hg clone に対する --rev 指定も、 ハードリンク使用を止め、 元リポジトリからの複製の実施を行います。
本コマンドは、 ハードリンクを使用する状況を再構築することで、 無駄なディスク領域を回収します。
本コマンドの実行対象となるリポジトリは、 ディスク領域共有対象の ORIGIN リポジトリと、 同一ファイルシステム上になければなりません。 ORIGIN 指定が無い場合、 [paths] セクションの "default-relink" または "default" が使用されます。
コマンド実行中は、 リポジトリに対するあらゆる読み出しは禁止です (両方のリポジトリが書き出しロックされます)
連携先リポジトリ群に対する略記指定の拡張
本エクステンションによって、 複数リポジトリの親 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/
定義済みスキーマは、 同名スキーマ定義により、 上書き可能です。
作業領域中の変更内容の退避および復旧
hg shelve は、 作業領域中の変更内容を、 退避した上で破棄することで、 作業領域を変更が無かった状態に戻します。
退避された変更内容は、 hg unshelve で作業領域に復旧されます。 作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。 変更の衝突解消が必要な場合、 自動的に Mercurial のマージ機能を使用します。
変更内容の退避は、 複数保持することが可能です。 退避された変更内容は、 一意な名前で管理されます。 詳細は hg help shelve を参照してください
作業領域中の変更内容を退避した上で破棄:
hg shelve [OPTION]... [FILE]...
『変更なし』(hg status 参照) 以外の管理対象ファイルの変更内容を、 バンドルファイルとして退避した上で、 作業領域から破棄することで、 作業領域を『変更なし』状態に戻します。
退避した変更内容は hg unshelve で作業領域に復旧できます。 作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。
対象が無指定の場合、 『変更なし』以外の全ての管理対象ファイルが、 変更退避の対象になります。 対象ファイル/ディレクトリ指定がある場合、 指定対象の変更のみが退避されます。
名前付きブランチの新規作成が、 コミット前の状態だった場合、 以下のいずれも指定されない shelve コマンド実行に限って、 新規名前付きブランチの情報が保存され、 unshelve により復旧されます: 退避対象ファイル指定、 --interactive オプション、--include オプション、 --exclude オプション。
退避内容を識別するために、 変更退避の情報は名前を付けて管理されます。 --name での名前指定が無い場合、 アクティブなブックマーク名、 または作業領域の名前付きブランチ名が、 退避情報の名前に使用されます。
退避情報の一覧は --list オプションで表示されます。 退避情報毎に、 名前、 日時情報、 説明文を表示します。 より詳細な表示には --patch や --stat を指定してください。
特定の退避情報を破棄する場合は --delete を指定します。 全ての退避情報を破棄する場合は --cleanup を指定します。
オプション:
-A, --addremove | |
新規/不在ファイルを、退避前に登録/除外対象化 | |
-u, --unknown | 管理対象外ファイルを退避対象に含める |
--cleanup | 退避情報を全て破棄 |
--date <日時> | 指定日時を退避情報に記録 |
-d, --delete | 指定名称の退避情報を破棄 |
-e, --edit | コミットログ入力にエディタを起動 |
-l, --list | 退避情報の一覧表示 |
-m, --message <テキスト> | |
指定の説明文を退避情報に記録 | |
-n, --name <名前> | |
指定ユーザ名を退避情報に記録 | |
-p, --patch | パッチ形式での表示 |
-i, --interactive | |
対話的な退避対象の選択 (退避実施時のみ指定可能) | |
--stat | diffstat 形式の変更概要を出力 |
-I, --include <パターン[+]> | |
パターンに合致したファイルを処理対象に追加 | |
-X, --exclude <パターン[+]> | |
パターンに合致したファイルを処理対象から除外 |
[+] 印付きのオプションは複数回指定可能です
作業領域への退避内容の復旧:
hg unshelve [SHELVED]
本コマンドは、 退避された変更内容を、 作業領域に復旧します。 退避情報名が無指定の場合、 一番最後に退避した変更内容を復旧します。
退避内容を復旧し終えた後、 退避情報はバックアップ領域に移動されます (.hg/shelve-backup)。
任意の時点で退避内容を復旧できるため、 作業領域の親リビジョンと、 退避内容の組み合わせ次第では、 変更内容が衝突するかもしれません。 その場合は、 衝突解消後に hg unshelve --continue を実行して、 復旧処理を完了させてください。 (復旧処理が完了するまでは、 退避情報はバックアップ領域に移動されません)
(hg unshelve --abort 実行により、 衝突が発生した復旧処理を、 中止することもできます。 その場合、 作業領域中の変更は破棄されますが、 退避情報は保持されます)
名前付きブランチの新規作成が、 コミット前の状態だった場合、 以下のいずれも指定されない shelve コマンド実行に限って、 新規名前付きブランチの情報が、 unshelve で復旧されます: 退避対象ファイル指定、 --interactive オプション、--include オプション、 --exclude オプション。
退避内容を復旧し終えた後、 退避情報はバックアップ領域で保持されます。 バックアップ領域に保持される退避情報の最大数は shelve.maxbackups 設定で指定できます (デフォルト値: 10)
オプション:
-a, --abort | 未完了の復旧処理を中止 |
-c, --continue | 未完了の復旧処理を継続 |
-k, --keep | 復旧後も退避情報を維持 |
-t, --tool <値> | マージツールの指定 |
--date <日時> | 一時コミットの日付を設定 (非推奨) |
指定リビジョンと子孫の履歴からの破棄
本エクステンションは、 指定リビジョンとその子孫を、 履歴から破棄します。 詳細は hg help strip を参照してください。
リポジトリからの、 特定リビジョンおよびその子孫の除外:
hg strip [-k] [-f] [-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 | リビジョンを強制的に削除し、 未コミット変更内容を破棄(保存無し) |
--no-backup | バックアップ作成の抑止 |
--nobackup | バックアップ作成の抑止(非推奨) |
-n | ※ このオプションは無視されます (非推奨) |
-k, --keep | 処理中の作業領域更新を抑止 |
-B, --bookmark <値[+]> | |
指定ブックマークから、 到達可能なリビジョンのみを除外 |
[+] 印付きのオプションは複数回指定可能です
別ブランチからのリビジョンの移植
本エクステンションにより、 一連のリビジョン群を別な親リビジョン (リポジトリ横断も可能) の先に移植できます。 移植はパッチ形式 ('diff') を元に実施されます (※ 訳注: rebase や graft は 3-way マージで実施)。
移植されたリビジョンの情報は、 移植先リビジョンのハッシュ値から、 移植元リポジトリにおけるハッシュ値への変換一覧として、 .hg/transplant/transplants に記録されます。
別ブランチからのリビジョン移植:
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 <コマンド> | |
コマンドによるリビジョンのフィルタリング |
[+] 印付きのオプションは複数回指定可能です
問題ある文字コードをパス名に使用する場合の対処
パス名の取り扱い(例: パス要素の分割、 文字大小変換等)上、 不適切な文字を 含む多バイト符号化文字セット(MBCS)が存在します。 ここではそのような文字 セット(例: shift_jis および big5)を「問題文字コード」と呼びます。 本エクステンションは、 パス操作の実施前に unicode 文字列化する処理を 割り込ませることで、 問題文字コードによって発生する障害を防ぎます。
このエクステンションは以下の場合に有用です:
このエクステンションは以下の場合には不要です:
このエクステンションの利用にはいくつかの制限があります:
指定の無い場合、 win32mbcs は Mercurial により決定される (Python プログラム上の) encoding.encoding 変数値を使用します。 以下の設定記述により、 文字コードを指定することができます:
[win32mbcs] encoding = sjis
ログメッセージの文字コードに UTF-8 を使用したいユーザ等に有用です。
改行形式の自動変換 (非推奨)
非推奨: リポジトリの複製の際に設定は複製されないため、 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
コマンドの中には、 .orig 拡張子付きのファイルに、 ファイルの内容を、 バックアップするものもあります (例: hg revert)。 バックアップと同名の .orig ファイルが存在し、且つ Mercurial の管理対象でない場合、 そのファイルの内容は、 バックアップによって上書きされます。
不具合を見つけた場合は、 メーリングリスト ( 後述する 各種情報 参照) までお知らせください。(※ 訳注: 日本語翻訳の不具合等は、 日本語メーリングリスト mercurial-ja へのメール投函や、 Twitter で #mercurialjp ハッシュタグをつけてつぶやいてください)
Matt Mackall <mpm@selenic.com>
Copyright (C) 2005-2016 Matt Mackall. 本ソフトウェアは、 バージョン2またはそれ以降の GNU General Public License の元での自由な利用が保証されています。