設定と構成
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバ管理
- 2.45.1 → 2.47.0 変更なし
-
2.45.0
04/29/24
- 2.43.1 → 2.44.2 変更なし
-
2.43.0
11/20/23
- 2.41.1 → 2.42.3 変更なし
-
2.41.0
06/01/23
- 2.38.3 → 2.40.3 変更なし
-
2.38.2
12/11/22
- 2.38.1 変更なし
-
2.38.0
10/02/22
- 2.37.1 → 2.37.7 変更なし
-
2.37.0
06/27/22
- 2.31.1 → 2.36.6 変更なし
-
2.31.0
03/15/21
- 2.22.1 → 2.30.9 変更なし
-
2.22.0
06/07/19
- 2.20.1 → 2.21.4 変更なし
-
2.20.0
12/09/18
- 2.12.5 → 2.19.6 変更なし
-
2.11.4
09/22/17
- 2.2.3 → 2.10.5 変更なし
-
2.1.4
12/17/14
-
2.0.5
12/17/14
説明
git mergetool
を使用して、いくつかのマージユーティリティのいずれかを実行し、マージの競合を解決します。通常は *git merge* の後に実行されます。
1つ以上の<file>パラメータが指定されている場合、マージツールプログラムが実行され、各ファイルの違いが解決されます(競合がないファイルはスキップされます)。ディレクトリを指定すると、そのパス内の解決されていないすべてのファイルが含まれます。<file>名が指定されていない場合、*git mergetool* は、マージの競合があるすべてのファイルに対してマージツールプログラムを実行します。
オプション
- -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で使用可能であると想定します。既知のマージツールプログラムのいずれかを実行する代わりに、構成変数
mergetool.<tool>.cmd
に呼び出すコマンドラインを指定することで、*git mergetool* をカスタマイズして代替プログラムを実行できます。*git mergetool*がこのツール(
-t
または--tool
オプション、またはmerge.tool
構成変数を通じて)で呼び出されると、構成されたコマンドラインは、使用可能な場合、マージの共通のベースを含む一時ファイルの名前が$BASE
に設定され、現在のブランチのファイルの内容が$LOCAL
に設定され、マージするファイルの内容が$REMOTE
に設定され、マージツールがマージ解決の結果を書き込むファイルの名前が$MERGED
に設定されて呼び出されます。カスタムマージツールが、その終了コードでマージ解決の成功を正しく示した場合、構成変数
mergetool.<tool>.trustExitCode
をtrue
に設定できます。それ以外の場合は、*git mergetool* は、カスタムツールが終了した後、解決の成功を示すようにユーザーに促します。 - --tool-help
-
--tool
で使用できるマージツールのリストを出力します。 - -y
- --no-prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示しません。これは、
--tool
オプションまたはmerge.tool
構成変数でマージ解決プログラムが明示的に指定されている場合のデフォルトです。 - --prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示し、ユーザーがパスをスキップする機会を与えます。
- -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>で指定された順序でファイルを処理します。<orderfile>には、行ごとに1つのシェルglobパターンがあります。これは、
diff.orderFile
構成変数(git-config[1]を参照)をオーバーライドします。diff.orderFile
をキャンセルするには、-O/dev/null
を使用します。
構成
このセクションのこの行以下のすべての内容は、git-config[1]ドキュメントから選択的に含まれています。内容は、そこに記載されているものと同じです。
- mergetool.<tool>.path
-
指定されたツールのパスをオーバーライドします。これは、ツールがPATHにない場合に役立ちます。
- mergetool.<tool>.cmd
-
指定されたマージツールを呼び出すコマンドを指定します。指定されたコマンドは、次の変数が使用可能な状態でシェルで評価されます。*BASE* は、マージするファイルの共通のベースを含む一時ファイルの名前(使用可能な場合)、*LOCAL* は現在のブランチのファイルの内容を含む一時ファイルの名前、*REMOTE* はマージするブランチからのファイルの内容を含む一時ファイルの名前、*MERGED* はマージツールが成功したマージの結果を書き込むファイルの名前を含みます。
- mergetool.<tool>.hideResolved
-
ユーザーは、特定のツールのグローバルな
mergetool.hideResolved
値をオーバーライドできます。完全な説明については、mergetool.hideResolved
を参照してください。 - mergetool.<tool>.trustExitCode
-
カスタムマージコマンドの場合、マージコマンドの終了コードを使用してマージが成功したかどうかを判断できるかどうかを指定します。これが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
-
--auto-merge
が指定されると、meldはすべての非競合部分を自動的にマージし、競合部分を強調表示し、ユーザーの決定を待ちます。mergetool.meld.useAutoMerge
をtrue
に設定すると、Gitはmeld
で--auto-merge
オプションを無条件に使用します。この値をauto
に設定すると、gitは--auto-merge
がサポートされているかどうかを検出し、使用可能な場合にのみ--auto-merge
を使用します。false
の値は--auto-merge
の使用を完全に回避し、デフォルト値です。 - mergetool.<vimdiff variant>.layout
-
vimdiff、nvimdiff、gvimdiffのいずれかである
<variant>
の分割ウィンドウレイアウトを設定します。--tool=<variant>
(またはmerge.tool
が<variant>
として設定されている場合は--tool
なし)でgit mergetool
を起動すると、Gitはツールレイアウトを決定するためにmergetool.<variant>.layout
を参照します。バリアント固有の設定がない場合は、vimdiffの設定がフォールバックとして使用されます。それも利用できない場合は、4つのウィンドウを持つデフォルトのレイアウトが使用されます。レイアウトの設定については、「バックエンド固有のヒント」セクションを参照してください。 - 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
-
デフォルトで
merge.guitool
を使用するにはtrue
に設定し(--gui
引数を指定するのと同じです)、DISPLAY
環境変数の値の有無に応じてmerge.guitool
またはmerge.tool
を選択するにはauto
に設定します。デフォルトはfalse
で、merge.guitool
を使用するには--gui
引数を明示的に指定する必要があります。
一時ファイル
git mergetool
は、マージを解決する際に*.orig
バックアップファイルを作成します。ファイルがマージされ、git mergetool
セッションが完了したら、これらは安全に削除できます。
mergetool.keepBackup
設定変数をfalse
に設定すると、git mergetool
はファイルが正常にマージされるときにバックアップファイルを自動的に削除します。
バックエンド固有のヒント
vimdiff
説明
git mergetool
で--tool=vimdiff
を指定すると、次の方法で配布された4つのウィンドウレイアウトでVimが開きます。
------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
LOCAL
、BASE
、REMOTE
は、特定のコミットにおける競合ファイルの内容を表示する読み取り専用バッファです(それぞれ「マージ先のコミット」、「共通の祖先コミット」、「マージ元のコミット」)。
MERGED
は、競合を解決する必要がある書き込み可能なバッファです(他の読み取り専用バッファを参照として使用します)。完了したら、通常どおりVimを保存して終了します(:wq
)。または、中止する場合は:cq
を使用して終了します。
レイアウト設定
次のセパレータが特別な意味を持つ文字列を受け入れる設定変数mergetool.vimdiff.layout
を設定することで、Vimで使用されるウィンドウレイアウトを変更できます。
-
+
は「新しいタブを開く」ために使用されます。 -
,
は「新しい垂直分割を開く」ために使用されます。 -
/
は「新しい水平分割を開く」ために使用されます。 -
@
は、競合を解決した後の最終バージョンを含むファイルを指定するために使用されます。存在しない場合、デフォルトでMERGED
が使用されます。
演算子の優先順位は次のとおりです(優先順位を変更するために括弧を使用できます)。
`@` > `+` > `/` > `,`
動作方法を理解するためのいくつかの例を示します。
-
layout = "(LOCAL,BASE,REMOTE)/MERGED"
これは、既に見たデフォルトのレイアウトとまったく同じです。
/
は,
よりも優先順位が高いため、この場合は括弧は必要ありません。次のレイアウト定義は同等です。layout = "LOCAL,BASE,REMOTE / MERGED"
-
layout = "LOCAL,MERGED,REMOTE"
何らかの理由で
BASE
バッファに関心がない場合。------------------------------------------ | | | | | | | | | LOCAL | MERGED | REMOTE | | | | | | | | | ------------------------------------------
-
layout = "MERGED"
MERGED
バッファのみが表示されます。ただし、他のバッファはすべてvimにロードされており、「バッファ」コマンドでアクセスできることに注意してください。------------------------------------------ | | | | | MERGED | | | | | ------------------------------------------
-
layout = "@LOCAL,REMOTE"
MERGED
がレイアウトに存在しない場合、アスタリスクを使用してバッファの1つを「マーク」する必要があります。それは、競合を解決した後に編集して保存する必要があるバッファになります。------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------
-
layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"
3つのタブが開きます。最初のタブはデフォルトレイアウトのコピーであり、他の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番目のタブの定義では、
,
を/
よりも優先させるために括弧を使用する必要があることに注意してください。
バリアント
--tool=vimdiff
の代わりに、これらの他のバリアントのいずれかを使用することもできます。
-
Vimの代わりにgVimを開くには
--tool=gvimdiff
。 -
Vimの代わりにNeovimを開くには
--tool=nvimdiff
。
これらのバリアントを使用する場合、カスタムレイアウトを指定するには、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
を…に設定することと同じです。
-
x=1
:"@LOCAL, REMOTE"
-
x=2
:"LOCAL, MERGED, REMOTE"
-
x=3
:"MERGED"
例:--tool=gvimdiff2
を使用すると、3つの列(LOCAL、MERGED、REMOTE)でgvim
が開きます。
Git
git[1]スイートの一部