| Author: | Matt Mackall <mpm@selenic.com> |
|---|---|
| Organization: | Mercurial |
| Manual section: | 1 |
| Manual group: | Mercurial Manual |
Contents
hg command [option]... [argument]...
The hg command provides a command line interface to the Mercurial system.
| -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 を参照してください。
ファイル名指定が無い場合、 作業領域中の全ファイルが対象となります。
以下の実行例は、 hg add 実行における(未知のファイルの)自動的な 追加の例です:
$ ls foo.c $ hg status ? foo.c $ hg add foo.c を追加登録中 $ hg status A foo.c
全てのファイルの登録が成功した場合のコマンド終了値は 0 です。
オプション:
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -S, --subrepos | サブリポジトリへの再帰的適用 |
| -n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
hg addremove [OPTION]... [FILE]...
作業領域中の新規ファイルの追加登録、 および全不在ファイルの登録除外を 行ないます。
.hgignore に記述されたパターンに合致する新規ファイルは 無視されます。 hg add と同様に、 実行効果が発揮されるのは 次回コミット時点です。
ファイルの改名を検知するには -s/--similarity を使用します。 これは、 0 (改名比較無し) から 100 (完全一致で判定) の範囲で、 類似度を指定 するオプションです (パーセンテージ指定)。 0 より大きい指定値の場合、 全ての追加/除外ファイル対象として、 改名の有無が判定されます。 改名判定には、 相応の時間を要する場合があります。 判定結果の確認は、 本コマンドの実行後に hg status -C 出力を参照してください。 -s/--similarity 未指定の場合、 100 が指定されたものとみなされ、 内容が完全に一致するファイルのみが、 改名とみなされます。
全てのファイルの登録が成功した場合のコマンド終了値は 0 です。
オプション:
| -s, --similarity | |
| ファイル改名推定の際の類似度(0 以上 100 以下) | |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...
ファイルの各行毎に、 その内容が由来するリビジョンIDを表示します。
本コマンドは、 変更の実施者ないし実施時期を特定するのに有用です。
-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果の有用性の有無に関わらず 全てのファイルが処理対象となります。
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 当該リビジョン時点での由来情報を表示 |
| --follow | 複製/改名元ファイルの履歴追跡と、 ファイル名の表示(非推奨) |
| --no-follow | 複製/改名元ファイル履歴の追跡を抑止 |
| -a, --text | 全ファイルをテキストファイルと仮定 |
| -u, --user | ユーザ名を表示(-v 指定時は詳細表示) |
| -f, --file | ファイル名を表示 |
| -d, --date | 日付を表示(-q 指定時は簡略表示) |
| -n, --number | リビジョン番号を表示(既定動作) |
| -c, --changeset | |
| ハッシュ値を表示 | |
| -l, --line-number | |
| 由来リビジョンでの初出時の行番号を表示 | |
| -w, --ignore-all-space | |
| 差分判定の際に空白文字を無視 | |
| -b, --ignore-space-change | |
| 差分判定の際に空白文字の数を無視 | |
| -B, --ignore-blank-lines | |
| 差分判定の際に空白行を無視 | |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 別名: blame |
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
対象リビジョンでの変更を打ち消す効果を持つ変更を、 作業領域で作成します。
対象リビジョンが、 作業領域の親リビジョンの場合、 新規作成された打ち消しリビジョンは、 自動的にコミットされます。 それ以外の場合は、 マージが実施されますが、 マージ結果はコミットされません。
Note
hg backout による打消し機能は、マージ実施リビジョンに対しては、 適用できません。
特に指定が無い場合、 打ち消しリビジョンは、 単一の親リビジョンしか持たない、 一直線の履歴となるように作成されます。 --merge を指定した場合は、 2つの親リビジョンを持つようになります。 一方の親は作業領域の親リビジョン、 もう一方は、 打ち消しリビジョン (= 打ち消し対象の新規子リビジョン) です。
1.7 版より前の本コマンドの --merge 無し時挙動は、 打消しを --merge 付きで実行した後に hg update --clean . 実行したものと等価です。 ここでの hg update --clean . 実行は、 マージ実施をキャンセルし、 後から別途マージできるように、 打ち消しリビジョンを、 ヘッドのまま残す働きをします。
-d/--date での日時表記は hg help dates を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
| --merge | 打ち消しリビジョンを現親リビジョンとマージ |
| --parent | 打ち消しリビジョンとのマージ対象 (非推奨) |
| -r, --rev | 打ち消し対象リビジョン |
| -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 なリビジョン 12 と good なリビジョン 34 から探索開始:
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)"
graphlog エクステンション有効時は、履歴ツリー表示も可能:
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 [-f] [-d] [-i] [-m NAME] [-r REV] [NAME]
ブックマーク (bookmark) は、 コミット操作に追従して移動する、 リビジョン特定用の情報です。 ブックマークのリポジトリ間伝播は、 自動的には行われません。 ブックマークに対しては、 改名/複製/削除が可能です。 hg merge や hg update へのリビジョン指定において、 ブックマークを使用することが可能です。
hg bookmark NAME を実行することで、 作業領域の親リビジョンに、 指定された名前で、 ブックマークが設定されます。 -r を使用して、 対象リビジョンを指定した場合 (対象指定自体にも、 ブックマークを使用可能) そのリビジョンにブックマークが設定されます。
ブックマークは、 リポジトリ間での取り込みや反映が可能です (hg help push および hg help pull 参照)。 但し、 連携するリポジトリの両方が、 ブックマーク機能に対応している必要があります 1.8 版より前の Mercurial の場合、 bookmarks エクステンションを有効にしてください。
ブックマーク '@' が設定されている場合、 特に指定がなければ、 複製先の作業領域は、 そのリビジョンで更新されます (ブックマーク '@' はアクティブになります)
-i/--inactive 指定のある場合、 作成された新規ブックマークは、 アクティブにはなりません。 -r/--rev 指定のある場合、 -i/--inactive 指定が無くても、 新規ブックマークはアクティブになりません。 -i/--inactive 指定時に、 ブックマーク名指定が無い場合は、 現在アクティブなブックマークが、 非アクティブ化されます。
オプション:
| -f, --force | 強制実施 |
| -r, --rev | リビジョン |
| -d, --delete | 指定ブックマークの削除 |
| -m, --rename | 指定ブックマークの改名 |
| -i, --inactive | ブックマークを非アクティブ化 別名: bookmark |
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 [-ac]
リポジトリ中の名前付きブランチを、 非アクティブ (inactive) か否かと共に一覧表示します。 -c/--closed 指定時には、 閉鎖済みのブランチ (hg commit --close-branch 参照) も表示されます。
-a/--active 指定時には、 アクティブなブランチのみが表示されます。 リポジトリ中にヘッドを持つものがアクティブなブランチとみなされます。
作業領域の内容を既存ブランチのもので更新する場合は hg update を 使用してください。
コマンドの終了値は 0 です。
オプション:
| -a, --active | 未マージなヘッドを持つブランチのみを表示 |
| -c, --closed | 閉鎖済みヘッドも表示 |
hg bundle [-f] [-t TYPE] [-a] [-r REV]... [--base REV]... FILE [DEST]
連携対象リポジトリに存在しないリビジョンの情報をまとめて、 圧縮形式のバンドルファイルを生成します。
連携対象リポジトリが無指定の場合、 --base 指定されたリビジョンが、 連携対象リポジトリ側に存在するものと仮定します。 -a/--all (ないし --base null) 指定により、 全リビジョンを含むバンドルファイルが生成できます。
圧縮形式は -t/--type で指定可能です。 利用可能な圧縮形式は none (無圧縮), bzip2, gzip です (無指定時は bzip2 圧縮)。
バンドルファイルは hg unbundle ないし hg pull によって、 他リポジトリに取り込めるので、 変更内容を任意の方法で伝播できます。 バンドルファイルによる伝播は、 hg push/hg pull での直接転送や、 リポジトリ全体の公開が、 できない/望ましく無い場合に有用です。
バンドルファイルによる取り込みでは、 権限設定、 複製/改名、 変更履歴等を含む全ての更新内容が取り込まれます。
成功時のコマンドの終了値は 0、 変更が検出できない場合は 1 です。
オプション:
| -f, --force | 連携先が無関係なリポジトリでも実行 |
| -r, --rev | バンドルに含めたいリビジョン |
| -b, --branch | バンドルに含めたいブランチ |
| --base | 連携先リポジトリに存在することを仮定するリビジョン |
| -a, --all | リポジトリ中の全リビジョンをバンドルに含める |
| -t, --type | バンドルファイルの圧縮形式 (既定値: bzip2) |
| -e, --ssh | SSH 連携で使用する ssh コマンド |
| --remotecmd | 遠隔ホスト側で実行される hg コマンド |
| --insecure | サーバ証明書の検証省略(web.cacerts 設定の無視) |
hg cat [OPTION]... FILE...
指定されたリビジョン時点でのファイル内容を出力します。 リビジョンが 指定されない場合は作業領域の親リビジョンが、 作業領域の更新前なら tip が使用されます。
出力先指定がある場合、 出力はファイルに保存されます。 出力先指定では、 hg export で指定可能なものに加えて、 以下の置換指定が利用可能です:
| %s: | 対象ファイルパスの末尾要素 |
|---|---|
| %d: | 対象ファイルの格納ディレクトリ、 ないし '.'(ルートの場合) |
| %p: | 対象ファイルのリポジトリルートからの相対パス |
成功時のコマンド終了値は 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 の生成は行われません。
-r/--rev でのリビジョン指定や、 -b/--branch でのブランチ指定により、 一部のリビジョンのみを取り込むことができます。 複製先のリポジトリは、 指定リビジョンと、 その祖先のみを保持します。 これらのオプション指定 (あるいは hg clone src#rev dest 形式での複製) がある場合、 同一ファイルシステム上のリポジトリの複製でも、 --pull 指定時と、 同様に振舞います。 タグ名でリビジョンを指定した場合、 タグ「対処」リビジョンは、 複製先に取り込まれますが、 タグ「実施」リビジョンは、 複製先に取り込まれません。
複製元リポジトリにブックマーク '@' が設定されている場合、 特に指定がなければ、 複製先の作業領域は、 そのリビジョンで更新されます。
特定のリビジョンで、 作業領域を更新する場合は -u/--update を、 作業領域にデータを持ちたくない場合は -U/--noupdate を指定します。
複製元/複製先が、 同一ファイルシステム上にある場合、 資源効率の点から、 (リポジトリの内部管理データに対してのみ) ハードリンクが使用されます。 ハードリンク実装が不適切な、 ファイルシステム (例: AFS) は、 ハードリンク使用時に、 エラー通知がありません。 このような場合には --pull を指定することで、 ハードリンク使用を抑止してください。
リポジトリの内部管理データと作業領域中のファイル全てに対する、 ハードリンクによる複製の作成には、 以下の方法が使えるかも知れません:
$ cp -al REPO REPOCLONE
この方法は最速の複製方法かもしれませんが、 常に安全とは限りません。 操作の単一性は保障されません (複製中のリポジトリの変更防止は、 利用者責務) し、 利用するエディタのファイル変更時の振る舞いが、 ハードリンクを破棄するものである必要があります (Emacs および多くの Linux 系ツールは、 そのように振舞います)。 この制約は、 MQ エクステンションのように、 .hg ディレクトリ配下に、 管理情報を格納するツールとは相容れません。
Mercurial は、 以下の一覧中で最初に利用可能なリビジョンを用いて、 作業領域を更新します:
例:
遠隔ホストのリポジトリを、 新規 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 に保存されます。
--amend を指定した場合、 作業領域の親リビジョンの持つ変更内容に、 hg status が表示する変更内容 (変更がある場合) を加えたもので、 作業領域の親リビジョンを改変します。 改変前のリビジョンの内容は、 バンドル形式で .hg/strip-backup にバックアップされます。 (復旧方法は hg help bundle および hg help unbundle を参照). (※ 訳注: --amend 指定時は、 対象ファイルを指定しても、 追加記録分の選択にのみ使用され、 記録済みファイルの取捨選択には、 影響しません。 MQ エクステンションの hg:qrefresh における --short 指定と同等な挙動となります。)
コミットログ、 ユーザ名、 記録日付は、 明示的な指定が無い限り、 改変対象のリビジョンのものが再利用されます。 コマンド行において、 コミットログが指定されない場合、 改変前のメッセージを使って、 エディタが起動されます。
public フェーズ (hg help phases 参照) のリビジョンや、 既に子リビジョンを持つリビジョンは、 改変できません
-d/--date での日時表記は hg help dates を参照してください。
成功時のコマンドの終了値は 0、 変更が検出できない場合は 1 です。
オプション:
| -A, --addremove | |
| コミット前に、 新規/不在ファイルを登録/除外 | |
| --close-branch | ブランチを閉鎖し、 ブランチ一覧での表示から除外 |
| --amend | 作業領域の親リビジョンの改変 |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -m, --message | 指定テキストをコミットログとして使用 |
| -l, --logfile | コミットログをファイルから読み込み |
| -d, --date | 指定日時をコミット日時として記録 |
| -u, --user | 指定ユーザをコミットユーザとして記録 |
| -S, --subrepos | サブリポジトリへの再帰的適用 別名: ci |
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
マージ実施リビジョンに対する本コマンドの差分出力が、 期待と異なる場合があるのは、 対象リビジョンが無指定の場合に 比較対象となるのが、 作業領域の第1親に固定されているためです。
リビジョンが2つ指定された場合、 指定リビジョン間の差分が表示されます。 リビジョンが1つ指定された場合、 作業領域との間の差分が表示されます。 リビジョンが指定されない場合、 作業領域と親との差分が表示されます。
指定リビジョンと、 その第1親との間の差分を見るには、 -c/--change で 対象リビジョンを指定する方法も使用できます。
-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果に関わらず全てのファイルが 処理対象となります。
git 拡張差分形式で表示するには -g/--git を指定します。 詳細は hg help diffs を参照してください。
例:
作業領域のファイルを親リビジョンと比較:
hg diff foo.c
2つのリビジョン時点でのディレクトリ内容を比較 (改名情報付き):
hg diff --git -r 1.0:1.2 lib/
指定日時時点からの差分の統計情報を表示:
hg diff --stat -r "date('may 2')"
指定キーワードを含む全新規追加ファイルの差分を表示:
hg diff "set:added() and grep(GNU)"
指定リビジョンとその親を比較:
hg diff -c 9353 # 第1親との比較 hg diff -r 9353^:9353 # 上記と等価な revset 文法記述 hg diff -r 9353^2:9353 # 第2親との比較
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | リビジョン |
| -c, --change | 当該リビジョンにおける変更内容の表示 |
| -a, --text | 全ファイルをテキストファイルと仮定 |
| -g, --git | git 拡張差分形式の使用 |
| --nodates | 差分表示の際に日付情報の表示を抑止 |
| -p, --show-function | |
| 差分表示の際に関数名情報を表示 | |
| --reverse | 変更を取り消すための差分を生成 |
| -w, --ignore-all-space | |
| 差分判定の際に空白文字を無視 | |
| -b, --ignore-space-change | |
| 差分判定の際に空白文字の数を無視 | |
| -B, --ignore-blank-lines | |
| 差分判定の際に空白行を無視 | |
| -U, --unified | 差分コンテキストの行数 |
| --stat | diffstat 形式の変更概要を生成 |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -S, --subrepos | サブリポジトリへの再帰的適用 |
hg export [OPTION]... [-o OUTFILESPEC] [-r] [REV]...
指定リビジョンに対して、 ヘッダ情報および変更内容を表示します。 リビジョン指定が無い場合は、 作業領域の第1親指定とみなします。
ヘッダ情報として表示される情報は:作成者/日付/ (default 以外の場合は)ブランチ名前/ハッシュ値/親リビジョン/コミットログ
Note
マージ実施リビジョンに対する本コマンドの差分出力が、 期待と異なる場合があるのは、 比較対象が対象リビジョンの第1親に 固定されているためです。
出力先指定(置換指定可能)がある場合、 出力はファイルに保存されます。 置換指定として以下のものが使用可能です:
| %%: | "%" 文字そのもの |
|---|---|
| %H: | ハッシュ値(40 桁 16 進数) |
| %N: | 生成されるファイルの総数 |
| %R: | リビジョン番号 |
| %b: | 対象リポジトリパスの末尾要素 |
| %h: | 短縮形式ハッシュ値(12 桁 16 進数) |
| %m: | コミットログの1行目 (英数字限定) |
| %n: | 1から始まるゼロ詰めの通し番号 |
| %r: | ゼロ詰めのリビジョン番号 |
-a/--text 指定が無い場合、 バイナリと思しきファイルは処理対象から 除外されます。 -a 指定が有る場合、 結果に関わらず、 全てのファイルが 処理対象となります。
git 拡張差分形式で出力するには -g/--git を指定します。 詳細は hg help diffs を参照してください。
--switch-parent を指定することで、 比較対象が第2親になります。 これはマージのレビューの際などに有効です。
例:
export と import の併用による現ブランチ上への変更の移植:
hg export -r 9353 | hg import -
指定リビジョン間の全変更 (改名情報付き) をファイルに出力:
hg export --git -r 123:150 > changes.txt
可読性ある名前の一連のファイルに変更内容を分割格納:
hg export -r "outgoing()" -o "%n-%m.patch"
成功時のコマンド終了値は 0 です。
オプション:
| -o, --output | ファイル内容の保存先 |
| --switch-parent | |
| 第2親との差分を使用 | |
| -r, --rev | 対象リビジョン |
| -a, --text | 全ファイルをテキストファイルと仮定 |
| -g, --git | git 拡張差分形式の使用 |
| --nodates | 差分表示の際に日付情報の表示を抑止 |
hg forget [OPTION]... FILE...
指定ファイルの次回コミットにおける登録除外を予約します。
本コマンドでの登録除外は、 現ブランチにおける登録除外のみを意味し、 履歴そのものは保持され続けますし、 作業領域からも削除されません。
登録除外操作のコミット前取り消しは、 hg help add を参照して ください。
例:
新規追加のバイナリファイルを登録除外:
hg forget "set:added() and binary()"
.hgignore による無視対象ファイルを登録除外:
hg forget "set:hgignore()"
成功時のコマンド終了値は 0 です。
オプション:
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
hg graft [OPTION]... [-r] REV...
本コマンドは、 あるブランチから別のブランチへ、 Mercurial のマージ機能でリビジョンを複製しますが、 履歴上はマージされません。 これは 'backport' ないし 'cherry-picking' と呼ばれる機能です。 特に指定の無い場合、 ユーザ名、 日付、 コミットログは、 元リビジョンのものを再利用します。
現行リビジョンの祖先、 既に移植 (graft) 済みのリビジョン、 マージ実施リビジョンは、 複製対象から除外されます。
--log が指定された場合、 以下の形式のコメントがログに付加されます:
(grafted from 移植元リビジョンのハッシュ値)
本コマンドのマージ処理で衝突が検出された場合、 処理が中断されるので、 手動での衝突解決が可能です。 全ての衝突が解消されたならば、 -c/--continue 指定によりコマンドの実行を再開してください。
Note
-c/--continue でも、 以前のオプション指定までは再現されません。
例:
コミットログを改変しつつ単一リビジョンを stable へ複製:
hg update stable hg graft --edit 9393
日付を更新しつつ、2091 を除く指定範囲中のリビジョンを複製:
hg graft -D "2085::2093 and not 2091"
衝突解消後のコマンド実行再開:
hg graft -c
複製元リビジョンの表示:
hg log --debug -r tip
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 移植対象リビジョン |
| -c, --continue | 中断された移植を再開 |
| -e, --edit | コミットログ入力にエディタを起動 |
| --log | コミットログへの移植情報の付与 |
| -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 foo を実行することで、 名前付きブランチ foo におけるヘッドを表示できることを意味します。
-c/--closed 指定時には、 閉鎖済みのブランチ (hg commit --close-branch 参照) も表示されます。
「開始リビジョン」が指定された場合、 指定された開始リビジョンの 子孫となるヘッドのみが表示されます。
-t/--topo 指定時には、 名前付きブランチに関する判定は無視され、 単に子リビジョンを持たないリビジョンが表示されます。
合致するヘッドがある場合のコマンドの終了値は 0、 それ以外は 1 です。
オプション:
| -r, --rev | 指定リビジョンの子孫となるヘッドのみを表示 |
| -t, --topo | 構造的なヘッドのみを表示 |
| -a, --active | アクティブなブランチヘッドのみを表示 (非推奨) |
| -c, --closed | 閉鎖済みヘッドも表示 |
| --style | 当該スタイルで表示をカスタマイズ |
| --template | 当該テンプレートで表示をカスタマイズ |
hg help [-ec] [TOPIC]
引数指定が無い場合、 コマンドの一覧と概要を表示します。
トピックやコマンド名が指定された場合、 指定対象のヘルプを表示します。
成功時のコマンド終了値は 0 です。
オプション:
| -e, --extension | |
| エクステンションのヘルプのみを表示 | |
| -c, --command | コマンドに関するヘルプのみを表示 |
| -k, --keyword | キーワードに合致するトピック一覧を表示 |
hg identify [-nibtB] [-r REV] [SOURCE]
1つないし2つの親リビジョンのハッシュ値を使用して、 指定リビジョンにおける要約情報を表示します。 親リビジョンハッシュに続けて、 作業領域の変更が未コミットの場合は "+" 、 default 以外のブランチであればブランチ名、 付与されているタグの一覧、 および付与されているブックマークの一覧が表示されます。
リビジョン指定無しで起動された場合は、 作業領域の状態を表示します。
パス指定有りでの起動の際には、 他のリポジトリないしバンドルファイルの 状態を表示します。
例:
作業領域のビルド識別情報の生成:
hg id --id > build-id.dat
タグに対応するリビジョンの特定:
hg id -n -r 1.3
連携先リポジトリにおける最新リビジョンの確認:
hg id -r tip http://selenic.com/hg/
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 当該リビジョンの識別情報を表示 |
| -n, --num | リビジョン番号を表示 |
| -i, --id | ハッシュ値を表示 |
| -b, --branch | ブランチ名を表示 |
| -t, --tags | タグを表示 |
| -B, --bookmarks | |
| ブックマークの表示 | |
| -e, --ssh | SSH 連携で使用する ssh コマンド |
| --remotecmd | 遠隔ホスト側で実行される hg コマンド |
| --insecure | サーバ証明書の検証省略(web.cacerts 設定の無視) 別名: id |
hg import [OPTION]... PATCH...
列挙されたパッチの取り込みおよびコミットを (--no-commit 指定が無い限り) 個別に行います。
作業領域の変更が未コミットの場合、 -f/--force が指定されない限り、 取り込みは実施されません。
添付ファイル形式 (但し text/plain ないし text/x-patch 型限定) を含めて、 電子メールからもパッチを取り込めます。 作成者/コミットログが無い場合、 電子メールの From および Subject ヘッダ値を使用します。 差分データに先立つ text/plain パートは、 コミットログに追記されます。
hg export により生成されたパッチを取り込む場合、 電子メールの ヘッダやボディの情報よりも、 パッチに含まれる情報の方が優先します。 コマンドラインでの -m/--message ないし -u/--user 指定は、 これらよりも更に優先します。
--exact 指定時には、 作業領域をパッチの親リビジョンに更新してから、 パッチを適用しますが、 パッチにより作成されたリビジョンのハッシュ値が、 パッチに記録された値と異なる場合、 パッチの取り込みは中断されます。 この問題の原因として考えられるのは、 文字符号化形式の不一致や、 パッチ内容の欠損などです。
--bypass 指定時は、 作業領域内容の変更無しに、 履歴に記録します。 --exact 指定が無い場合、 変更は作業領域の親リビジョンに適用されます。
-s/--similarity が指定された場合、 hg addremove と同様な方針で、 パッチによる変更結果から、 改名や複製を検出します。
標準入力からパッチを取り込むには、 パッチ名に "-" を指定します。 URL が指定された場合、 パッチを当該 URL からダウンロードします。 -d/--date での日時表記は hg help dates を参照してください。
例:
ウェブサイトから入手した標準的なパッチの適用と改名の判定:
hg import -s 80 http://example.com/bugfix.patch
hgweb サーバからの指定リビジョンの取り込み:
hg import http://www.selenic.com/hg/rev/5ca8c111e9aa
Unix 形式 mbox ファイル中の全パッチの取り込み:
hg import incoming-patches.mbox
export されたリビジョンの厳密適用 (常に成功するとは限りません):
hg import --exact proposed-fix.patch
成功時のコマンド終了値は 0 です。
オプション:
| -p, --strip | パス要素除去数(patch コマンドの同名オプションと同機能) (既定値: 1) |
| -b, --base | 基底パス (非推奨) |
| -e, --edit | コミットログ入力にエディタを起動 |
| -f, --force | 作業領域中の未コミット変更の確認を省略 |
| --no-commit | 作業領域の更新のみで、 コミット実施を抑止 |
| --bypass | 作業領域の内容を変更せずにパッチを適用 |
| --exact | パッチ作成時と同じ親リビジョンに対して適用 |
| --import-branch | |
| パッチ中のブランチ情報を利用(--exact 指定時は自動適用) | |
| -m, --message | 指定テキストをコミットログとして使用 |
| -l, --logfile | コミットログをファイルから読み込み |
| -d, --date | 指定日時をコミット日時として記録 |
| -u, --user | 指定ユーザをコミットユーザとして記録 |
| -s, --similarity | |
ファイル改名推定の際の類似度(0 以上 100 以下) 別名: patch | |
hg incoming [-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]
ファイルパス、 URL ないし hg pull の無指定時連携先リポジトリ中の、 未取り込みリビジョンを検索します。 これらのリビジョンは hg pull を実行した際に、 取り込み対象となります。
--bundle での書き出し結果を利用した hg pull の実施は、 hg pull での再度のデータ転送を抑止できるため、 (データ転送コストの高い) 遠隔ホストとの連携では特に有用です。
対象リポジトリの指定形式は hg help pull を参照してください。
取り込み対象がある場合のコマンド終了値は 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 | 当該スタイルで表示をカスタマイズ |
| --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" が複数のファイル名に解釈して しまう問題は、 このオプションにより解消されます。
パターン合致がある場合のコマンドの終了値は 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 が指定された場合、 変更対象ファイル一覧と、 コミットログの全文も表示されます。
Note
マージ実施リビジョンに対する -p/--patch 指定による差分出力が、 期待と異なる場合があるのは、 比較対象が対象リビジョンの第1親に 固定されているためです。 ファイル一覧が予期せぬ内容となるのは、 親同士で内容が異なるファイルのみが列挙されるためです。
Note
ファイル名指定付きでの実行では、 複数ブランチ上での同一変更や、 登録除外実施リビジョンは、 性能的な点から表示しません。 重複変更や登録除外を含め、 全てのリビジョンを表示する場合、 --removed を指定してください。
例:
全リビジョンのコミットログとファイル一覧の表示:
hg log -v
作業領域の祖先の表示:
hg log -f
現行ブランチにおける直近の 10 リビジョンの表示:
hg log -l 10 -b .
登録除外を含む、ファイルに対する全変更の表示:
hg log --removed file.c
マージ以外での、ディレクトリ配下への全変更の差分付き表示:
hg log -Mp lib/
指定キーワードに合致する全リビジョン番号の表示:
hg log -k bug --template "{rev}\n"
指定リビジョンが指定タグ時点において含まれているかを確認:
hg log -r "a21ccf and ancestor(1.9)"
指定期間における指定ユーザによる全変更の表示:
hg log -k alice -d "may 2008 to jul 2008"
最後のタグ付け以降の全変更の概要の表示:
hg log -r "last(tagged())::" --template "{desc|firstline}\n"
-d/--date での日時表記は hg help dates を参照してください。
リビジョン指定の詳細は hg help revisions および hg help revsets を参照してください。
同梱されているスタイルや、テンプレートのカスタマイズ等の詳細は、 hg help templates を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
| -f, --follow | 複製元や改名元の履歴も遡る |
| --follow-first | マージの際には第1親のみを遡る (DEPRECATED) |
| -d, --date | 指定日時に合致するリビジョンを表示 |
| -C, --copies | 複製されたファイルを表示 |
| -k, --keyword | 指定キーワードによる検索(大文字小文字は無視) |
| -r, --rev | 指定された単一、 ないしリビジョン区間の表示 |
| --removed | ファイルが登録除外されたリビジョンを含める |
| -m, --only-merges | |
| マージ実施リビジョンのみを表示 (DEPRECATED) | |
| -u, --user | 当該ユーザによるリビジョンを表示 |
| --only-branch | 指定の名前付きブランチに属するリビジョンを表示 (非推奨) |
| -b, --branch | 指定の名前付きブランチに属するリビジョンを表示 |
| -P, --prune | 当該リビジョンとその祖先の表示を抑止 |
| -p, --patch | パッチ形式での表示 |
| -g, --git | git 拡張差分形式の使用 |
| -l, --limit | 最大表示リビジョン数 |
| -M, --no-merges | |
| マージ実施リビジョンの表示抑止 | |
| --stat | diffstat 形式の変更概要を生成 |
| -G, --graph | 履歴ツリーの表示 |
| --style | 当該スタイルで表示をカスタマイズ |
| --template | 当該テンプレートで表示をカスタマイズ |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 別名: history |
hg manifest [-r REV]
指定リビジョンにおける構成管理対象ファイルの一覧を表示します。 リビジョン指定が無い場合、 作業領域の(第1)親リビジョンか、 作業領域の更新前なら null が使用されます。
-v が指定された場合、 ファイルアクセス権やシンボリックリンク、 実行可能ビットといったものも表示されます。 --debug が指定された場合、 各ファイルのリビジョンのハッシュ値が 表示されます。
--all が指定された場合、 リビジョンに関わる全ファイルが表示されます。 この場合、 削除/改名対象ファイルも含まれます。
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 表示対象リビジョン |
| --all | 関連する全ファイルの表示 |
hg merge [-P] [-f] [[-r] REV] 現時点での作業領域の内容を、 指定されたリビジョンへと至るまでの 共通の親リビジョンからの変更内容とマージします。 両方の親リビジョンに対して差分のあるファイルは、 次回コミットの際には 変更されたものとして記録されますので、 必要以上の変更が実施される前に コミットを実施してください。 このコミット時に生成されるリビジョンは、 親リビジョンを2つ持つリビジョンとなります。 ``--tool`` を使用することで、 ファイルのマージに使用するコマンドを指定可能です。 このオプションによる指定は、 HGMERGE 環境変数や設定ファイルによる指定を上書きします。 指定の詳細に関しては、 :hg:`help merge-tools` を参照してください。 マージ対象リビジョンの指定が無く、 作業領域の親リビジョンがヘッドで、 且つ現行ブランチがもう1つだけヘッドを持つ場合、 そのヘッドがマージ 対象となります。 それ以外の場合は、 明示的なリビジョン指定が必要です。
衝突未解消なファイルは hg resolve での衝突解消が必要です。
コミット前にマージ処理を取り消す場合は、 hg update --clean . が使用できますが、 マージ前の親リビジョンの内容で上書きするため、 作業領域中の全ての変更内容が失われます。
成功時のコマンド終了値は 0、 未解消ファイルがある場合は 1 です。
オプション:
| -f, --force | 作業領域中の未コミット変更ごとマージを実施 |
| -r, --rev | マージ対象リビジョン |
| -P, --preview | マージ対象リビジョンの確認(マージ処理は未実施) |
| -t, --tool | マージツールの指定 |
hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]
指定された連携先リポジトリ (ないし、 無指定時の hg push 先リポジトリ) に含まれないリビジョンを表示します。 ここで表示されるリビジョンは、 hg push 実施の際に、 連携先へと反映されます。
有効なリポジトリ指定形式は hg pull を参照してください。
反映可能リビジョンがある場合のコマンド終了値は 0、 それ以外は 1 です。
オプション:
| -f, --force | 連携先が無関係なリポジトリでも実行 |
| -r, --rev | 反映対象とするリビジョン |
| -n, --newest-first | |
| 新しいリビジョンから先に表示 | |
| -B, --bookmarks | |
| ブックマークの比較 | |
| -b, --branch | 反映対象とする名前付きブランチ |
| -p, --patch | パッチ形式での表示 |
| -g, --git | git 拡張差分形式の使用 |
| -l, --limit | 最大表示リビジョン数 |
| -M, --no-merges | |
| マージ実施リビジョンの表示抑止 | |
| --stat | diffstat 形式の変更概要を生成 |
| -G, --graph | 履歴ツリーの表示 |
| --style | 当該スタイルで表示をカスタマイズ |
| --template | 当該テンプレートで表示をカスタマイズ |
| -e, --ssh | SSH 連携で使用する ssh コマンド |
| --remotecmd | 遠隔ホスト側で実行される hg コマンド |
| --insecure | サーバ証明書の検証省略(web.cacerts 設定の無視) |
| -S, --subrepos | サブリポジトリへの再帰的適用 別名: out |
hg parents [-r REV] [FILE]
作業領域の親リビジョンを表示します。 -r/--rev でのリビジョン指定が ある場合、 指定リビジョンの親リビジョンを表示します。 ファイルが指定 された場合、 (作業領域の親リビジョン、 ないし --rev 指定のリビジョン 以前のもので)そのファイルを最後に更新したリビジョンを表示します。
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 親リビジョンの表示対象 |
| --style | 当該スタイルで表示をカスタマイズ |
| --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 に記録されます。 default および default-push は全ての取り込み (例: hg incoming) および反映 (例: hg outgoing、 hg email および hg bundle) 操作において適用されます。
詳細は hg help urls を参照してください。
成功時のコマンド終了値は 0 です。
hg phase [-p|-d|-s] [-f] [-r] REV...
引数無しの場合、 指定リビジョンのフェーズ名を表示します。
-p/--public、 -d/--draft ないし -s/--secret が指定された場合、 指定リビジョンのフェーズを指定値に変更します。
-f/--force が指定されない限り、 低い方から高い方へのフェーズ変更は、 実施できません。 フェーズの高低は以下のように定義されています:
public < draft < secret
成功時のコマンドの終了値は 0、 フェーズ状態変更が無い、あるいは、 変更に失敗した場合は 1 です。
オプション:
| -p, --public | リビジョンのフェーズを public 化 |
| -d, --draft | リビジョンのフェーズを draft 化 |
| -s, --secret | リビジョンのフェーズを secret 化 |
| -f, --force | フェーズ境界の移動を伴う強制実行 |
| -r, --rev | 対象リビジョン |
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 を使用します。 このオプションは、 新規ブランチの作成のみを許可します。
通常挙動における制約を無視して、 全てのブランチにおける全ての変更を 反映する場合は、 -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
======= == == == ==
作業領域における追加 [A] 状態のファイルに関しては、 --force を指定しなくても、 登録除外操作によって破棄されることはありません。
成功時のコマンド終了値は 0、 警告検出時は 1 です。
オプション:
| -A, --after | 手動で削除済みのファイルに対して、 登録除外の旨を記録 |
| -f, --force | 追加登録/変更対象であっても登録除外(ファイルは削除) |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 別名: rm |
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 を参照してください。
本コマンドは、 以下の形式で使用されます:
衝突未解消のファイルがある間はコミットできません。 マージにおける衝突解消の際には、 コミット前に hg resolve -m ... を実施してください。
成功時のコマンド終了値は 0、 衝突解消失敗がある場合は 1 です。
オプション:
| -a, --all | 衝突未解消の全ファイルを処理対象にする |
| -l, --list | マージの必要なファイルの解消状態一覧 |
| -m, --mark | 当該ファイルを衝突解消済み状態に設定 |
| -u, --unmark | 当該ファイルを衝突未解消状態に設定 |
| -n, --no-status | |
| 状態記号の表示を抑止 | |
| -t, --tool | マージツールの指定 |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
hg revert [OPTION]... [-r REV] [NAME]...
Note
作業領域を、 別リビジョン時点の内容で更新する場合は hg update 対象リビジョン を実行してください。 マージ実施を途中で取り消す場合は hg update --clean . を実行してください (マージにおける修正内容は破棄されます)。
リビジョン指定が無い場合は、 指定されたファイル/ディレクトリを、 作業領域の親リビジョン時点の内容へと復旧します。 本コマンドは対象ファイルに対して、 状態を「変更無し」とし、 add/remove/copy/rename の実施予定を取り消します。 作業領域が複数の親リビジョンを持つ場合、 いずれかのリビジョンを明示的に指定して下さい。
-r/--rev が指定された場合、 指定されたファイル/ディレクトリを、 指定されたリビジョン時点の内容へと復旧します。 以前の変更内容の一部ないし全部を、 取り消す用途にも使用できます。 -d/--date での日時表記は hg help dates を参照してください。
変更ありのファイルを復旧した場合、 .orig 拡張子を付けたファイルに、 復旧前の内容が保存されます。 この保存は --no-backup で無効化されます。
-d/--date での日時表記は hg help dates を参照してください。
成功時のコマンド終了値は 0 です。
オプション:
| -a, --all | 引数指定が無い場合に、 全ファイルの内容を復旧 |
| -d, --date | 当該日時の最新リビジョンを使用 |
| -r, --rev | 当該リビジョン時点の内容で復旧 |
| -C, --no-backup | |
| 取り消し実施前内容のバックアップを抑止 | |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -n, --dry-run | 実施予定の処理内容の表示のみで処理実施は抑止 |
hg rollback
本コマンドの使用には注意を要します。 巻き戻しは1段階限りで、 巻き戻し後の再実施はできません。 直前のトランザクション時点の、 作業領域状態が復元され、 その時点以後の変更は全て失われます。 但し、 作業領域の内容は変更されません。
トランザクションとは、 コマンド実行による、 新規リビジョンの作成や、 外部からのリビジョンの取り込みといった、 リポジトリ操作を、 ひとまとめにするものです。
例えば、 以下のコマンドはいずれもトランザクションを形成するため、 本コマンドにより、 その効果を巻き戻し可能です:
データが永遠に失われるのを回避するため、 コミットの巻き戻し操作は、 作業領域の親リビジョン以外に対しては、 失敗するようになっています。 この回避挙動は --force 指定により抑止されます。
本コマンドは、 公開リポジトリでの実行を想定していません。 一旦他の ユーザから 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-pipefds | |
| (バックグラウンド実行時での内部用途向け) | |
| -E, --errorlog | エラーログの書き出し先ファイル |
| -p, --port | 要求受け付けポート番号(既定値: 8000) |
| -a, --address | 要求受け付けアドレス(既定値: 全インタフェース) |
| --prefix | 公開パス接頭辞(既定値: ルート) |
| -n, --name | 表示名(既定値: 作業領域のパス) |
| --web-conf | hgweb 設定ファイル位置("hg help hgweb" 参照) |
| --webdir-conf | hgweb 設定ファイル位置 (非推奨) |
| --pid-file | プロセスIDの書き出し先ファイル |
| --stdio | (ホスト間連携での内部用途向け) |
| --cmdserver | (ホスト間連携での内部用途向け) |
| -t, --templates | |
| 当該テンプレートで表示をカスタマイズ | |
| --style | 当該スタイルで表示をカスタマイズ |
| -6, --ipv6 | IPv4 に加えて IPv6 を使用 |
| --certificate | SSL 証明書ファイル |
hg showconfig [-u] [NAME]...
引数指定が無い場合、 全ての設定項目に対して、 名前と値を表示します。
'section.name' 形式に合致する引数を1つだけ指定した場合、 その設定項目 値のみを表示します。
複数の引数が指定された場合、 それらをセクション名とみなし、 該当する セクションの設定項目を全て表示します。
--debug 指定がある場合、 設定項目毎に記述位置(ファイル名と行番号)が 表示されます。
成功時のコマンド終了値は 0 です。
オプション:
| -u, --untrusted | |
信頼できない設定項目も表示 別名: debugconfig | |
hg status [OPTION]... [FILE]...
作業領域のファイル状態を表示します。 名前(パターン)指定のある場合、 その名前に合致するファイルのみが表示されます。 変更無し(clean)、 無視(ignored)ないし複製(copy)・改名(rename)の元ファイルに関しては、 それぞれ -c/--clean、 -i/--ignored ないし -C/--copy が指定されるか、 あるいは -A/--all が指定されない限り表示されません。 いずれの表示対象選択オプションも指定されない場合、 -m -a -r -d -u が指定されたものとみなします。
-q/--quiet 指定がある場合、 -u/--unknown ないし -i/--ignored が明示的に指定されない限り、 未登録ファイルは表示されません。
Note
権限設定の変更やマージが行われた場合、 差分表示から期待される 結果とは異なる状態が表示される可能性があります。 標準的な差分形式は権限変更の情報を含みませんし、 マージ実施リビジョンに対しては、 一方の親リビジョンとの差分 しか表示しないためです。
1つのリビジョンが指定された場合、 比較元リビジョンとして扱われます。 2つのリビジョンが指定された場合、 両リビジョン間で状態を比較します。 --change 指定を使うことで、 第1親から変更されたファイル一覧を簡単に 表示させることができます。
ファイルの状態を表す記号は以下の通り:
M = 変更有り(Modified) A = 追加登録予定(Added) R = 登録除外予定(Removed) C = 変更無し(Clean) ! = 構成管理対象にも関わらず作業領域にファイルが無い(missing) ? = 構成管理対象外(unknown) I = 無視(Ignored) = 直前に表示される新規登録予定ファイル(A)の複製元
例:
作業領域と指定リビジョンとの間での状態変更を表示:
hg status --rev 9353
指定リビジョンにおける状態変更 (複製元含む) を表示:
hg status --copies --change 9353
追加登録されたファイルの NUL 区切り一覧の表示 (xargs 向け):
hg status -an0
成功時のコマンド終了値は 0 です。
オプション:
| -A, --all | 全ての状態を表示 |
| -m, --modified | 変更されたファイルを表示 |
| -a, --added | 追加登録されたファイルを表示 |
| -r, --removed | 登録除外されたファイルを表示 |
| -d, --deleted | 削除されたファイル(登録除外は未実施)を表示 |
| -c, --clean | 変更の無いファイルを表示 |
| -u, --unknown | 構成管理対象外のファイルを表示 |
| -i, --ignored | 無視対象のファイルを表示 |
| -n, --no-status | |
| 状態記号の表示を抑止 | |
| -C, --copies | 複製元ファイルを表示 |
| -0, --print0 | ファイル名をNUL文字(0x00)で終端(xargs との併用向け) |
| --rev | 当該リビジョンとの差分で状態を判定 |
| --change | 指定リビジョンにおける変更対象ファイルの一覧 |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
| -S, --subrepos | サブリポジトリへの再帰的適用 別名: st |
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 の指定が必要です
対象リビジョンが指定されない場合、 作業領域の親リビジョンが (作業領域更新前なら tip が) タグ付けの対象となります。
分散構成管理におけるタグ付けの集約を容易にするために、 構成管理下にある他のファイルと同様に、 タグの情報は ".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のカラムが追加されます。
成功時のコマンド終了値は 0 です。
hg tip [-p] [-g]
tip リビジョン(一般には単に tip と表記)とは、 リポジトリおいて最も 新しく追加されたリビジョンであると同時に、 最も新しく変更されたヘッド のことでもあります。
コミットした直後であれば、 生成されたリビジョンが tip となります。 他のリポジトリから変更履歴の取り込みをした直後であれば、 連携先 リポジトリでの tip が現リポジトリの tip となります。 "tip" タグは 特別なタグで、 改名や、 他のリビジョンへの付け替えはできません。
成功時のコマンド終了値は 0 です。
オプション:
| -p, --patch | パッチ形式での表示 |
| -g, --git | git 拡張差分形式の使用 |
| --style | 当該スタイルで表示をカスタマイズ |
| --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 | リビジョン 別名: up checkout co |
hg verify
現リポジトリの整合性を検証します。
本コマンドは、 リポジトリの整合性に関する広範な検証を行います。 変更履歴・マニフェスト・各構成管理対象ファイルにおけるハッシュ値 およびチェックサム、 相互関連付けおよびインデックス等の整合性が 検証されます。
リポジトリ破損時の復旧に関する詳細は、 以下の URL を参照してください。 http://mercurial.selenic.com/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 による設定無効化の際でも、 維持する機能をカンマ区切りで列挙します。 現在利用可能な機能名は "i18n" のみで、 国際化関連機能が維持されます。
HGPLAINEXCEPT に何らかの設定 (空設定でも可) をした場合、 設定無効化が機能します。
コミット時に記録する、 リビジョン作成者名の指定。 作成者名として採用される値は、 以下の順序で決定されます:
(非推奨: 設定ファイル経由で指定してください)
Mercurial には、 新規機能を「エクステンション」という機構を用いて 追加する仕組みが備わっています。 エクステンションでは、 コマンドの 新規追加、 既存コマンドへのオプションの追加、 コマンドの挙動の変更、 フックの実装といったことが可能です。
様々な事情から、 特に指定の無い場合にはエクステンションは読み込まれ ません。 付加的な読み込みは、 起動時間の増加を意味します。 上級用途 限定のものもあります。 (履歴の破壊や改変などの)潜在的な危険性を持つ 場合もあります。 実験的なものであるかもしれません。 これまでの Mercurial の振る舞いを変えてしまうかもしれません。 エクステンションを 必要に応じて有効化するのは利用者の責務です。
"foo" というエクステンションを有効化するには、 Mercurial 同梱のものであろうと、 Python の検索パス中のものであろうと、 設定ファイルにおいて以下のような記述が必要です:
[extensions] foo =
エクステンションへのフルパスを記述することも可能です:
[extensions] myfeature = ~/.hgext/myfeature.py
明示的にエクステンションを無効化する場合、 適切な設定ファイルにおいて パス指定部分に '!' を記述します:
[extensions] # /path/to/extension/bar.py にあるエクステンション bar の無効化 bar = !/path/to/extension/bar.py # こちらはパス指定無しでの baz エクステンションの無効化 baz = !
無効化されているエクステンション:
acl: リポジトリにおけるアクセス制御用のフック集 blackbox: log repository events to a blackbox for debugging bugzilla: Bugzilla バグ管理システムとの連携用フック集 children: 子リビジョン表示のコマンド (非推奨) churn: 変更履歴の統計情報表示のコマンド color: コマンド出力のカラー化 convert: 他の構成管理ツールから Mercurial への履歴取り込み eol: 管理対象ファイルにおける改行形式の自動管理 extdiff: リビジョン間差分表示での外部コマンドの利用 factotum: factotum での http 認証 fetch: pull, update, merge の一括実行 (非推奨) gpg: リビジョンへの署名および検証コマンド graphlog: 端末での履歴ツリー表示のコマンド hgcia: CIA.vc 通知サービスとの統合向けのフック集 hgk: グラフィカルな UI によるリポジトリ参照 highlight: hgweb におけるシンタックスハイライト (要 Pygments) histedit: 対話的な履歴改変 inotify: Linux の inoitfy サービスによる状態報告の高速化 interhg: コミットログ中の記述の展開 keyword: 構成管理対象ファイル中のキーワード展開 largefiles: 大容量バイナリファイルの管理 mq: パッチ併用の管理 notify: 電子メールによる push 通知送信用フック集 pager: コマンド出力に対する外部ページャーの使用 patchbomb: 電子メールによる変更内容パッチ送付のコマンド progress: 処理における進捗率の表示 purge: 作業領域中の未登録ファイルを削除するコマンド rebase: 履歴上の異なる位置への一連のリビジョンの移動 record: commit や qrefresh における対話的な変更取り込みの選択 relink: 複製リポジトリ間でのハードリンクの再生成 schemes: 連携先リポジトリ群に対する略記指定の拡張 share: 複数作業領域による履歴情報領域の共有 transplant: 別ブランチからのリビジョンの移植 win32mbcs: 問題ある文字コードをパス名に使用する場合の対処 win32text: 改行形式の自動変換 zeroconf: ローカルネットワーク上でのリポジトリの検出/公開
Mercurial はファイル指定のための問い合わせ言語を提供しています。
他のファイルパターン指定と同様に、 パターン種別が定められていて、 'set:' 接頭辞で記述を始めます。 問い合わせ言語は「述語」 (predicate) (※ 訳注: いわゆる「関数」的なもの) を提供しており、 二項演算子による結合や、 括弧によるグループ化も可能です。
ファイル名やパターンが、 [.*{}[]?/\_a-zA-Z0-9\x80-\xff] 以外の文字や、 既存の述語と一致する場合、 引用符(') ないし二重引用符(") で囲ってください。 この仕様は、 glob 対象や述語の引数以外の、 全てのファイルパターンに適用されます。
エスケープ表記により、 引用符中の文字列中で、 特殊文字を使用可能です。 例: \n は改行文字扱い。 特殊文字として解釈させたくない場合は、 文字列指定の冒頭に r を付けます。 例: r'...'.
使用可能な前置単項演算子を以下に列挙します:
使用可能な二項演算子を以下に列挙します:
ファイル群 x と y の総和。 x | y 又は x + y とも表記可能。
ファイル群 x のうち、 y に属さないもの。
使用可能な述語を以下に列挙します:
サイズが指定条件に合致するファイル。条件例:
問い合わせの記述例:
作業領域中のバイナリ扱いのファイルの状態を表示:
hg status -A "set:binary()"
.hgignore 対象の中で、 既に構成管理されているファイルを登録除外:
hg forget "set:hgignore() and not ignored()"
正規表現 magic が含まれているテキストファイルの名前を表示:
hg locate "set:grep(magic) and not binary()"
UTF-8 以外の文字コードを使う C 言語ソースのファイル名を表示:
hg locate "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 文法であれば、 パターン記述を ^ で開始してください。
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 を使用してください。
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 パターンとして扱われます。
パターン合致未使用例:
path:foo/bar リポジトリルート直下の foo ディレクトリ中の bar path:path:name "path:name" という名前
ワイルドカード指定例:
glob:*.c 現ディレクトリ直下で、 名前が ".c" で終わるもの
*.c 現ディレクトリ直下で、 名前が ".c" で終わるもの
**.c 現ディレクトリないしその配下のディレクトリにおいて、
名前が ".c" で終わるもの
foo/*.c foo ディレクトリ直下で、 名前が ".c" で終わるもの
foo/**.c foo ディレクトリないしその配下のディレクトリにおいて、
名前が ".c" で終わるもの
正規表現指定例:
re:.*\.c$ 任意のディレクトリの、 名前が ".c" で終わるもの
ファイル読み込み例:
listfile:list.txt 1行 1 file パターンで list.txt から読み込み listfile0:list.txt null 文字区切りで file パターンを読み込み
hg help filesets も参照してください。
フェーズ (phase) は、 当該リビジョンの共有性を管理する仕組みです。 この仕組みによって、 予期せぬ履歴改変 (例: mq や rebase エクステンション等によるもの) を防止できます。
リポジトリ中の各リビジョンは、 以下のいずれかのフェーズに属します:
- public : 公開サーバ上で参照可能なリビジョン
- draft : public 化前段階のリビジョン
- secret : push/pull/clone の対象外となるリビジョン
フェーズには順序関係 (public < draft < secret) があり、 祖先よりも小さなフェーズを持つことはできません。 例えば public フェーズの祖先は、 全て public フェーズです。 各リビジョンのフェーズは、 基本的に public 化する方向に変更されるべきです。
多くの場合、 フェーズは透過的に機能します。 特に指定の無い場合、 新規リビジョンは draft フェーズで作成され、 他リポジトリへの反映の際に public 化されます。
予期せぬ類似リビジョン生成回避のため、 mq/rebase 等のエクステンションは、 一旦 public 化されたリビジョンを処理対処にできません。 必要であれば hg phase コマンドによる手動でのフェーズ変更も可能です。 実行例に関しては hg help -v phase を参照してください。
特に指定の無い場合、 全てのサーバで publishing が実施されます。 これは以下を意味します:
- draft フェーズのリビジョンは、 pull/clone されたクライアント側では public フェーズとみなされる - クライアントから push された draft フェーズのリビジョンは、 サーバ/クライアントの両方で public フェーズとみなされる - secret フェーズのリビジョンは push/pull/clone 対象にならない
Note
publishing サーバから draft フェーズのリビジョンを pull した場合でも、 『pull は読み出し専用』の原則に則り、 当該リビジョンのフェーズは、 サーバ側では draft のまま (public 化しない) です。
未完の作業を共有するために、 リビジョンのフェーズを draft のままで push/pull したい場合もあるでしょう。 publishing を無効化するには、 サーバ側で以下の設定を行ってください:
[phases] publish = False
設定ファイルに関する詳細は hg help config を参照してください。
Note
旧版の Mercurial で稼動しているサーバは、 publishing 実施に相当します。
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 とも表記可能。
使用可能な後置単項演算子を以下に列挙します:
使用可能な述語を以下に列挙します:
指定リビジョン郡に共通な最新の祖先。
任意の数のリビジョンを指定可能です。 リビジョン指定が無い場合、結果は空となります。 1つのリビジョンだけが指定された場合、 そのリビジョン自身が『共通の祖先』とみなされます。
探索状態に合致するリビジョン群:
指定ブックマーク対象、ないし全ブックマーク対象。
name が re: で始まる場合、 残りは正規表現として扱われます。 ブックマーク名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。
指定ブランチないしリビジョン群の属するブランチ群に、 属するリビジョン。
string が re: で始まる場合、 残りは正規表現として扱われます。 ブランチ名そのものが re: で始まる場合は、 名前を literal: 付きで指定してください。
public フェーズなリビジョンの後継で、 且つ改変可能なリビジョン。
非 public で、且つ廃止設定されていないリビジョンのみが bumped とみなされます。
バンドルファイル中のリビジョン群。
バンドルファイルは -R オプションで指定される必要があります。
extra メタデータに、 特定の名前の値を持つリビジョン群。 値指定により、 合致対象が更に絞り込まれます。
value が re: で始まる場合、 残りは正規表現として扱われます。 値そのものが re: で始まる場合は、 値を literal: 付きで指定してください。
パターンに合致するファイルに変更を行ったリビジョン群。
多少厳密さに欠けても、 性能が必要な場合は、 代わりに filelog() の使用を検討してみてください。
パターンに合致するファイルの変更に関連付けられたリビジョン群。
指定ファイルの関連リビジョンであっても、 filelog() によって、 必ずしも列挙されるとは限らないのは、 性能上の理由からです。 この挙動の詳細に関しては hg help log を参照してください。 低速でも、 正確な結果が必要な場合は file() を使用してください。
指定リビジョン群 (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 フィールドが対象となります。 同時に複数フィールドの合致判定が可能です。
指定リビジョン群に存在しないものが含まれている場合は空集合、 それ以外なら指定リビジョン群そのもの。
対象リビジョン群が、 存在しないリビジョンを含む場合、 通常であれば、 処理が中断されますが、 present() によって処理を継続することができます。
key での指定方法で整列した集合。 基本の整列方式は昇順で、 降順整列の場合は -key 形式で記述します。
指定可能な整列方式は:
文字列をユーザ名に持つリビジョン群。 合致判定は文字大小を無視。
string が re: で始まる場合、 残りは正規表現として扱われます。 ユーザ名そのものが re: で始まる場合は、 ユーザ名を literal: 付きで指定してください。
既存の述語や別名 (alias) を組み合わせることで、 新しい述語を定義可能です。 別名は、 Mercurial 設定ファイルの revsetalias セクションにおける、 以下のような記述で定義します:
<別名> = <定義>
別名記述部分において $1 や $2 といった形式の引数を記述することで、 別名定義部分でその引数を使用できます。
記述例
[revsetalias] h = heads() d($1) = sort($1, date) rs($1, $2) = reverse(sort($1, $2))
上記の記述で、 3つの別名 h、 d および rs が定義されます。 rs(0:tip, author) は reverse(sort(0:tip, author)) と同一です。
hg log のコマンド行オプション指定に対する等価な記述:
-f -> ::. -d x -> date(x) -k x -> keyword(x) -m -> merge() -u x -> user(x) -b x -> branch(x) -P x -> !::x -l x -> limit(expr, x)
問い合わせの記述例:
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())"
サブリポジトリ (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 指定が無くても、 サブリポジトリ中のファイルへのパスが、 直接指定された場合は、 対象ファイルを構成管理対象として登録します。 なお、 サブリポジトリが Git ないし Subversion 形式の場合、 現状では、 何の表示も無しに、 登録要求を無視します。 |
|---|---|
| archive: | -S/--subrepos 指定が無い限り、 アーカイブの作成は、 再帰的には実施されません。 |
| commit: | コミットの実施により、 親リポジトリと配下のサブリポジトリ間の、 整合性の取れた対応関係が、 (親リポジトリ側に) 記録されます。 未コミット変更があるサブリポジトリは、 コミット動作を中断させます。 -S/--subrepos を指定するか、 設定ファイル記述 (hg help config 参照) での "ui.commitsubrepos=True" 設定により、 コミット実施の際に、 サブリポジトリ中の未コミット変更が、 再帰的にコミットされます。 全てのサブリポジトリから、 未コミット変更が無くなった後で、 各サブリポジトリの状態記録が、 親リポジトリにおいてコミットされます。 |
| diff: | -S/--subrepos 指定が無い限り、 差分表示は、 再帰的には実施されません。 サブリポジトリのファイルの差分表示は、 通常の差分表示形式と同じです。 なお、 サブリポジトリが Git ないし Subversion 形式の場合、 現状では、 何の表示も無しに、 差分表示要求を無視します。 |
| forget: | 現状では、 サブリポジトリ中のパス (ファイルないしディレクトリ) が指定された場合に限り、 サブリポジトリ中のファイルに対して、 登録除外操作が実施されます。なお、 サブリポジトリが Git ないし Subversion 形式の場合、 現状では、 何の表示も無しに、 登録除外要求を無視します。 |
| incoming: | -S/--subrepos 指定が無い限り、 取り込みリビジョンの確認は、 再帰的には実施されません。 なお、 サブリポジトリが Git ないし Subversion 形式の場合、 現状では、 何の表示も無しに、 取り込みリビジョンの確認要求を無視します。 |
| outgoing: | -S/--subrepos 指定が無い限り、 反映予定リビジョンの確認は、 再帰的には実施されません。 なお、 サブリポジトリが Git ないし Subversion 形式の場合、 現状では、 何の表示も無しに、 反映予定リビジョンの確認要求を無視します。 |
| pull: | リビジョン取り込みが再帰的に実施されないのは、 hg update に先立つ取り込みリビジョンの取捨選択が、 自明ではないためです。 参照中の全サブリポジトリにおいて、 全ての変更を取り込むのは、 非常に高コストですし、 Subversion 形式の場合は実行自体が不可能です。 |
| push: | 親リポジトリでの履歴反映の際には、 まずはサブリポジトリにおいて、 履歴反映が自動的に実施されます。 これは、 親リポジトリが参照する、 サブリポジトリのリビジョンを、 広く参照可能とするためです。 なお、 Subversion 形式の場合は、 履歴反映操作は何も行いません。 |
| status: | -S/--subrepos 指定が無い限り、 状態表示は、 再帰的には実施されません。 サブリポジトリのファイルの状態表示は、 通常の状態表示と同じ形式です。 なお、 サブリポジトリが Subversion 形式の場合、 現状では、 何の表示も無しに、 状態表示要求を無視します。 |
| update: | 作業領域更新により、 サブリポジトリは、 指定リビジョンにおける、 コミット時点の状態が復元されます。 サブリポジトリにおいて、 復元対象リビジョンが利用不可能な場合、 作業領域更新に先立って、 対象リビジョンの取り込みが実施されます。 (※ 訳注: Subversion 形式は、 履歴情報がサーバ側にあるため、 常に対象リビジョンの取り込みが必要) この挙動は、 サブリポジトリ利用によって、 作業領域更新の際に、 ネットワーク接続が必要となる可能性があることを意味します。 |
親リポジトリの利用期間中に、 サブリポジトリの連携先が変更された場合、 変更前に親リポジトリで記録されたリビジョンが持つ連携先情報は、 無効となってしまいます。 親リポジトリの hgrc ファイルないし Mercurial の設定ファイルにおいて、 連携先情報の書き換えルールを定義することで、 この問題を解消可能です。 詳細に関しては hgrc(5) の [subpaths] セクションを参照してください。 (※ 訳注: hg help config でも参照可能)
Mercurial では、 テンプレート機能によってコマンドの出力をカスタマイズ することができます。 コマンドラインからの指定では、 --template による テンプレート指定と、 --style によるスタイル指定の両方が使用できます。
「log 的」な出力を行う一連のコマンド出力をカスタマイズ可能です: log, outgoing, incoming, tip, parents, heads, glog
Mercurial には(明示的な指定が無い場合に使用される)default、 compact changelog および xml の4つのスタイル設定が同梱されています。 利用方法は:
$ hg log -r1 --style changelog
テンプレートとは、 変数展開マークアップ機能を備えたテキストです:
$ hg log -r1 --template "{node}\n"
b56ce7b07c52de7d5fd79fb89701ea538af65746
波括弧で囲まれた部分は「キーワード」と呼ばれます。 キーワード利用の 可否は、 テンプレートの利用される状況に依存します。 以下のキーワードは log 的なコマンドでのテンプレート利用の際には常に使用可能です:
| author: | 文字列。 リビジョンの作者名(記録情報そのまま)。 |
|---|---|
| bisect: | 文字列。 当該リビジョンの二分探索状態。 |
| bookmarks: | 文字列列挙。 当該リビジョンに付与されたブックマークの一覧。 |
| branch: | 文字列。 リビジョンの属するブランチ名。 |
| branches: | 文字列列挙。 リビジョンの属するブランチ名。 所属ブランチが default の場合は空。 |
| children: | 文字列列挙。 リビジョンの子供。 |
| date: | 日時情報。 リビジョンが記録された日時。 |
| desc: | 文字列。 リビジョンのコミットログ。 |
| diffstat: | 文字列。 以下の形式での変更概要。 "変更対象ファイル: +追加行数/-削除行数" |
| file_adds: | 文字列列挙。 当該リビジョンでの追加ファイル一覧。 |
| file_copies: | 文字列列挙。 当該リビジョンでの複製元ファイル一覧。 |
| file_copies_switch: | |
| 文字列列挙。 "file_copies" と同義だが、 --copied 指定のある時のみ表示。 | |
| file_dels: | 文字列列挙。 当該リビジョンでの登録除外ファイル一覧。 |
| file_mods: | 文字列列挙。 当該リビジョンでの変更ファイル一覧。 |
| files: | 文字列列挙。 当該リビジョンでの、 変更/追加登録ないし 登録除外ファイルの一覧。 |
| latesttag: | 文字列。 当該リビジョンの祖先に対して最も最近に付与されたタグ |
| latesttagdistance: | |
| 整数。 最新タグへの最長パス | |
| node: | 文字列。 リビジョン識別用の 40 桁 16 進数ハッシュ値。 |
| p1node: | 文字列。 第1親リビジョンの 40 桁ハッシュ値の文字列。 親を持たないリビジョンの場合は、 全桁が 0 のハッシュ値文字列。 |
| p1rev: | 整数。 第1親リビジョンの、 当該リポジトリにおけるリビジョン番号。 親を持たないリビジョンの場合は -1。 |
| p2node: | 文字列。 第1親リビジョンの 40 桁ハッシュ値の文字列。 第2親を持たないリビジョンの場合は、 全桁が 0 のハッシュ値文字列。 |
| p2rev: | 整数。 第2親リビジョンの、 当該リポジトリにおけるリビジョン番号。 第2親を持たないリビジョンの場合は -1。 |
| parents: | 文字列列挙。 当該リビジョンの親リビジョンの "rev:node" 形式。 親が単一で、 且つリビジョン番号が1つ前の場合は、 何も表示されません。 |
| phase: | 文字列。 当該リビジョンのフェーズ名。 |
| phaseidx: | 数値。 当該リビジョンのフェーズ値。 |
| rev: | 整数。 各リポジトリ固有のリビジョン番号。 |
| tags: | 文字列列挙。 当該リビジョンに付与されたタグの一覧。 |
"date" キーワードの出力は可読形式ではありません。 出力に日時情報を 含めたい場合、 可読化するための「フィルター」を使用します。 「フィルター」とは、 入力値に基づいて文字列を生成する機能です。 一覧系の入力に対して文字列名のフィルターを適用する場合、 最初に stringify フィルターを適用してください。 複数のフィルターを連ねることで、 様々な出力を得ることができます:
$ hg tip --template "{date|isodate}\n"
2008-08-21 18:22 +0000
フィルター一覧(入力と、 それに対する出力):
| addbreaks: | 文字列。 最終行を除く各行の行末に XHTML の "<br />" タグを追加します。 |
|---|---|
| age: | 日時情報。 与えられた日時と、 現在日時との差分を表す 可読形式の文字列を生成します。 |
| basename: | 文字列。 与えられた文字列をパスとみなし、 パス構成要素の、 末尾要素を取り出します (末尾パス区切りは無視されます)。 例) "foo/bar/baz" は "baz"、 "foo/bar//" は "bar" |
| date: | 日時情報。 タイムゾーン込みの Unix date コマンド形式にします。 例) "Mon Sep 04 15:13:13 2006 0700" |
| domain: | 文字列。 メールアドレスと思しき最初の文字列部分から ドメイン部分だけを取り出します。 例) User <user@example.com> は example.com |
| email: | 文字列。 メールアドレスと思しき最初の部分を取り出します。 例) User <user@example.com> は user@example.com |
| emailuser: | 文字列。 メールアドレスのユーザ名部分を取り出します。 |
| escape: | 文字列。 XML/XHTML の特殊文字である "&"、 "<" および ">" を XML のエンティティ形式に変換し、 NUL 文字を除外します。 |
| fill68: | 文字列。 68 桁に収まるように文字列を折り返します。 |
| fill76: | 文字列。 76 桁に収まるように文字列を折り返します。 |
| firstline: | 文字列。 最初の行のみを取り出します。 |
| hex: | 文字列。 Mercurial の node 情報を 40 桁 16 進文字列に変換します。 |
| hgdate: | 日時情報。 Unix タイムスタンプとタイムゾーンオフセットによる 数値対形式で可読化します。 例) "1157407993 25200" |
| isodate: | 日時情報。 ISO 8601 形式で可読化します: 例) "2009-08-18 13:00 +0200" |
| isodatesec: | 日時情報。 秒情報付きの ISO 8601 形式で可読化します: 例) "2009-08-18 13:00:13 +0200" ※ 後述する rfc3339date フィルタの説明も参照してください。 |
| localdate: | 日時情報。 日時情報をローカルタイムゾーンに変換します。 |
| nonempty: | 文字列。 与えられた文字列が空の場合 '(none)'となります。 |
| obfuscate: | 文字列。 全ての文字を XML エンティティ形式に変換します。 |
| person: | 文字列。 メールアドレスを RFC 5322 形式で解析して、 名前部分だけを取り出します。 |
| rfc3339date: | 日付情報。 RFC 3339 で定められた日付形式で可読化します。 例) "2009-08-18T13:00:13+02:00". |
| rfc822date: | 日時情報。 メールのヘッダと同形式で可読化します: 例) "Tue, 18 Aug 2009 13:00:13 +0200". |
| short: | リビジョンハッシュ 値。 12 桁程度の短縮形式にします。 |
| shortbisect: | 文字列。 文字列 を二分探索 (bisect) 状態とみなし、 状態に見合った1文字 (G: good, B: bad, S: skipped, U: untested, I: ignored) を返します。 文字列 が二分探索状態として不適切な場合、 空白文字を返します。 |
| shortdate: | 日時情報。 "2006-09-18" 形式で可読化します。 |
| stringify: | 任意のデータ。 値を文字列化して連結します |
| strip: | 文字列。 先頭/末尾の空白文字を取り除きます。 |
| stripdir: | 文字列。 与えられた文字列をパスとみなし、 ディレクトリ 階層があればそれを取り除きます。 例) "foo" および "foo/bar" は "foo" |
| tabindent: | 文字列。 最初の行以外をタブ文字で字下げします。 |
| urlescape: | 文字列。 全ての「特殊」文字を変換します。 例えば "foo bar" は "foo%20bar" となります。 |
| user: | 文字列。 ユーザ名ないしメールアドレスから、 ユーザ名の短縮形式部分を取り出します。 |
フィルタは関数呼び出しに過ぎません。 例えば、 expr|filter は filter(expr) と等価です。
フィルタの他に、 以下の様な基本的な組み込み関数があります:
また、 列挙形式を返す expr に対しては、 以下の様な記述が可能です:
コマンドラインでのテンプレート指定例:
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 "{date(date, '%Y')}\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"
有効な 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
log repository events to a blackbox for debugging
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. Examples:
[blackbox] track = * [blackbox] track = command, commandfinish, commandexception, exthook, pythonhook [blackbox] track = incoming [blackbox] # limit the size of a log file maxsize = 1.5 MB # rotate up to N log files when the current one gets too big 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
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 (※ ここには各リビジョンのコミットログが展開されます)
子リビジョン表示のコマンド (非推奨)
本エクステンションは非推奨です。hg log -r "children(REV)" を使用してください。
hg children [-r REV] [FILE]
作業領域の子リビジョンを表示します。 -r/--rev によるリビジョン指定が ある場合は、 指定リビジョンの子リビジョンを表示します。 引数として ファイルが指定された場合、 ファイルが(作業領域のリビジョンないし --rev で指定されたリビジョンの後で)最後に変更されたリビジョンを表示 します。
オプション:
| -r, --rev | 指定リビジョンの子リビジョンの表示 |
| --style | 当該スタイルで表示をカスタマイズ |
| --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, --template | リビジョン表示をグループ化するためのテンプレート (既定値: {author|email}) |
| -f, --dateformat | |
| 日時グループ化のための strftime 互換形式フォーマット | |
| -c, --changesets | |
| リビジョン数で統計 | |
| -s, --sort | キーによる整列(無指定時: 統計量で整列) |
| --diffstat | 追加/削除行表示の分離 |
| --aliases | ユーザ名変換用ファイル |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
コマンド出力のカラー化
本エクステンションは、 status および resolve コマンドの場合は、 各ファイル状態に応じて、 qseries コマンドの場合は、 パッチの適用状況 (適用済み、 未適用、 不在) に応じて、 diff 関連コマンドの場合は、 追加、 削除、 差分ヘッダおよび末尾空白文字の各要素に対応して、 出力に対する色付けを行います。
色付け以外の効果として、 文字の強調や、 下線付けも可能です。 色付けや効果を行うための、 端末情報の取得には、 デフォルトでは terminfo データベースが使用されます。 terminfo が使用できない場合は、 ECMA-48 SGR 制御機能 (「ANSI エスケープコード」の別名) を使用します。
デフォルトの挙動は、 設定ファイルでの記述により上書きされます:
[color] status.modified = blue bold underline red_background status.added = green bold status.removed = red bold blue_background status.deleted = cyan bold underline status.unknown = magenta bold underline status.ignored = black bold # 'none' 指定により効果が全て無効化されます status.clean = none status.copied = none qseries.applied = blue bold underline qseries.unapplied = black bold qseries.missing = red bold diff.diffline = bold diff.extended = cyan bold diff.file_a = red bold diff.file_b = green bold diff.hunk = magenta diff.deleted = red diff.inserted = green diff.changed = white diff.trailingwhitespace = bold red_background resolve.unresolved = red bold resolve.resolved = green bold bookmarks.current = green branches.active = none branches.closed = black bold branches.current = green branches.inactive = none tags.normal = green tags.local = black bold
terminfo 使用時に有効な効果は、 'blink' 'bold' 'dim' 'inverse' 'invisible' 'italic' 'standout' および 'underline' です。 ECMA-48 使用時に有効な効果は、 'bold' 'inverse' 'italic' および 'underline' です。 各指定が実際の表示に与える効果は、 端末の実装に依存します。 当該端末で無効な効果に関しては、 警告等を発せずに無視されます。
pager エクステンションでの less -R 使用と、 terminfo 使用の併用は、 稼動環境によっては、 色付けが正しく機能しない可能性があります。 less -R が ECMA-48 の色指定しか解釈しないことから、 less が解釈しない色指定制御が terminfo 使用時に除外される場合があるためです。 このような場合、 端末指定に ansi (ないし auto) を用いるか、 less -r (色指定以外の全ての端末制御が、 透過的に伝播されます) を使用することで、 状況が改善される可能性があります。
terminfo 使用の場合、 基本色定義が8色のみなので、 本エクステンションでは、 利用端末種別に応じて利用可能になる (であろう) 色スロットに対して、 色名称を定義することが可能です。例えば:
color.brightblue = 12 color.pink = 207 color.orange = 202
上記設定により、 'brightblue' という名前が、 色スロット 12 (16色端末で利用可能。 16色端末では、 明度の高い色が、 後半8色で定義) として、 また 'pink' および 'orange' という名前が、 256色 xterm の、 色立体中に定義されます。 色名に '_background' を付加することで、 背景色を指定可能な点もふくめて、 新規定義された色名称は、 事前定義された8色と同様に使えます。
本エクステンションは、 端末検出時のデフォルト端末設定として ANSI (Windows 環境の場合は win32) を使用します。 この自動判定機能は、 以下のような記述 (この例では、 terminfo 使用の強制) で上書きできます:
[color] mode = terminfo
'ansi' 'win32' 'terminfo' ないし 'auto' 以外の値が指定された場合、 色付けは無効化されます。
他の構成管理ツールから 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 指定に合致しない限り、 変換対象から除外されます。 ファイルやディレクトリが exclude 指定に合致した場合、 それらは変換対象から除外されます。 変換対象ファイルが rename 指定に合致する場合、 ファイル名や、 ディレクトリ名が改名 (= 移動) されます。 サブディレクトリ配下から、 リポジトリルート直下に改名する場合、 改名先に . を使います。
splicemap ファイルは、 親リビジョン指定による履歴の合成 (synthesize) を指示します。 例えば、 Subversion におけるマージ実施リビジョンに、 2つの親を持たせるとか、 個別のリビジョン群を、 ひとまとまりにする、 といった場合に有用です。 splicemap ファイルの各行は、 キー、 空白文字、 1つないし2つのカンマ区切りの値で構成されます:
キー 親1, 親2
キーには、 改変対象 (親リビジョンが改変されます) リビジョンの、 変換元における ID を指定します (.hg/shamap におけるキーと同一形式)。 値指定には、 変換後の当該リビジョンの、 親となるリビジョンの ID (変換元/変換先の、 いずれかにおける形式) を指定します。 例えば、 "release-1.0" ブランチから "trunk" へのマージ実施リビジョンが、 合成対象となる場合は、 第1親には "trunk" 上の、 第2親には "release-1.0" 上のリビジョンを指定します。
branchmap ファイルは、 変換元から (名前付き) ブランチを取り込む際に、 ブランチの改名を指示します。 splicemap ファイルと併用した場合、 最悪の管理状況にあるリポジトリから、 適切な構成の Mercurial リポジトリへの変換も可能とする、 強力な機能が発揮されます。 branchmap ファイルの各行は、 以下の形式で記述されます:
変換元ブランチ名 変換先ブランチ名
"変換元ブランチ名" が変換元リポジトリにおけるブランチ名で、 "変換先ブランチ名" が変換先リポジトリにおけるブランチ名です。 ブランチ名には、 空白文字を使用できません。 変換の使用例としては、 変換元の "default" ブランチから、 特定のリビジョンを、 名前付きブランチに移動するようなケースがあります。
Mercurial 形式からの変換の場合、 コマンド行での --config 使用により、 以下のオプションを指定できます:
| convert.hg.ignoreerrors: | |
|---|---|
| 読み込みにおける整合性エラーを無視します。 Mercurial 形式から Mercurial 形式への変換の際に使用することで、 revlog に問題のあるリポジトリを復旧可能です。 デフォルト値は False | |
| convert.hg.saverev: | |
| 変換元におけるリビジョン ID の、 埋め込み要否を示す真偽値 (変換先でのリビジョン ID は、 確実に変更されます) (※ 訳注: ハッシュ値計算元となるデータが、 ID 埋め込みで変化するため)。 デフォルト値は False。 | |
| convert.hg.startrev: | |
| 指定リビジョンとその子孫を変換します。 Mercurial のリビジョン ID が指定可能です。 デフォルト値は 0 | |
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。 | |
Perforce (P4) 形式での取り込み元指定には、 p4 depot へのパスか、 クライアント仕様を指定します。 変換元の全てのファイルが、 平坦な Mercurial リポジトリに変換されます: ラベルやブランチ、 統合 (※ 訳注: "integration" は Mercurial で言うマージのこと?) は無視されます。 depot へのパス指定の場合、 変換先指定が無い場合、 変換先の名前が ...-hg になる点に注意してください。
初期 Perforce リビジョン指定により、 変換対象となるリビジョン総量を、 制限することが可能です:
| convert.p4.startrev: | |
|---|---|
| 初期 Perforce リビジョン (Perforce チェンジリスト番号)。. | |
以下のオプションを指定できます:
| convert.hg.clonebranches: | |
|---|---|
| 変換元ブランチの別複製への振り分けの要否。 デフォルト値は False。 | |
| convert.hg.tagsbranch: | |
| タグ付けを実施するリビジョンのブランチ名。 デフォルト値は default 。 | |
| convert.hg.usebranchnames: | |
| ブランチ名維持の要否。 デフォルト値は True。 | |
オプション:
| --authors | ユーザ名変換ファイルの指定 (非推奨: --authormap を使用してください) |
| -s, --source-type | |
| 変換元リポジトリ種別 | |
| -d, --dest-type | |
| 変換先のリポジトリ種別 | |
| -r, --rev | 指定リビジョンまでの取り込み |
| -A, --authormap | |
| 変換時のユーザ名変換用ファイル | |
| --filemap | 変換時のファイル名変換用ファイル |
| --splicemap | 継ぎ合わせによる履歴の合成 |
| --branchmap | 変換時のブランチ名変換用ファイル |
| --branchsort | ブランチによるリビジョンの並び替え |
| --datesort | 日付によるリビジョンの並び替え |
| --sourcesort | 元リポジトリでのリビジョン順を尊重 |
| --closesort | 閉鎖実施リビジョン群の並び替え |
管理対象ファイルにおける改行形式の自動管理
本エクステンションは、 リポジトリおよび作業領域中のファイルにおける、 改行形式 (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
# kdiff3 を起動する vdiff 設定の追加
vdiff = kdiff3
# meld を起動する設定の追加 (同名の場合は設定右辺を省略可能)
meld =
# DirDiff (http://www.vim.org/scripts/script.php?script_id=102 参照)
# プラグイン併用の gvimdiff を 起動する vimdiff 設定の追加。
# 非英語圏の利用者は、 .vimrc 設定ファイルにおける
# "let g:DirDiffDynamicDiffText = 1" 指定が必要。
vimdiff = gvim -f "+next" \
"+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))"
外部コマンドへの引数には、 実行時に置換される変数を指定できます:
$parent1, $plabel1 - 第1親リビジョンのファイル名と説明文字列 $child, $clabel - 子リビジョンのファイル名と説明文字列 $parent2, $plabel2 - 第2親リビジョンのファイル名と説明文字列 $root - リポジトリのルート $parent1 の別名として $parent も使用可能
差分表示の外部コマンドへの引数設定が [extdiff] セクションに無い場合、 本エクステンションは [diff-tools] および [merge-tools] の設定を参照します。
[extdiff] kdiff3 = [diff-tools] kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
通常の hg diff 実行と同様に、 -I/-X、 およびファイル名、 ディレクトリ名の指定が可能です。 この場合、 本エクステンションは、 差分表示に必要な分だけ、 スナップショットを作成しますので、 外部の差分表示コマンドの実行は、 ある程度高速化されます (少なくとも、 リポジトリ全体に対する差分表示よりは、 確実に早い筈です)。
hg extdiff [OPT]... [FILE]...
指定ファイルのリビジョン間差分を、 外部コマンドを使って表示します。 特に指定が無い場合、 外部プログラムには、"-Npru" オプション付きの "diff" コマンドが使用されます。
外部プログラムを変更する場合は、 -p/--program で指定します。 外部プログラム起動時には、 比較対象のディレクトリが2つ指定されます。 付加的なオプションが必要な場合は、 -o/--option で指定します。 外部プログラムの起動引数としては、 オプション指定の方が、 比較対象ディレクトリよりも先に指定されます。
リビジョンが2つ指定された場合、 指定リビジョン間の差分が表示されます。 リビジョンが1つ指定された場合、 作業領域との間の差分が表示されます。 リビジョンが指定されない場合、 作業領域と親との差分が表示されます。
オプション:
| -p, --program | 差分表示プログラム |
| -o, --option | 差分表示プログラムへのオプション指定 |
| -r, --rev | リビジョン |
| -c, --change | 当該リビジョンにおける変更内容の表示 |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
factotum での 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 設定の無視) |
リビジョンへの署名および検証コマンド
hg sigcheck REV
特定リビジョンに関する全署名の検証
hg sign [OPTION]... [REV]...
リビジョンが指定されない場合、 作業領域の親リビジョンが、 親リビジョンが null の場合は tip が対象になります。
-d/--date での日時表記は hg help dates を参照してください。
オプション:
| -l, --local | 自リポジトリローカルな署名 |
| -f, --force | 署名ファイルが変更されていても署名を実施 |
| --no-commit | 署名後の署名ファイルのコミットを抑止 |
| -k, --key | 署名に使用する鍵ID |
| -m, --message | コミットログ |
| -d, --date | 指定日時をコミット日時として記録 |
| -u, --user | 指定ユーザをコミットユーザとして記録 |
hg sigs
署名済みリビジョンの一覧表示
端末での履歴ツリー表示のコマンド
本エクステンションは、 incoming, outgoing および log コマンドに、 新規オプション --graph を付与します。 --graph 指定により、 ASCII 文字による履歴ツリーが表示されます。
hg glog [OPTION]... [FILE]
ASCII 文字による履歴ツリー併用の変更履歴を表示します。
@ 文字で表示されるリビジョンは、 作業領域の親リビジョンです。
オプション:
| -f, --follow | 複製元や改名元の履歴も遡る |
| --follow-first | マージの際には第1親のみを遡る (DEPRECATED) |
| -d, --date | 指定日時に合致するリビジョンを表示 |
| -C, --copies | 複製されたファイルを表示 |
| -k, --keyword | 指定キーワードによる検索(大文字小文字は無視) |
| -r, --rev | 指定された単一、 ないしリビジョン区間の表示 |
| --removed | ファイルが登録除外されたリビジョンを含める |
| -m, --only-merges | |
| マージ実施リビジョンのみを表示 (DEPRECATED) | |
| -u, --user | 当該ユーザによるリビジョンを表示 |
| --only-branch | 指定の名前付きブランチに属するリビジョンを表示 (非推奨) |
| -b, --branch | 指定の名前付きブランチに属するリビジョンを表示 |
| -P, --prune | 当該リビジョンとその祖先の表示を抑止 |
| -p, --patch | パッチ形式での表示 |
| -g, --git | git 拡張差分形式の使用 |
| -l, --limit | 最大表示リビジョン数 |
| -M, --no-merges | |
| マージ実施リビジョンの表示抑止 | |
| --stat | diffstat 形式の変更概要を生成 |
| -G, --graph | 履歴ツリーの表示 |
| --style | 当該スタイルで表示をカスタマイズ |
| --template | 当該テンプレートで表示をカスタマイズ |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 |
CIA.vc 通知サービスとの統合向けのフック集
changegroup ないし incoming フックとしての実行を想定しています。 以下のような設定を、 Mercurial 設定ファイルに記述してください:
[cia]
# CIA の登録ユーザ名
user = foo
# CIA におけるプロジェクト名
project = foo
# モジュール (副プロジェクト) (省略可能)
#module = foo
# ログメッセージへの diffstat の追加 (省略可能)
#diffstat = False
# ログメッセージ用テンプレート指定 (省略可能)
#template = {desc}\n{baseurl}{webroot}/rev/{node}-- {diffstat}
# スタイル指定 (省略可能)
#style = foo
# CIA 通知サービスの URL (省略可能)
# 電子メールで通知する場合、 以下のような mailto: URL を使用可能
# mailto:cia@cia.vc
# 電子メール使用の際には email.from 設定が必須。
#url = http://cia.vc/
# メッセージを送信せずに表示 (省略可能)
#test = False
# URL パスから取り除くスラッシュ数
#strip = 0
[hooks]
# 以下のいずれか:
changegroup.cia = python:hgcia.hook
#incoming.cia = python:hgcia.hook
[web]
# ハイパーリンクが必要な場合 (省略可能)
baseurl = http://server/path/to/repo
グラフィカルな 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' とみなされます。
対話的な履歴改変
本エクステンションの有効化により 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 = リビジョンを採用: 但し直前のリビジョンに併合 # (このリビジョンが N 番目なら、N - 1 番目に併合) # 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 = リビジョンを採用: 但し直前のリビジョンに併合 # (このリビジョンが N 番目なら、N - 1 番目に併合) # 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 を指定することで、 元リポジトリとの関連ありとみなすことができます。
hg histedit [PARENT]
対話的な履歴の改変
オプション:
| --commands | 履歴改変手順を指定ファイルから読み込み |
| -c, --continue | 中断された履歴改変を再開 |
| -k, --keep | 改変元の履歴を改変完了後も保持 |
| --abort | 進行中の履歴改変を中止 |
| -o, --outgoing | 連携先リポジトリに、 含まれないリビジョンを、 改変対象化 |
| -f, --force | 連携先が無関係なリポジトリでも、 比較を実施 |
| -r, --rev | 改変対象の最初のリビジョン |
Linux の inoitfy サービスによる状態報告の高速化
hg inserve [OPTION]...
リポジトリに対する inotify サーバの起動
オプション:
| -d, --daemon | バックグラウンドでのサーバ実行 |
| --daemon-pipefds | |
| (バックグラウンド実行時での内部用途向け) | |
| -t, --idle-timeout | |
| 終了前のアイドリング待機時間(単位:分) | |
| --pid-file | プロセスIDの書き出し先ファイル |
None
構成管理対象ファイル中のキーワード展開
本エクステンションは、 構成管理対象ファイル中の 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}" は、 コミットログの最初の一行を埋め込みます。
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 を指定する必要があります。
hg lfconvert SOURCE DEST [FILE ...]
リポジトリ SOURCE を変換し、 新規リポジトリ DEST を生成します。 SOURCE に対する DEST の違いは、 指定パターンへの名前の合致、 ないし、 指定閾値以上のサイズのファイルが、 大容量ファイル扱いになっている、 という点です。 大容量ファイル扱いの要否判定に使用するサイズ値には、 各ファイルが最初に登録された時点のサイズが使用されます。 サイズ閾値の指定は、 --size か、 largefiles.size 設定によって行います。
このコマンドの実施後は、 変換後リポジトリの連携先リポジトリでも、 largefiles エクステンションが有効になっている事を確認してください。
largefiles エクステンションを使用しないリポジトリへの変換には、 --to-normal を指定します。 変換後リポジトリは、 largefiles エクステンション無しでも使用できます。
オプション:
| -s, --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 設定の無視) |
パッチ併用の管理
本エクステンションは、 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 のような、 併用できないオプションが指定された場合、 この設定は無視されます。
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 | 作業領域の親リビジョンの改変 |
| -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 | 差分表示の際に日付情報の表示を抑止 |
| -p, --show-function | |
| 差分表示の際に関数名情報を表示 | |
| --reverse | 変更を取り消すための差分を生成 |
| -w, --ignore-all-space | |
| 差分判定の際に空白文字を無視 | |
| -b, --ignore-space-change | |
| 差分判定の際に空白文字の数を無視 | |
| -B, --ignore-blank-lines | |
| 差分判定の際に空白行を無視 | |
| -U, --unified | 差分コンテキストの行数 |
| --stat | diffstat 形式の変更概要を生成 |
| -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 | コミットログをファイルから読み込み |
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 tip -n patch' は、 tip を MQ 管理下に置きます)。 -g/--git 指定は、 --rev 指定による取り込みの際に git 差分形式を使用します。 改名/複製情報や、 権限設定の情報保持にとっての git 差分形式の有用性に関しては、 '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 | パッチヘッダの最初の行を表示 |
hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...
hg strip は指定のリビジョンおよび、 指定リビジョンの子孫を 取り除きます。 作業領域の変更が未コミットの場合、 --force が指定されない限りは処理を中断します。 --force が指定された場合、 変更内容は破棄されます。
作業領域の親リビジョンが除外対象になった場合、 除外操作の完了後に、 除外された親リビジョンの祖先の中で、 最も近い有効なリビジョンで、 作業領域を更新します。
除外されたリビジョンは、 bundle 形式で .hg/strip-backup 配下に 退避されます(bundle 形式に関しては hg help bundle および hg help unbundle 参照)。 除外の際に作成された BUNDLE ファイルで hg unbundle .hg/strip-backup/BUNDLE を実施することで 除外されたリビジョンを復旧させることができます。 通常、 復旧の際には リビジョン番号が変更されますので注意してください。
除外処理完了時点で bundle ファイルを破棄する場合は --no-backup を指定してください。
本コマンドでの操作は、 履歴の書き換えではないので、 対象リビジョンが public フェーズでも、 実行可能です。 但し、 除外対象リビジョンが、 他リポジトリに反映済みである場合、 そのリビジョンは pull 操作により、 再び手元のリポジトリに出現することでしょう。
成功時のコマンド終了値は 0 です。
オプション:
| -r, --rev | 指定リビジョンの削除 (本オプション無しでもリビジョン指定可能) |
| -f, --force | リビジョンを強制的に削除し、 未コミット変更内容を破棄(保存無し) |
| -b, --backup | 指定リビジョンよりリビジョン番号が大きく子孫以外のものを bundle 化(非推奨) |
| --no-backup | バックアップ作成の抑止 |
| --nobackup | バックアップ作成の抑止(非推奨) |
| -n | ※ このオプションは無視されます (非推奨) |
| -k, --keep | 処理中の作業領域変更を抑止 |
| -B, --bookmark | 指定ブックマークから、 到達可能なリビジョンのみを除外 |
電子メールによる 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 設定は無視されます。
hg version や hg help のようなグローバルコマンドで、 ページャー使用を抑止したい場合、 個人の設定ファイル中で、 その旨を明記してください。
ページャーの使用は、 --pager=... でも制御できます。 真偽値の yes no on off 以外に、 無指定時挙動に相当する auto を指定できます。
電子メールによる変更内容パッチ送付のコマンド
一連のメールは、 "[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 [OPTION]... [DEST]..."
特に指定の無い場合、 hg export の生成する差分形式でリビジョン毎に メールが送信されます。 一連のメールは、 "[PATCH 0 of N]" を Subject ヘッダに持つ、 説明メールから始まります。
個々のメールの Subject ヘッダは、 "[PATCH M of N]" で始まり、 対応するリビジョンのコミットログの1行目が記載されます。 メール本文は、 2ないし3の部位から構成されます。 最初の部位にはコミットログの続きが配置されます。
-d/--diffstat が指定され、 diffstat コマンドが利用可能な場合、 パッチに対する diffstat の実行結果が配置されます。
最後の部位には hg export が生成する差分が配置されます。
-d/--diffstat ないし --confirm が指定された場合、 メッセージの送信に先立って、 全メッセージのまとめを伴って、 確認の問い合わせがあります。
特に指定の無い場合、 メール本文中の通常テキストとして、 パッチが埋め込まれます。 -a/--attach が指定された場合は、 パッチは添付ファイル化されます。 -i/--inline が指定された場合は、 インライン添付ファイルとなります。 -a/--attach ないし -i/--inline と --body を組み合わせることで、 パッチの格納先を、 メール本文や、 インラインないし通常の添付ファイルから、 選択することができます。
-o/--outgoing 指定がある場合、 連携対象リポジトリに存在しない (あるいは、 指定リビジョン以前の)リビジョンのためのパッチのみが メールで送信されます。
-b/--bundle 指定がある場合、 対象リビジョンの選択は --outgoing 指定 時と同様に行われますが、 Mercurial のバンドル形式ファイルを添付 ファイルとする単一のメールとして送信されます。
-m/--mbox が指定された場合、 PAGER での表示やメール送信の代わりに、 パッチのメールを格納した UNIX mbox 形式ファイルを作成します。 このファイルは UNIX mbox 形式に対応しているツールで閲覧可能です。
-n/--test 指定のある場合、 一連の処理手順は実行されますが、 メールの送信は行われません。 その代わりに、 送信先アドレスや、 パッチ説明文の入力が促されます。 必要な入力が完了すると、 送信されるメールの内容が表示されます。 PAGER 環境変数が設定されている場合、 パッチ爆弾を構成する メールごとに、 環境変数に設定されたプログラムが起動されますので、 内容を確認することができます。
メール送信に失敗した場合、 導入メッセージは .hg/last-email.txt に保存されます。
例:
hg email -r 3000 # リビジョン 3000
hg email -r 3000 -r 3001 # リビジョン 3000 および 3001
hg email -r 3000:3005 # リビジョン 3000 から 3005 まで
hg email 3000 # リビジョン 3000 (非推奨形式)
hg email -o # default に無いリビジョン
hg email -o DEST # DEST に無いリビジョン
hg email -o -r 3000 # 3000 以前で default 側に無いリビジョン
hg email -o -r 3000 DEST # 3000 以前で DEST 側に無いリビジョン
# ※ 以下、すべて bundle 形式
hg email -b # default 側に無いリビジョン
hg email -b DEST # DEST 側に無いリビジョン
hg email -b -r 3000 # 3000 以前で default 側に無いリビジョン
hg email -b -r 3000 DEST # 3000 以前で DEST 側に無いリビジョン
hg email -o -m mbox && # mbox ファイルを生成し...
mutt -R -f mbox # ... mutt で閲覧
hg email -o -m mbox && # mbox ファイルを生成し ...
formail -s sendmail \ # ... formail を使用して
-bm -t < mbox # ... sendmail 経由で送信
本コマンドを使用する前に、 設定ファイルに電子メール関連設定を記述する 必要があります。 設定ファイルに関するドキュメント (hgrc(5)) を参照してください。 (※ 訳注: hg help config でも参照可能)
オプション:
| -g, --git | git 拡張差分形式の使用 |
| --plain | Mercurial 固有のパッチヘッダを省略 |
| -o, --outgoing | 対象リポジトリに無いリビジョンをパッチ形式で送信 |
| -b, --bundle | 対象リポジトリに無いリビジョンをバンドル形式で送信 |
| --bundlename | バンドル形式添付ファイルのファイル名 (既定値: bundle) |
| -r, --rev | 送信するリビジョン |
| --force | 連携先が無関係なリポジトリでも送信 (-b/--bundle 指定時) |
| --base | 連携先指定の代わりとなる基底リビジョン (-b/--bundle 指定時) |
| --intro | 説明文を独立したメールで送信 |
| --body | インラインメッセージとしてパッチを送信 (デフォルト) |
| -a, --attach | 添付ファイルとしてパッチを送信 |
| -i, --inline | インライン添付ファイルとしてパッチを送信 |
| --bcc | BCC 宛先のメールアドレス |
| -c, --cc | CC 宛先のメールアドレス |
| --confirm | 送信前に確認を実施 |
| -d, --diffstat | 差分統計を出力に追加 |
| --date | メールの Date ヘッダ値に指定日時を設定 |
| --desc | 指定ファイルの内容を説明文として使用 |
| -f, --from | メールの From ヘッダ値 |
| -n, --test | 送信予定のメールの内容を表示 |
| -m, --mbox | メール送信の代わりに、 mbox ファイルに書き出す |
| --reply-to | 返信メールの送付先アドレス |
| -s, --subject | 説明文ないし単一パッチ送信メールの Subject ヘッダ値 |
| --in-reply-to | 返信対象のメッセージID |
| --flag | subject 欄に付与するフラグ |
| -t, --to | TO 宛先のメールアドレス |
| -e, --ssh | SSH 連携で使用する ssh コマンド |
| --remotecmd | 遠隔ホスト側で実行される hg コマンド |
| --insecure | サーバ証明書の検証省略(web.cacerts 設定の無視) |
処理における進捗率の表示
本エクステンションは、 hg コマンドからの進捗情報を元に、 可能な限り有益な進捗率を表示します。 多くの処理での進捗率表示が、 明確な処理総量に基づいている一方で、 幾つかの処理においては、 不確定な情報に基づいた進捗率を表示する場合もあります。
指定可能な設定は以下の通りです:
[progress]
delay = 3 # 進捗率表示までの猶予秒数 (浮動少数指定)
changedelay = 1 # 新規トピック表示までの最小猶予時間。
# 3 * refresh よりも小さい値の場合は、
# この設定は無視されます。
refresh = 0.1 # 進捗率表示更新間隔の秒数
format = topic bar number estimate # format of the progress bar
width = <none> # 進捗率表示の最大カラム数
# (width 設定と画面幅の小さい方が有効になります)
clear-complete = True # 実行完了時の進捗率表示クリアの有無
disable = False # 真値が設定された場合、進捗率は表示されません
assume-tty = False # 真値が設定された場合、 disable が指定されない限り
# 常に進捗率が表示されます
format 指定で有効な要素は topic bar number unit estimate speed item です。 デフォルトの item は末尾 20 文字ですが、 -<num> (末尾 num 文字) や +<num> (冒頭 num 文字) 指定の追加で変更可能です。
作業領域中の未登録ファイルを削除するコマンド
hg purge [OPTION]... [DIR]..."
本コマンドは Mercurial の管理対象外のファイルを削除します。 記録済みのリビジョンや、 未コミット変更をテストする場合など、 作業領域を綺麗にしたい場合に有用です。
本コマンドは、 以下のファイルを削除します:
その一方で、 以下のファイルは保持されます:
引数としてディレクトリが指定された場合、 指定ディレクトリ配下のみが、 処理対象となります。
本コマンドの実施により、 登録し忘れたファイルが削除された場合、 当該ファイルは復旧できませんので、 十分注意してください。 削除対象ファイルの名前を確認したいだけの場合は、 --print を指定してください。
オプション:
| -a, --abort-on-err | |
| エラーが発生した場合、 中断する | |
| --all | 無視したファイルも削除する |
| -p, --print | ファイル削除の変わりにファイル名表示を実施 |
| -0, --print0 | ファイル名をNUL文字(0x00)で終端(xargs -p/--print との併用向け) |
| -I, --include | パターンに合致したファイルを処理対象に追加 |
| -X, --exclude | パターンに合致したファイルを処理対象から除外 別名: clean |
履歴上の異なる位置への一連のリビジョンの移動
本エクステンションは、 既存の Mercurial リポジトリ上での、 リビジョン群の移動を実現します
詳細は以下を参照してください: http://mercurial.selenic.com/wiki/RebaseExtension
hg rebase [-s REV | -b REV] [-d REV] [OPTION]
本コマンドは、 反復的なマージを行なうことで、 ある履歴位置 (移動元) から別な位置 (移動先) へとリビジョン群を移植します。 この機能は、 手元のリポジトリでの成果を、 開発用の共有リポジトリに反映する際に、 枝分かれの無い状態にしたい場合などで有用です。
他の利用者に公開済みのリビジョンは、 移動すべきではありません。 公開済みリビジョンの移動は、 結果的に、 他の利用者に対して、 同様のリビジョン移動操作を強制してしまったり、 公開済みと移動後の、 両方のリビジョンの取り込みにより、 リビジョンが重複したりといった、 悪影響があります。
通常の設定では、 公開済みリビジョンは、 移動できません。 詳細は hg help phases を参照してください。
移動先リビジョン (-d/--dest) が指定されない場合、移動先として、 現行の名前付きブランチの、 最新ヘッドが採用されます。 (移動先リビジョン自身は改変されませんが、 移動先の子孫として、 新規リビジョンが追加されます)
移動対象リビジョンの指定には、 "source" 指定と "base" 指定の、 2つの方法が使えます。 いずれも履歴ツリーから移動対象を抽出するための、 簡易化された方法です。 "source" (-s/--source) を指定した場合、 指定リビジョン、 およびその子孫全てを移動します。 "base" (-b/--base) を指定した場合、 指定リビジョンから遡り、 移動先との共通祖先までの範囲を、 移動対象として選択します。 -s 指定よりも -b 指定は精密さで劣りますが、 その分便利です。 移動元のブランチにおいて、 任意のリビジョンを選択することにより、 ブランチ全体が選択されます。 -s も -b も指定しない場合、 作業領域の親リビジョンを "base" とみなします。
より踏み込んだ対象指定として、 --rev を使用する方法があります。 --rev を使うことで、任意のリビジョンを、 移動対象に指定できます。 この方法でリビジョンを指定した場合、 指定リビジョンの子孫は、 自動的には移動対象に含まれません。
特に指定が無い場合、 本コマンドは移動元ブランチのリビジョンを、 移動先の子孫として再生成し、 その後に元リビジョンを破棄します。 移動元リビジョンを残す場合、 --keep を指定してください。 移動元ブランチのリビジョンのうち、 何も貢献の無いリビジョン (例: 移動先ブランチとのマージ実施リビジョン等) は無視されます。
現行の名前付きブランチが2つのヘッドを持ち、 且つ最新のヘッド側が、 作業領域の親である場合、 リビジョン指定無しでも処理を行う merge と異なり、 本コマンドは何も実施しません。 これは、 移動先 (※ 訳注: 現行の名前付きブランチの、 最新ヘッド) と移動元 (※ 訳注: 作業領域の、 親に対する "base" 指定) リビジョンの選択仕様のためです。 必要に応じて、 移動元/先を明示してください (もう一方のヘッドが、 移動先であるならば、 そちらに update してください)。
手動マージでの衝突解消の必要性から、 移動処理が中断された場合は、 --continue/-c での再開や、 --abort/-a での移動前状態への復旧が可能です。
成功時のコマンド終了値は 0、 移植が実施されない場合は 1 です。
オプション:
| -s, --source | 指定リビジョンからの移動 |
| -b, --base | 指定リビジョンの祖先から移動 (移動先との共通祖先まで遡ります) |
| -r, --rev | 指定リビジョン群の移動 |
| -d, --dest | 移動先リビジョン |
| --collapse | 移動後に移動リビジョンを単一化 |
| -m, --message | 指定テキストを要約コミットログとして使用 |
| -e, --edit | コミットログ入力にエディタを起動 |
| -l, --logfile | 要約コミットログをファイルから読み込み |
| --keep | 元リビジョンを維持 |
| --keepbranches | 元ブランチ名を維持 |
| -D, --detach | (非推奨) |
| -t, --tool | マージツールの指定 |
| -c, --continue | 中断された移動を再開 |
| -a, --abort | 中断された移動を中断 |
| --style | 当該スタイルで表示をカスタマイズ |
| --template | 当該テンプレートで表示をカスタマイズ |
commit や qrefresh における対話的な変更取り込みの選択
hg record [OPTION]... [FILE]...
ファイル一覧が指定されなかった場合は hg status で表示される 全てのファイルが記録の対象となります。
-d/--date での日時表記は hg help dates を参照してください。
変更されたファイルの変更箇所ごとに記録するかどうか質問されます。 それに対して以下の操作が可能です:
y - この変更を記録します n - この変更をスキップします e - この変更を手動で編集します s - このファイルの残りの変更を全てスキップします f - このファイルの残りの変更を全て記録します d - 残りの変更およびファイルをスキップして終了します a - 残り全てのファイルの変更を記録します q - 変更を記録しないで終了します ? - ヘルプを表示します
本コマンドをマージのコミットに使用することはできません。
オプション:
| -A, --addremove | |
| コミット前に、 新規/不在ファイルを登録/除外 | |
| --close-branch | ブランチを閉鎖し、 ブランチ一覧での表示から除外 |
| --amend | 作業領域の親リビジョンの改変 |
| -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 | |
| 差分判定の際に空白行を無視 | |
複製リポジトリ間でのハードリンクの再生成
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/
定義済みスキーマは、 同名スキーマ定義により、 上書き可能です。
別ブランチからのリビジョンの移植
本エクステンションにより、 一連のリビジョン群を別な親リビジョン (リポジトリ横断も可能) の先に移植できます。 移植はパッチ形式 ('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
Some commands (e.g. revert) produce backup files ending in .orig, if the .orig file already exists and is not tracked by Mercurial, it will be overwritten.
Written by Matt Mackall <mpm@selenic.com>
翻訳について何かありましたら、メーリングリスト mercurial-ja へ連絡、もしくは Twitter で #mercurialjp を付けてつぶやいてください。
Main Web Site: http://mercurial.selenic.com/
Source code repository: http://selenic.com/hg
Mailing list: http://selenic.com/mailman/listinfo/mercurial
Copyright (C) 2005-2012 Matt Mackall. Free use of this software is granted under the terms of the GNU General Public License version 2 or any later version.