Author: | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
Organization: | Mercurial |
Manual section: | 5 |
Manual group: | Mercurial Manual |
Mercurial では、 挙動を制御するために、 複数の設定ファイルを使用します。
設定に関する問題が発生した場合、 hg config --debug を実行することで、 どの設定項目が、 どのファイルで設定されているのかを、 知ることができます。
設定ファイルの記述方法や、 ファイルの配置に関する詳細は、 hg help config.syntax および hg help config.files を参照してください。
Mercurial の設定ファイルは、 いわゆる ini ファイル形式で記述されます。 設定ファイルは、 「セクション」から構成され、 各セクションは [セクション名] 形式のヘッダで始まり、 名前 = 値 形式の要素が列挙されます:
[ui] username = Firstname Lastname <firstname.lastname@example.net> verbose = True
上記記述はそれぞれ、 ui.username および ui.verbose として参照されます。 詳細は hg help config.syntax を参照してください。
Mercurial は複数のファイルから設定情報を読み込みます。 読み込み対象となるファイルは、 事前に存在しませんので、 適切な位置にファイルを作成するのは、 利用者の責任となります:
リポジトリ毎の局所的な設定は <リポジトリ>/.hg/hgrc に記述します。
「ユーザ名」のような、 広範囲で有効な設定は、 以下で記述します:
設定ファイルの名前 (パス) は、 Mercurial の稼動環境に依存します。 単一ディレクトリ直下の *.rc ファイルを読み込む場合、 ファイル名のアルファベット順で読み込まれ、 先に読み込んだ設定よりも、 後から読み込んだ設定の方が優先されます。 以下に列挙されるパスにおいて、 複数から設定が読み込まれた場合は、 列挙順の早い方の設定が優先されます。
Unix 環境では、 以下のファイルが読み込まれます:
Windows 環境では、 以下のファイルが読み込まれます:
Note
32-bit Python を 64-bit Windows で動作させる場合は、 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial レジストリキーが使用されます。
Plan9 環境では、 以下のファイルが読み込まれます:
リポジトリ毎設定は、 対象リポジトリに関する実行でのみ適用されます。 このファイルは、 履歴管理の対象外であり、 hg clone でも複製されません。 ここでの設定は、 他の全ての設定に優先します。
ユーザ毎設定は、 Mercurial コマンドを実行するユーザ毎の設定です。 ここでの設定は、 当該ユーザの Mercurial コマンド実行全てに適用されます。 ユーザ毎設定は、システム毎/インストール毎の設定に優先します。
インストール毎設定は、 Mercurial のインストール先から読み込まれます。 実行される hg コマンド格納先の親ディレクトリを <インストール先> とみなします。
インストール毎設定は、 Mercurial の実行環境に対する設定です。 ここでの設定は、 実行ユーザ/対象リポジトリに関わらず適用されます。 レジストリキーは PATH 環境変数的な値を保持し、 値の各要素は、 ファイル Mercurial.ini を参照するか、 *.rc ファイルを格納するディレクトリでなければなりません。 1つ以上の設定ファイルが検出されるまで、 Mercurial は記述順序通りに、 各位置のファイル所在確認を行います。
システム毎設定は、 Mercurial を実行するシステムに対する設定です。 ここでの設定は、 実行ユーザ/対象リポジトリに関わらず適用されます。 システム毎設定は、 インストール毎設定より優先されます。
mercurial のリリースには、 いくつかのデフォルト設定ファイルが含まれます。 mercurial のインストールやバージョンアップは、 これらを上書きします。 設定変更の際には、デフォルト設定以外の設定ファイルを編集してください。 開発元が提供するデフォルト設定は、 現状ではマージツール設定のみですが、 パッケージ作成者によって、 他の設定が追加されている可能性があります。 (※ 訳注: デフォルト設定ファイルの格納先は、 パッケージ形態依存なので、 格納先説明では「パッケージ固有」と表記しています)
設定ファイルは、 「セクション」から構成され、 各セクションは [セクション名] 形式のヘッダで始まり、 名前 = 値 形式の要素 (『名前』は『設定キー』とも呼ばれます) が列挙されます:
[spam] eggs=ham green= eggs
設定記述は一行一エントリです。 但し、 後続行が字下げされている場合は、 エントリ記述が継続しているものとみなされます。 値記述の先頭の (半角) 空白文字は除外されます。 空行は無視されます。 # または ; で始まる行は、 コメント行として無視されます。
同一設定キーに対して、 複数回の記述が可能ですが、 Mercurial は最後に設定された値を使用します。 例えば:
[spam] eggs=large ham=serrano eggs=small
上記記述の場合、 設定キー eggs の値として採用されるのは small です。
同一セクションを複数回記述することも可能です。 複数回の記述場所は、 同一ファイル中でも、 異なる設定ファイル間でも構いません。 例えば:
[foo] eggs=large ham=serrano eggs=small [bar] eggs=ham green= eggs [foo] ham=prosciutto eggs=medium bread=toasted
上記の設定記述の場合、 foo セクションの eggs, ham および bread 設定キーの値はそれぞれ medium, prosciutto および toasted となります。 各設定キー毎に、 最後に設定された値が有効になるのです。
同一設定キーに対して、 異なるファイルでそれぞれ設定が記述された場合、 「最後の設定値」はファイルの読み込み順序に依存します。 先の ファイル セクションでのパスの列挙順が、 より早い方が優先されます。
%include file 形式の記述によって、 当該設定ファイルにおいて file が読み込まれます。 読み込みは再帰的に実施されるため、 読み込み対象ファイルから、 他のファイルを読み込むことも可能です。 ファイル名は、 %include 記述のあるファイルに対して、 相対的なものとみなされます。 file における環境変数や ~user 形式の記述は展開されます。 そのため、 以下のような記述によって:
%include ~/.hgrc.d/$HOST.rc
ホスト毎に異なる設定ファイルを読み込む事が可能です。
当該セクションにおいて、 既に name が設定されている場合、 %unset name 形式の記述によって、 設定を破棄する事が可能です。
設定する値には、 自由形式の文字列、 文字列の列挙、または真偽値の、 いずれでも指定可能です。 真偽値の設定では、 "1"、 "yes"、 "true" または "on" のいずれもが真値、 "0"、 "no"、 "false" または "off" のいずれもが偽値とみなされます。 (文字大小は無視されます)
列挙における各値は、 空白文字またはコンマで区切られますが、 二重引用符 (") で囲まれた部位は分割されません:
allow_read = "John Doe, PhD", brian, betty
バックスラッシュを前に付ける事で、 引用符自体を記述する事が可能です。 語の冒頭位置以外の引用符は、 引用符とはみなされません。 (例: foo"bar baz は foo"bar と baz の列挙とみなされます)
Mercurial の設定ファイルで記述可能な各セクション毎の、 用途、 設定キー、 および設定可能な値について以下で述べます。
コマンドの別名 (エイリアス) 定義。
別名定義は、 他のコマンド (または定義済み別名) や、 付加的な引数を使って、 自分独自のコマンドを作成可能です。 別名定義における $1 や $2 のような位置指定引数は、 実行前に Mercurial によって置換されます。 別名定義中で $N 形式による参照の無かった全ての引数は、 実行されるコマンドの末尾に付与されます。
別名定義では、 以下の形式の行を記述します:
<別名> = <コマンド> [<引数>]...
例えば、 以下の定義では:
latest = log --limit 5
最新の 5 リビジョンのみを表示する latest コマンドが定義されます。 定義済みの別名を用いて、 違う別名を定義することも可能です:
stable5 = latest -b stable
Note
既存コマンドと同名の別名定義は、 既存コマンドを上書きします。 このような別名定義は、 大概悲惨な結果を招きます!
感嘆符 (!) から始まる別名定義は、 シェル別名を意味します。 シェル別名はシェルによって解釈され、 任意のコマンド実行が可能です。 例えば以下の定義によって:
echo = !echo $@
hg echo foo 実行は、 端末に foo を表示します。 より実践的な例としては:
purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm
hg purge 実行は、 作業領域中の全ての未知のファイルを、 purge エクステンションと同じ作法で削除します。
別名定義での $1 や $2 等の位置指定引数は、 別名コマンド実行の際に、 コマンド行で指定された、 対応する引数で置換されます。 対応引数が無い場合、 引数不足で処理が中断されます。 $0 はコマンド別名そのもの、$@ は全引数を空白区切りしたもので、それぞれ置換されます。 引用符で囲まれた "$@" は、 引数が個別に引用符で囲まれる点が $@ と異なります。 これら引数の置換は、 シェルによるコマンド行解釈よりも、 前に実施されます。
シェル別名では、 環境変数 $HG が、 別名コマンドを実行する Mercurial のパスに置換されます。 この仕様は、 先の purge 別名のように、 シェル別名において Mercurial を実行する場合に有用です。 更に、 環境変数 $HG_ARGS は Mercurial への引数に置換されますので、 先述した hg echo foo では、 $HG_ARGS は echo foo に置換されます。
Note
いくつかのグローバルオプション (例: -R) の処理は、 シェル別名の解釈前に実施されるため、 シェル別名に対して、 これらを指定することはできません。
ファイル中の行の由来表示に関する設定。 全ての値が真偽値で、 デフォルト値は False です。 diff コマンドに関連するオプションの詳細は、 hg help config.diff を参照してください。
HTTP 認証のための認証情報。 本セクションでは、 HTTP サーバへのログインで使用される、 ユーザ名/パスワードを記述します。 HTTP サーバ側において、 ログイン可能ユーザを制御する場合の詳細は、 hg help config.web を参照してください。
設定は以下の形式で記述されます:
<名前>.<引数> = <値>
<名前> は引数群を1つの認証情報エントリに束ねる働きをします。 例えば:
foo.prefix = hg.intevation.de/mercurial foo.username = foo foo.password = bar foo.schemes = http https bar.prefix = secure.example.org bar.key = path/to/file.key bar.cert = path/to/file.cert bar.schemes = https
利用可能な引数を以下に示します:
ログイン時に認証が要求され、 且つ適切な認証情報記述が無い場合、 認証情報に関する対話的入力が要求されます。
既存のテンプレートキーワードの他に、 本セクションでの定義でのみ有効な、 以下のテンプレートキーワードが使用できます:
例えば、 以下のような設定記述により、 カスタマイズ未実施の際の表示と、 全く同じ内容の情報が表示されます:
[committemplate] changeset = {desc}\n\n HG: コミットログを入力してください。'HG:' で始まる行は無視されます。 HG: {extramsg} HG: -- HG: ユーザ: {author}\n{ifeq(p2rev, "-1", "", "HG: ブランチのマージ\n") }HG: ブランチ '{branch}'\n{if(activebookmark, "HG: ブックマーク '{activebookmark}'\n") }{subrepos % "HG: サブリポジトリ {subrepo}\n" }{file_adds % "HG: {file} を追加\n" }{file_mods % "HG: {file} を変更\n" }{file_dels % "HG: {file} を削除\n" }{if(files, "", "HG: ファイル変更なし\n")}
Note
問題のある文字コード (詳細は hg help win32mbcs 参照) を使う場合、 本機能によるカスタマイズは、 表示内容が崩れないように注意が必要です。
例えば、 バックスラッシュ (0x5c) で終了する複数バイト文字が、 ASCII 文字の n を後ろに伴うようなテンプレート定義では、 この2バイトが、 改行文字扱いされてしまいます (先行する複数バイト文字も崩れます)。 (※ 訳注: cp932/Shift-JIS では「ソ」や「能」などが該当します)
カスタマイズ用テンプレートは、 以下のコマンドで利用されます (エディタ起動のために --edit オプションが必要な場合もあります):
changeset の代わりに以下の項目を設定することで、 カスタマイズを、 特定のコマンドに限定したり、 コマンド毎に異なる内容にすることも可能です。
これらのドット区切りの名前は、 階層構造的に扱われます。 例えば changeset.tag.remove の設定は hg tag --remove にのみ影響しますが、 changeset.tag の設定は --remove 指定に関わりなく全ての hg tag 実行に影響します。
コミットメッセージ入力用の、 外部エディタを起動する際には、 項目名冒頭の changeset. を除いたドット区切り名 (例: commit.normal.normal) が、 HGEDITFORM 環境変数に設定されます。
本セクションでは、 changeset 以外の設定項目を、 相互に参照可能です。 例えば、 コミット対象一覧を列挙する以下の設定を {listupfiles} として、 各設定項目間で共有することができます:
[committemplate] listupfiles = {file_adds % "HG: added {file}\n" }{file_mods % "HG: changed {file}\n" }{file_dels % "HG: removed {file}\n" }{if(files, "", "HG: no files changed\n")}
リポジトリ/作業領域間の入出力における、 ファイル変換フィルタの指定。 改行形式の変換に代表される、 ファイルの地域化/正規化に使用されます。
フィルタは、 フィルタコマンドを伴ったフィルタパターンで指定されます。 デフォルトのパターン指定形式は、 作業領域ルートからの相対パスに対して、 パス先頭からのパターン合致で判定する、 ワイルドカード形式 (glob) です。 例えば、 ルート直下の .txt 拡張子のファイルにのみ合致させるパターンは *.txt となります。 作業領域中の .c 拡張子の全ファイルへの合致は、 **.c となります。 それぞれのファイルに適用されるフィルタは、 最初にマッチしたパターンのものだけです。
フィルタコマンドの記述は pipe: または tempfile: で開始可能です。 特に指定が無い場合は、 pipe: 指定相当とみなされます。
pipe: 指定のフィルタコマンドは、 標準入力からデータを読み込み、 変換済みデータを標準出力に書き出さなければなりません。
pipe フィルタ例を以下に示します:
[encode] # 差分記録の圧縮効果向上のため、コミット時に gzip ファイルを解凍。 # 備考: あくまで例示であり、この方式自体はあまり良い案ではありません *.gz = pipe: gunzip [decode] # 作業領域への取り出しの際に gzip ファイルを再圧縮 # (デフォルトである "pipe:" 指定は省略可能) *.gz = gzip
tempfile: 指定のフィルタコマンドは、 テンプレート形式で記述します。 INFILE 記述は、 処理対象データが格納された一時ファイルのパスに、 OUTFILE 記述は、 処理結果を格納する (空の) 一時ファイルのパスに、 それぞれ置換されます。
Note
標準的なシェルの I/O リダイレクトが、 予期せぬ結果や、 ファイル内容の破壊に繋がる Windows のような環境では、 tempfile 機構の使用がお勧めです。
Windows (CRLF) と Unix (LF) 環境間における改行形式の変換を行う eol エクステンションは、 内部的にフィルタ機構を使用しています。 改行形式変更には、 eol エクステンションの利用をお勧めします。
(defaults の使用は非推奨です。 alias を使用してください。)
[defaults] セクションは、 指定コマンドに対する、 デフォルトのオプション/引数指定の記述に使用します。
以下の記述は、 hg log の常時 verbose モード実行と、 hg status の変更ファイル限定表示化の例です:
[defaults] log = -v status = -m
alias 定義で上書きされたコマンドでも、 元々のコマンドの方が defaults 定義対象となります。 alias 定義コマンドも defaults 定義対象となります。
差分表示の設定。 unified 以外の全ての設定は真偽値で、 デフォルト値は False です。 annotate コマンドに関連するオプションの詳細は、 hg help config.annotate を参照してください。
電子メールを送信するエクステンション向けの設定。
省略可能。 宛先において都合の良い文字符号化方式のカンマ区切り。 電子メールのアドレス指定、 ヘッダ群、 およびパッチ 「以外」 のマルチパート部分は、 ローカル符号化方式 ($HGENCODING または ui.fallbackencoding で指定) からの変換に成功した、 「最初の」符号化方式で符号化されます。 変換に失敗した場合、 そのままのデータが送信されます。 (デフォルト値: '')
電子メールの文字符号化方式は以下の順序で確定します:
email セクションの設定例を以下に示します:
[email] from = Joseph User <joe.user@example.com> method = /usr/sbin/sendmail # 西欧圏向けの文字符号化設定 # 最初と最後に確認される us-ascii と utf-8 の記述は省略 charsets = iso-8859-1, iso-8859-15, windows-1252
Mercurial には、 機能追加のための、 エクステンション機構が備わっています。 個々のエクステンションを有効にするには、 本セクションにおいて、 対応するエントリを記述する必要があります。
エクステンションの実装が、 Python の検索パス上にある場合、 モジュール名に続けて = を記述するだけ (右辺値は不要) です。
それ以外の場合、 任意の名前に続けて = を記述した後ろに、 エクステンションを実装した .py ファイルへのパス (ファイル名含む) を記述してください。
先に読み込まれた設定ファイルにおいて、 有効化済みのエクステンションを、 明示的に無効化したい場合は、 foo = !/ext/path あるいは foo = ! のように、 値の先頭に ! が来るような設定を記述してください。
~/.hgrc 記述例を以下に示します:
[extensions] # (color エクステンションは Mercurial 同梱のものが読み込まれます) color = # (以下のエクステンションは指定のパスから読み込まれます) myfeature = ~/.hgext/myfeature.py
"generaldelta" 形式リポジトリの使用可否。 この形式では、 "revlog" での格納の際に、 任意の対象との差分の記録を許すことで、 データ量の圧縮率を向上させることができます。 ブランチが多い場合に、 この形式の効果が発揮されます。
この形式の利用には Mercurial 1.9 以降が必要です。
特に指定がない場合は有効化されます。
"dotencode" 形式リポジトリの使用可否。 この形式では、 特定の環境で問題を生じる ._ (Mac OS X) や空白文字 (Windows) で始まるファイル名の履歴が、 どの環境でも正しく格納できるように、 "fncache" 形式 (本設定の有効化に必須) を拡張します。
この形式の利用には Mercurial 1.7 以降が必要です。
特に指定がない場合は有効化されます。
"fncache" 形式リポジトリの使用可否。 この形式では、 長いファイル名や、 特定の OS の予約名 (Windows での "nul") と同名のファイルの履歴が、 どの環境でも正しく格納できるように、 "store" 形式 (本設定の有効化に必須) を拡張します。
この形式の利用には Mercurial 1.1 以降が必要です。
特に指定がない場合は有効化されます。
"store" 形式リポジトリの使用可否。 この形式では、 管理対象のファイル名が、 文字大小違いでお互いに衝突する場合に、 どの環境でも履歴が正しく格納できるように、 格納形式を拡張します。 本形式を無効化した場合、 異環境との相互運用性を犠牲にする代わりに、 有効化時よりも長いファイル名を、 管理対象にできるようになります。
この形式の利用には Mercurial 0.9.4 以降が必要です。
特に指定がない場合は有効化されます。
ウェブでのグラフ表示設定。 本セクションでは、 グラフの表示要素に対して、 設定を変更できます (例: default ブランチを目立たせる)。
設定は以下の形式で記述されます:
<ブランチ名>.<引数> = <値>
<ブランチ名> は設定変更対象のブランチ名です。例えば:
[graph] # 幅を2ピクセルに変更 default.width = 2 # 色を赤に変更 default.color = FF0000
利用可能な引数を以下に示します:
commit の開始/終了といった様々な処理契機において、 自動実行されるコマンド、または Python 関数。 処理契機名に接尾辞 (suffix) を追加した記述をする事で、 同一処理契機に複数のフックを実行可能です。 先に読み込まれた設定 (例: ホスト毎設定) におけるフック設定は、 別な値を設定するか、 空値の設定により、 上書き可能です。 フック名の前に priority. 接頭辞を追加した設定値を新たに定義し、 値を設定することで、 フック実行の優先度を設定できます。 デフォルトの優先度設定値は 0 です。 (※ 訳注: 優先度値が大きいフックの方が先に実行されます)
.hg/hgrc 設定例を以下に示します:
[hooks] # 履歴の取り込み毎に作業領域を更新 changegroup.update = hg update # ホスト毎設定の無効化 incoming = incoming.email = /my/email/hook incoming.autobuild = /my/build/hook # 他の incoming に先立って autobuild フックを実行 priority.incoming.autobuild = 1
殆どのフックは、 有用な付加情報を持つ環境変数設定と共に実行されます。 以下に示すフック群に渡される環境変数は $HG_foo 形式の名前を持ちます。
Note
コマンド実行に対する pre- または post- 付きの汎用フックは、 トランザクション確定の成否に影響しない状況で呼ばれるため、 汎用フックを使用する方がお勧めです。 "commit" のようなフックは、 hg commit 実行以外にも、 リビジョンを作成する契機 (例: hg tag) 全てにおいて呼ばれます。
Note
Windows のような環境では、 空値の環境変数が、 引き渡されない場合があります。 例えば、 非マージリビジョンの場合、 Unix 系環境では空値の $HG_PARENT2 が引き渡されますが、 Windows 環境では、 環境変数自身の引渡しがありません。
Python 関数のフック指定文法を以下に示します:
フック名 = python:モジュール名.サブモジュール名.関数名 フック名 = python:/モジュール/ファイル/への/パス.py:関数名
Python 関数のフックは、 Mercurial プロセス内部で実行されます。 各フックの起動では、 最低でも3つのキーワード引数が渡されます。 ui オブジェクト (ui キーワード)、 repository オブジェクト (repo キーワード)、 フック起動種別を示す hooktype キーワードの3つです。 フックの説明で示した環境変数は、 HG_ 無しで、 且つ小文字表記のキーワードを使用した、 キーワード引数として渡されます。
Python 関数フックの戻り値が "true" 相当値か、 実行中に例外が発生した場合、 処理失敗とみなされます。 (※ 訳注: 失敗の場合に "true" である点に注意)
(本セクションでの設定は、 非推奨です。 [hostsecurity] セクションでの fingerprints 設定を使用してください)
既知の HTTPS ホストの証明書フィンガープリント (fingerprint) 記述。
既知の HTTPS ホストの証明書フィンガープリント (fingerprint) 記述。 本セクションに記述のあるホストと HTTPS で接続する場合、 ホスト証明書のフィンガープリントが、 記述と一致しなければ、 接続失敗とみなされます。 ssh における known_hosts 設定に相当します。
フィンガープリントは、 DER 符号化された証明書の SHA-1 ハッシュ値です。 空白あるいはカンマ区切りで、 複数値を指定可能です。 複数指定の機能は、 ホストの移行期間の、 新旧両フィンガープリントの指定等のケースで有用です。
フィンガープリント指定のあるホストとの接続の場合、 CA 連鎖の確認や web.cacerts 設定は無視されます。
記述例を以下に示します:
[hostfingerprints] hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
外部ホスト連携時の、 通信セキュリティに関する設定行います。
以下の設定は、 全接続先に対するデフォルト挙動を指定します。
接続に使用する、 暗号化形式の指定。
OpenSSL Cipher List Format で有効な値のみ指定可能です。 詳細は https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT を参照してください。
不適切な設定は、 接続の安全性や性能を、 著しく損ないますので、 事情に詳しいユーザ以外は、 絶対に設定しないでください。
この設定には Python 2.7 の使用が必須です。
通信暗号化方式の、 最低強度の指定。
指定が無い場合、 接続元/先の両方で使用可能な TLS バージョンから、 最新のものが採用されます。
指定可能な値は tls1.0, tls1.1, tls1.2 です。
TLS 1.0 のみに対応する古い Python を使用している場合は、 tls1.0 のみが指定可能です。
複数の TLS バージョンに対応する新しい Python を使用している場合、 デフォルト値は tls1.1 です。 tls1.0 を指定により TLS 1.0 の利用を許可できますが、 TLS 1.0 の使用は安全性が低下しますから、 接続先が TLS 1.1+ に対応しない場合にのみ、 使用することをお勧めします。
[hostsecurity] では hostname:setting 形式で記述することで、 複数の個別設定を、 ホスト毎に指定可能です。
ホスト毎に指定可能な設定を、 以下に示します。
対応するホストの、 DER 符号化された証明書の SHA-1 ハッシュ値です。 空白あるいはカンマ区切りで、 複数値を指定可能です。 個々の値は algorithm:fingerprint 形式で記述します。 例: sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2.
algorithm には sha1, sha256, sha512 が指定可能です。
sha256 または sha512 の使用が推奨されます。
フィンガープリント指定があるホストでは、 CA 連鎖の確認は省略され、 指定フィンガープリントとの一致が必須となります。 対象ホストにおいて、 証明書が更新された場合は、 fingerprints 設定が更新されるまでは、 対象ホストとは接続できません。 この場合、 利便性が犠牲になりますが、 CA 連鎖での検証よりも、 高い安全性を維持できます。
この設定項目は verifycertsfile よりも優先されます。
対応するホストの、 証明書格納ファイル (PEM 符号化形式) へのパス。 読み込み前に、 パス中の環境変数と ~user 記述が置換されます。
指定パス中の証明書が、 接続先の証明書、 又はその認証局 (CA) の、 いずれとも合致しない場合は、証明書不正として、 接続が拒否されます。
本項目の設定時は、 指定証明書のみが、 証明書検証に使用されます。 web.cacerts 設定や、 その他の証明書指定は無視されます。
対象ホストのホスト毎設定で fingerprints が設定されている場合、 この指定は無視されます。
The format of the file is as follows:
-----BEGIN CERTIFICATE----- ... (base64 PEM 符号化形式の証明書) ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... (base64 PEM 符号化形式の証明書) ... -----END CERTIFICATE-----
記述例を以下に示します:
[hostsecurity] hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
例えば、 通常接続の暗号強度を TLS 1.2 以上にしつつ、 hg.example.com への接続では TLS 1.1 を許可したい場合の設定は、 以下のようになります:
[hostsecurity] minimumprotocol = tls1.2 hg.example.com:minimumprotocol = tls1.1
ウェブベースの Mercurial リポジトリアクセスで使用される HTTP プロキシ設定。
本セクションでは、 マージ/作業領域更新における、 挙動を設定します。
特定のファイル名パターンと、 マージツールの関連付け。 本セクションでの関連付けは、 デフォルトのマージツール選択に優先します。 デフォルトのパターン指定形式は、 作業領域ルートからの相対パスに対して、 パス先頭からのパターン合致で判定する、ワイルドカード形式とみなされます。
記述例:
[merge-patterns] **.c = kdiff3 **.jpg = myimgmerge
本セクションは、 ファイル毎のマージ処理のための、 外部ツールを設定します。 インストール時に事前設定されている可能性もあります。 既存の設定内容は、 hg config merge-tools で確認できます。 設定の詳細は hg help merge-tools も参照してください。
~/.hgrc での設定例を以下に示します:
[merge-tools] # 既存ツールの実行パスを標準のものから変更 kdiff3.executable = ~/bin/kdiff3 # コマンド行形式の指定 kdiff3.args = $base $local $other -o $output # 優先順位を高く設定 kdiff3.priority = 1 # 設定済みツールの優先度の変更 meld.priority = 0 # 設定済みツールの無効化 vimdiff.disabled = yes # 固有ツールの設定 myHtmlTool.args = -m $local $other $base $output myHtmlTool.regkey = Software\FooSoftware\HtmlMerge myHtmlTool.priority = 1
利用可能な引数を以下に示します:
実行可能ファイル名またはパス名。
(デフォルト値: ツール名が自動的に設定)
マージ成否判定方式の選択一覧 (複数指定可能):
hg import や Mercurial Queues (MQ) エクステンション等による、 パッチ適用に関する設定。
連携対象リポジトリに、 シンボリックな名前や挙動を割り当てます。
連携先リポジトリの URL やディレクトリを定義する、 シンボリックな名前が、 設定項名になります。 例えば:
[paths] my_server = https://example.com/my_repo local_path = /home/me/repo
定義された項目名は、 コマンド実行時に使用できます。 例えば my_server からの履歴取り込みは hg pull my_server、 local_path への履歴反映は hg push local_path で可能です。
コロン (:) を含む設定項目名は、 指定先との連携の際の挙動に影響する、 サブ項目名とみなされます。 例えば:
[paths] my_server = https://example.com/my_path my_server:pushurl = ssh://example.com/my_path
以下のサブオプションを指定できます:
対象リビジョン指定無しでの、 履歴反映系操作における、 対象算出 revset。
-r 指定無しで hg push が実行された際に、 この項目で設定された revset 記述を元に、 反映対象リビジョンが算出されます。
例えば . が設定されている場合は、 作業領域の (第1) 親リビジョンが、 反映対象とみなされます。
ブックマークを含む revset を記述しても、 ブックマーク情報そのものは、 反映対象には含まれません。
以下の名前で定義された連携先は、 特殊な意味を持ちます:
デフォルト時のフェーズの取り扱い設定。 フェーズ操作に関する詳細は hg help phases を参照してください。
プロファイリングの種別、 形式および出力先の設定。 指定可能な種別は、 精密プロファイル (名称: ls) と、 サンプリングプロファイル (名称: stat) の2種類です。
以下の説明では、 プロファイル期間に採取される生データの事を 'プロファイルデータ'、 プロファイルデータを元にした、 テキスト形式の統計報告を 'プロファイル報告' と呼称します。 プロファイル採取には、 lsprof が用いられます。
使用するプロファイラ種別。 (デフォルト値: ls)
プロファイル形式。 詳細プロファイラ ls 固有の設定。 (デフォルト値: text)
Mercurial コマンドは、 処理の進捗率を表示可能です。 多くの処理において、 明確な処理総量に基づいて、 進捗表示が行われますが、 一部の処理では、 不確定な情報に基づいた進捗率が表示される場合があります。
進捗表示の形式指定。
format 指定で有効な要素は topic (現処理内容), bar (バー表示), number (終了数), unit (対象単位), estimate (残予想時間), speed (処理速度), item (現処理対象) です。 デフォルトの item は対象の末尾 20 文字ですが、 -<num> (末尾 num 文字) や +<num> (冒頭 num 文字) 指定の追加で変更可能です。
(デフォルト値: topic bar number estimate)
revsets 機能の別名定義。 詳細は hg help revsets を参照してください。
一般的なサーバ機能の設定。
Like bundle1.pull but only used if the repository is using the generaldelta storage format. (default: True)
Large repositories using the generaldelta storage format should consider setting this option because converting generaldelta repositories to the exchange format required by the bundle1 data format can consume a lot of CPU.
電子メールを送信するエクステンション向け設定。
連携先ホストの名称変更や一時的な停止などで、 サブリポジトリ参照先 URL が、 無効になる場合があります。 本セクションでは、 参照先 URL の書き換えを、 以下の形式で記述できます:
<パターン> = <置換結果>
パターン にはサブリポジトリの参照先 URL に合致する正規表現を、 置換結果 には参照先 URL の書き換え結果を記述します。 パターン でのグループ表記への合致は、置換結果 で参照可能です。 記述例を以下に示します:
http://server/(.*)-hg/ = http://hg.server/\1/
上記設定によって、 http://server/foo-hg/ は http://hg.server/foo/ に書き換えられます。
サブリポジトリの参照先 URL が相対パスの場合、 書き換えの パターン は、 参照先 URL を絶対パス化した後で、 絶対パス全体に適用されます。 絶対パス化された パターン に対する書き換えが発生しない場合は、 絶対パス化前の参照先に対し、 合致判定/買い替えを再度実施します。 書き換えの適用は、 記述順に実施されます。
テンプレート機能の別名定義。 詳細は hg help templates を参照してください。
Mercurial の設定ファイルは、 任意のコマンド実行を可能にできることから、 信頼できるユーザ/グループに属さない設定ファイルは、 その記述内容が無視されます。 共有リポジトリや、 リポジトリサーバの .hg/hgrc におけるフックやエクステンション設定では、 しばしばこの問題が顕在化します。 但し、 web インタフェースに関しては、 [web] セクションにおける、 安全な設定記述が使用されます。
設定ファイルの所有者またはグループが、 本セクションで記述した、 ユーザまたはグループと合致する場合、 その設定ファイルは 信頼 されます。 実効ユーザ (※ 訳注: 対象リポジトリ上で実行される 「プロセス」 の実効ユーザ) は常に信頼対象になります。 全てのファイルを信頼する場合は、 ユーザ/グループ設定のいずれかで * を列挙してください。 本セクションの記述が有効になるためには、 既に信頼されているファイル において記述する必要が有ります。 例えば、 Mercurial プロセスを実行しているユーザやサービスの $HOME/.hgrc ファイルなどが該当します。
ユーザインタフェースに関する設定。
Whether the "clone bundles" feature is enabled.
When enabled, hg clone may download and apply a server-advertised bundle file from a URL instead of using the normal exchange mechanism.
This can likely result in faster and more reliable clones.
(デフォルト値: True)
サーバからの "clone bundle" 要求が適用できなかった場合に、 代替として通常の clone 処理を行うか否か。
"clone bundles" は、 サーバ側の負荷軽減のために要求されるため、 通常 clone 処理による代替は、 デフォルトでは無効化されています。 クライアントが "clone bundles" 代替として通常 clone 処理を行うと、 事前作成した bundle ファイルによる、 負荷低減を期待していたサーバは、 想定外の負荷を受けることになります。 "clone bundles" 適用不可時に、 処理を終了させることで、 異常な負荷によるサーバダウンを防ぎます。
(デフォルト値: False)
Defines preferences for which "clone bundles" to use.
Servers advertising "clone bundles" may advertise multiple available bundles. Each bundle may have different attributes, such as the bundle type and compression format. This option is used to prefer a particular bundle over another.
Mercurial では以下のキーを定義しています:
Server operators may define custom keys.
Example values: COMPRESSION=bzip2, BUNDLESPEC=gzip-v2, COMPRESSION=gzip.
By default, the first bundle advertised by the server is used.
マージで衝突が検出された際に、 ファイルに挿入される衝突マークを、 テンプレート機能を使って定義。 テンプレート機能自体に関する詳細は、 hg help templates を参照してください。
デフォルト設定では、 ハッシュ値、タグ名、ブランチ名、ブックマーク、 ユーザ名および、 コミットログの一行目を表示します。
タグ名、ブランチ名、ブックマーク、 ユーザ名、 コミットログのいずれかで非 ASCII 文字を使用している場合は、 マージ対象ファイルの文字コードに、 注意を払う必要があります。 テンプレート展開の際に、 非 ASCII 文字は --encoding オプション、 HGENCODING あるいは各種ロケール環境変数で指定された文字コードで、 符号化されます。 マージ対象ファイルの文字コードと異なる場合、 文字コード混在による深刻な問題を生じます。
hg import やエクステンションによるパッチ適用で使用する外部ツール。 通常のパッチ適用は Mercurial 内部で処理されます。 外部ツールは、 Unix の patch コマンドと同等の挙動が要求されます。 最低限、 パス指定の冒頭要素除去の -p 、起点ディレクトリ指定の -d といったオプションの受理や、 標準入力からのパッチファイル入力が、 必要とされます。
外部ツールは固有引数と一緒に指定可能です。 例えば patch --merge 指定により、 2-way マージオプション付きで patch が実行されます。
ファイル名可搬性確認の要否。 warn, ignore または abort のいずれか。 (デフォルト値: warn)
hg commit での新規リビジョン作成で記録されるユーザ名。 個人名と電子メールアドレスを使用するのが一般的です。 (例: Fred Widget <fred@example.com>) 設定値中の環境変数は、 展開されます。
(デフォルト値: $EMAIL 環境変数値、 または ユーザ名@ホスト名) 例えば、 システム毎設定ファイルでの username = 記述のような、 空値が設定された場合、 (Mercurial からの問い合わせを契機に) 手動で指定するか、 他の設定ファイルでの設定が必要です。
ウェブインタフェース設定。 本セクションでの設定は、 組み込みウェブサーバ (hg serve での実行) と、 ウェブサーバ上でのスクリプト (FastCGI や WSGI 向けの hgweb.cgi およびその派生) の実行の、両方に適用されます。
Mercurial の組み込みウェブサーバは、 認証 (authentication) を行いません (ユーザを確認するための、 ユーザ名やパスワードの入力を求めません) が、 承認 (authorization: アクセス可否の判定) の機能はあります (本セクションでの設定を元に、 認証済みユーザに対して実施)。 利用するウェブサーバの、 認証機能を Mercurial 向けに正しく設定するか、 Mercurial の承認機能を、 無効化してください。
信頼できる環境 (例: 私的な LAN 配下で、 全ての利用者に hg push 許可) において、 素早くサーバを立ち上げたい場合、 以下の起動形式が良いでしょう:
$ hg --config web.allow_push=* --config web.push_ssl=False serve
この設定は、 全ての利用者に、 サーバへの hg push を許可しますので、 公開サーバで使用してはいけません。
本セクションで指定可能な設定項目を、 以下に示します:
PEM 符号化形式の証明書認証局証明書一覧格納ファイルへのパス。 ファイル名記述における環境変数および ~user 記述は置換されます。 本項目が記述された場合、 HTTPS 接続時の接続先ホストの認証に、 指定された証明書が使用されます。
SSL の証明書検証を、 一時的に停止したい場合は、 コマンドライン上で --insecure を指定してください。
OpenSSL の CA 証明書ファイルがあれば、 それを利用しても構いません。 多くの Linux システムでは、 /etc/ssl/certs/ca-certificates.crt に格納されている筈です。 それ以外は、 手動で生成する必要があります。 ファイルの形式を以下に示します:
-----BEGIN CERTIFICATE----- ... (base64 PEM 符号化形式の証明書) ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... (base64 PEM 符号化形式の証明書) ... -----END CERTIFICATE-----
ファイルの差分比較を表示する際の、 コンテキスト行数。 負値または full 指定の場合、 ファイル全体が表示されます。 (デフォルト値: 5)
comparison 処理要求時に context パラメータを指定することで、 設定を上書き可能です。
リポジトリに関連付けられた「ラベル」文字列の一覧。
「ラベル」指定は、 テンプレートキーワード labels として、 表示のカスタマイズに使用できます。 例えば index テンプレートでの、 ラベルによる分類/取捨選択や、 summary テンプレートでの、 追加情報出力などが想定されます。 (※ 訳注: Mercurial 3.9 時点では labels 機能を使う同梱テンプレートは json テンプレートのみです)
新規リポジトリを一覧に表示するための、 ディレクトリ一覧の再取得を、 ファイルシステムに発行する頻度 (単位: 秒)。 ワイルドカードを使って、 パス指定するケースで有用です。 時間当たりの一覧再取得頻度の増加は、 ファイルシステム走査の性能次第で、 実行性能が劣化します。
0 又は負値は、 毎回再取得することを意味します。 (デフォルト値: 20)
ウェブ表示の置換設定定義。 ウェブインタフェースの出力の自動変換用に、 正規表現の置換パターン設定を、 本セクションで定義することが可能です。
デフォルトの hgweb 表示用テンプレートは、 コミットログ表示に対して、 これらの置換パターンを適用します。 独自定義の hgweb テンプレートにおいて、 "websub" フィルタ呼び出しを追加 (通常は "escape" フィルタの直後) することで、 コミットログ以外の任意の対象に、 置換パターンを適用可能です。
置換パターン利用の例としては、 障害番号を HTML のリンクに変換することで、 障害管理システムにリンクしたり、 『マークダウン』的な文法の記述から、 HTML への変換、といったものがあります (後述する例を参照してください)
本セクションの各エントリの名前は、 置換フィルタの名前にります。 各エントリの値は、 フィルタによる置換処理の正規表現定義となります。 本セクションでの記述は、 廃止された interhg エクステンション同様に、 Unix の sed コマンドによる、 置換指定の文法を踏襲しています:
patternname = s/合致判定正規表現/置換正規表現/[i]
区切り記号には "/" 以外にも、 任意の文字を使用可能です。 末尾において "i" が指定された場合、 合致判定の際に文字の大小を無視します。
記述例:
[websub] issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i italic = s/\b_(\S+)_\b/<i>\1<\/i>/ bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
並列実施に関する設定。 現状では、 Unix 系システムにおける作業領域更新で、 処理の並列実施により、 大規模リポジトリでの大幅な性能改善が見込まれます。
本マニュアルページの著者は Bryan O'Sullivan <bos@serpentine.com> です。
Mercurial の著者は Matt Mackall <mpm@selenic.com> です。
本マニュアルの著作権は copyright 2005 Bryan O'Sullivan です。 Mercurial の著作権は copyright 2005-2016 Matt Mackall です。 本ソフトウェアは、 バージョン2またはそれ以降の GNU General Public License の元での自由な利用が保証されています。