SYNOPSIS
gitmergetool
[--tool=
<tool>] [-y
|--
[no-
]prompt
] [<file>…]
DESCRIPTION
git
mergetool
を使用して、いくつかのマージユーティリティの1つを実行し、マージの競合を解決します。通常、 git
merge
の後に実行されます。
1つ以上の <file> パラメーターを指定した場合、 マージツールプログラムが実行され、 各ファイルの差異を解決します(競合のないものはスキップされます)。 ディレクトリを指定すると、 そのパス内にある全ての未解決のファイルが対象となります。 ファイル名(<file>)が指定されていない場合、 git
mergetool
は、マージで競合するすべてのファイルに対してマージツールプ・ログラムを実行します。
OPTIONS
-
-t
<tool> -
--tool=
<tool> -
<tool> で指定したマージ解決プログラムを使用します。 有効な値には emerge、gvimdiff、kdiff3、meld、vimdiff、tortoisemerge が含まれます。有効な <tool> 設定のリストについては、
git
mergetool
--tool-help
を実行してください。マージ解決プログラムが指定されていない場合、
git
mergetool
は構成変数merge.tool
を使用します。 構成変数merge.tool
が設定されていない場合、git
mergetool
は適切なデフォルトを選択します。あなたは構成変数
mergetool.
<tool>.path
を設定することにより、ツールへのフルパスを明示的に指定できます。たとえば、mergetool.kdiff3.path
を設定することにより、kdiff3への絶対パスを構成できます。それ以外の場合、git
mergetool
はツールがPATHで使用可能であると想定します。既知のマージツールプログラムの1つを実行する代わりに、構成変数
mergetool.
<tool>.cmd
で呼び出すコマンドラインを指定することにより、git
mergetool
をカスタマイズして代替プログラムを実行できます。(
-t
または--tool
またはmerge.tool
構成変数、 のいずれかを介して)git
mergetool
をこのツールで呼び出すと、 構成されたコマンドラインが呼び出され、$BASE
にはマージの共通ベースを含む一時ファイルの名前が設定されます(使用可能な場合)。$LOCAL
には現在のブランチのファイルの内容を含む一時ファイルの名前が設定されます。$REMOTE
にはマージされるファイルの内容を含む一時ファイルの名前が設定されます。$MERGED
にはマージツールがマージ解決の結果を書き込むべきファイルの名前が設定されます。カスタムマージツールがその終了コードでマージ解決の成功を正確に示している場合、構成変数
mergetool.
<tool>.trustExitCode
をtrue
に設定できます。それ以外の場合、git
mergetool
は、カスタムツールが終了した後、解決の成功を示すようにユーザーに促します。 -
--tool-help
-
--tool
で使用できるマージツールのリストを出力します。 -
-y
-
--no-prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示しないでください。これは、マージ解決プログラムが
--tool
オプションまたはmerge.tool
構成変数で明示的に指定されている場合のデフォルトです。 -
--prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示して、ユーザーにパス(path)をスキップする機会を与えます。
-
-g
-
--gui
-
git-mergetool
が-g
または--gui
オプションを伴って呼び出されると、 デフォルトのマージツールはmerge.tool
ではなく、 設定されたmerge.guitool
変数から読み取られます。merge.guitool
が設定されていない場合、merge.tool
で構成されたツールにフォールバックします。 これは構成変数mergetool.guiDefault
を使用して自動選択できます。 -
--no-gui
-
これは、 それ以前の
-g
または--gui
設定またはmergetool.guiDefault
設定をオーバーライドし、 設定されたmerge.tool
変数からデフォルトのマージ・ツールを読み取ります。 -
-O
<orderfile> -
<orderfile> で指定された順序でファイルを処理します。これには、1行に1つのシェルグロブパターンがあります。 これは
diff.orderFile
構成変数をオーバーライドします(git-config(1) を参照)。diff.orderFile
をキャンセルするには、-O/dev/null
を使用します。
CONFIGURATION
このセクションの以下のすべては、 git-config(1) ドキュメントの抜粋です。 内容は git-config(1) ドキュメント にあるものと同一です:
- mergetool.<tool>.path
-
指定のツール(<tool>)のパスを上書きします。 これは、ツールがPATH上にない場合に役立ちます。
- mergetool.<tool>.cmd
-
指定のマージツール(<tool>)を呼び出すコマンドを指定します。指定されたコマンドは、次の変数を使用してシェルで評価されます:
BASE
は、マージされるファイルの共通ベースを含む一時ファイルの名前です(使用可能な場合)。LOCAL
は、現在のブランチのファイルの内容を含む一時ファイルの名前です。REMOTE
は、マージされるブランチのファイルの内容を含む一時ファイルの名前です。MERGED
は、マージツールが正常なマージの結果を書き込むファイルの名前が含まれています。 - mergetool.<tool>.hideResolved
-
ユーザーが特定のツール(<tool>)のグローバルな
mergetool.hideResolved
値をオーバーライドできるようにします。 詳細については、mergetool.hideResolved
を参照してください。 - mergetool.<tool>.trustExitCode
-
カスタム・マージ・コマンドの場合、 マージ・コマンドの終了コード(exit code)を使用してマージが成功したかどうかを判断できるかどうかを指定します。 これが true で無い場合、 マージ・ターゲット・ファイルのタイム・スタンプがチェックされ、 ファイルが更新されている場合はマージが成功したと見なされます。 そうでない場合、 ユーザーはマージの成功を示すようプロンプトを表示します。
- mergetool.meld.hasOutput
-
古いバージョンの
meld
は--output
オプションをサポートしていません。 Gitは、meld
--help
の出力を調べることで、meld
が--output
をサポートしているかどうかを検出しようとします。mergetool.meld.hasOutput
を設定すると、Gitはこれらのチェックをスキップし、代わりに設定された値を使用します。mergetool.meld.hasOutput
をtrue
に設定すると、Gitは無条件に--output
オプションを使用するようになり、false
は--output
の使用を回避します。 - mergetool.meld.useAutoMerge
-
meld は
--auto-merge
が指定されると、 競合していない全ての部分を自動的にマージし、 競合する部分を強調表示して、 ユーザーの決定を待ちます。mergetool.meld.useAutoMerge
を`true` に設定すると、 Gitは--auto-merge
オプションをmeld
で無条件に使用するようになります。 この値をauto
に設定すると、 git は--auto-merge
がサポートされているかどうかを検出し、 使用可能な場合にのみ--auto-merge
を使用します。false
値の場合、` --auto-merge` の使用を完全に回避します。 デフォルトはfalse
です。 - mergetool.<vimdiff variant>.layout
-
vimdiff のバリエーション(<variant>)である、 vimdiff` や
nvimdiff
やgvimdiff
のいずれかの分割ウィンドウ・レイアウトを構成します。--tool=
<variant> を指定して(または、merge.tool
が <variant> として設定されている場合は--tool
無しで、)git
mergetool
を起動すると、 Git はmergetool.
<variant>.layout
を参照してツールのレイアウトを決定します。 バリエーション固有の設定が利用できない場合は、vimdiff
がフォールバックとして使用されます。 それも利用できない場合は、 4 つのウィンドウを含むデフォルトのレイアウトが使用されます。 レイアウトを設定するには、 「BACKEND SPECIFIC HINTS」を参照してください。 - mergetool.hideResolved
-
マージ処理中、 Git は可能な限り多くの競合を自動的に解決し、 解決できない競合の周りに競合マーカーを含ませた
MERGED
ファイルを書き込みます。LOCAL
とREMOTE
は通常、 Git の競合解決前のファイルのバージョンを表します。 この設定によりLOCAL
とREMOTE
が上書きされ、 未解決の競合のみがマージ・ツールに表示されます。mergetool.
<tool>.hideResolved
構成変数を介してツールごとに構成できます。 デフォルトはfalse
です。 - mergetool.keepBackup
-
マージを実行した後、競合マーカーを含む元のファイルを、拡張子
.orig
のファイルとして保存できます。 この変数がfalse
に設定されている場合、このファイルは保存されません。 デフォルトはtrue
です(つまり、バックアップファイルを保持します)。 - mergetool.keepTemporaries
-
カスタム・マージ・ツールを呼び出すとき、 Gitは一時ファイルの組をツールに渡します。 ツールがエラーを返し、 この変数が
true
に設定されている場合、 これらの一時ファイルは保持されます。 それ以外の場合、 これらの一時ファイルはツールの終了後に削除されます。 デフォルトはfalse
です。 - mergetool.writeToTemp
-
Gitは、デフォルトで、競合するファイルの一時的な 「BASE」バージョンと「LOCAL」バージョンと「REMOTE」バージョンをワークツリーに書き込みます。
true
に設定すると、Gitはこれらのファイルに一時ディレクトリを使用しようとします。 デフォルトはfalse
です。 - mergetool.prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示します。
- mergetool.guiDefault
-
true
を設定するとデフォルトでmerge.guitool
を使用します(引数--gui
を指定するのと同じです)。 または、auto
を設定するとDISPLAY
環境変数値に応じてmerge.guitool
またはmerge.tool
を選択します。 デフォルトはfalse
でmerge.guitool
を使用するには--gui
引数を明示的に指定する必要があります。
TEMPORARY FILES
git
mergetool
は、マージの解決中に *.orig バックアップファイルを作成します。これらは、ファイルがマージされ、その git
mergetool
セッションが完了したら安全に削除できます。
mergetool.keepBackup
構成変数を false
に設定すると、 git
mergetool
はファイルが正常にマージされた際にバックアップ・ファイルを自動的に削除します。
BACKEND SPECIFIC HINTS
vimdiff
Description
git
mergetool
で --tool=vimdiff
を指定すると、Git は以下のように4つに分割されたウィンドウ・レイアウトで Vim を開きます:
------------------------------------------
| | | |
| LOCAL | BASE | REMOTE |
| | | |
------------------------------------------
| |
| MERGED |
| |
------------------------------------------
LOCALとBASEとREMOTEは、特定のコミットで競合するファイルの内容を示す読み取り専用バッファーです(それぞれ「マージ先のコミット」と「共通の祖先コミット」と「マージ元のコミット」)。
MERGED
は、競合を解決する必要がある書き込み可能なバッファーです(他の読み取り専用バッファーを参照として使用します)。 完了したら、通常どおり Vim を保存して終了します(:wq
)。中止する場合は、:cq
を使用して終了します。
Layout configuration
以下の区切り文字が特別な意味を持つ文字列を受け入れる構成変数 mergetool.vimdiff.layout
を設定することで、 Vim が使用するウィンドウ・レイアウトを変更できます:
-
+
は「open a new tab」(新しいタブを開く)ために使用されます -
,
は「open a new vertical split」(上下分割で開く)ために使用されます -
/
は「open a new horizontal split」(左右分割で開く)ために使用されます -
@
は、競合を解決した後の最終バージョンを含むファイルを示すために使用されます。 存在しない場合、デフォルトでMERGED
が使用されます。
演算子の優先順位は以下のとおりです(丸括弧(parentheses; ( … ))を使用して変更できます):
`@` > `+` > `/` > `,`
これがどのように機能するかを理解するためにいくつかの例を見てみましょう:
-
layout
=
"(LOCAL,BASE,REMOTE
)/MERGED
"これは、すでに見たデフォルトのレイアウトとまったく同一です。
注意:
/
は,
よりも優先されるため、この場合は括弧は不要であることに注意してください。 つまり以下のレイアウト定義と同等です:layout = "LOCAL,BASE,REMOTE / MERGED"
-
layout
=
"LOCAL,MERGED,REMOTE"これは、もし、何らかの理由で
BASE
バッファに関心がない場合です。------------------------------------------ | | | | | | | | | LOCAL | MERGED | REMOTE | | | | | | | | | ------------------------------------------
-
layout
=
"MERGED"MERGED
バッファのみが表示されます。 ただし、他のすべてのものはまだvimにロードされており、buffers
コマンドでアクセスできることに注意してください。------------------------------------------ | | | | | MERGED | | | | | ------------------------------------------
-
layout
=
"@LOCAL,REMOTE"MERGED
がレイアウトに存在しない場合、バッファの 1 つをアスタリスク(*)で「マーク」する必要があります。 これは、競合を解決した後に編集して保存する必要があるバッファーになります。------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------
-
layout
=
"LOCAL,BASE,REMOTE/
MERGED
+
BASE,LOCAL
+
BASE,REMOTE
"3つのタブが開かれます: 最初の 1 つはデフォルト・レイアウトのコピーで、残りの 2 つはそれぞれ (
BASE
とLOCAL
) と (BASE
とREMOTE
) の違いのみを示します。------------------------------------------ | <TAB #1> | TAB #2 | TAB #3 | | ------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
------------------------------------------ | TAB #1 | <TAB #2> | TAB #3 | | ------------------------------------------ | | | | | | | | | | BASE | LOCAL | | | | | | | | | | ------------------------------------------
------------------------------------------ | TAB #1 | TAB #2 | <TAB #3> | | ------------------------------------------ | | | | | | | | | | BASE | REMOTE | | | | | | | | | | ------------------------------------------
-
layout
=
"LOCAL,BASE,REMOTE/
MERGED
+
BASE,LOCAL
+
BASE,REMOTE
+
(LOCAL/BASE/REMOTE
),MERGED
"前の例と同一ですが、最初のタブと同じ情報を持つ 4 番目のタブを別のレイアウトで追加します。
--------------------------------------------- | TAB #1 | TAB #2 | TAB #3 | <TAB #4> | --------------------------------------------- | LOCAL | | |---------------------| | | BASE | MERGED | |---------------------| | | REMOTE | | ---------------------------------------------
注意: 3 番目のタブ定義では、 丸括弧(parentheses; ( … ) ) を使用して
,
を/
よりも優先する必要があることに注意してください。
Variants
--tool=vimdiff
の代わりに、これらの他のバリエーションのいずれかを使用することもできます:
-
--tool=gvimdiff
は Vim の代わりに gVim を開きます。 -
--tool=nvimdiff
は Vim の代わりに Neovim を開きます。
これらのバリエーションを使用する場合、カスタム・レイアウトを指定するには、構成変数 mergetool.vimdiff.layout
の代わりに mergetool.gvimdiff.layout
と mergetool.nvimdiff.layout
を設定する必要があります(ただし、 そのバリエーション固有のものが設定されていない場合、 後者はフォールバックとして使用されます)。
さらに、以前の Git バージョンとの後方互換性を保つために、 vimdiff
や、そのバリエーション (たとえば vimdiff3
、 nvimdiff1
等) の名前の後ろに 1
, 2
, 3
を追加して、定義済みのレイアウトを使用することも可能です。 言い換えると、 --tool=
[g,n,
]vimdiffx
を使用するということは、 --tool=
[g,n,
]vimdiff
を使用し、かつ、設定変数 mergetool.
[g,n,
]vimdiff.layout
を以下のように設定するのと同じことです。 (訳注: --tool=
[g,n,
]vimdiffx
→ --tool=vimdiff1
, --tool=vimdiff2
, --tool=vimdiff3
, --tool=gvimdiff1
, --tool=gvimdiff2
, --tool=gvimdiff3
, --tool=nvimdiff1
, --tool=nvimdiff2
, --tool=nvimdiff3
)
-
x=1
: "@LOCAL,REMOTE
" -
x=2
: "LOCAL,MERGED,
REMOTE
" -
x=3
: "MERGED"
例: --tool=gvimdiff2
を使用すると、 gvim
が 3 つの列 (LOCAL、MERGED、REMOTE) で開きます。
GIT
Part of the git(1) suite