Meldをgit difftoolとして設定して使用するにはどうすればよいですか?
git difftoolは、端末にdiff出力を表示する代わりに、GUI diffプログラム(つまりMeld)を使用してdiffを表示します。
コマンドラインでGUIプログラムを設定することもできますが-t <tool> / --tool=<tool>
、.gitconfig
ファイルで構成する方が理にかなっています。[注:下部にある引用符とWindowsパスのエスケープに関するセクションを参照してください。]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[注:これらの設定はgit diff
、通常どおり機能し続ける動作を変更しません。]
あなたは、使用git difftool
、使用するとまったく同じようにgit diff
。例えば
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
適切に構成されている場合、メルドウィンドウが開き、GUIインターフェイスを使用して差分が表示されます。
メルドGUIウィンドウペインの順序は、の順で制御することが可能$LOCAL
と$REMOTE
でcmd
、左ペインに示し、右ペイン内のどのされているファイルと言うことです。逆にしたい場合は、次のように入れ替えます。
cmd = meld "$REMOTE" "$LOCAL"
最後に、このprompt = false
行は単にMeldを起動するかどうかについてgitがプロンプトを出さないようにするだけで、デフォルトではgitがプロンプトを出します。
Meldをgit mergetoolとして設定して使用するにはどうすればよいですか?
git mergetoolを使用すると、GUIマージプログラム(つまりMeld)を使用して、マージ中に発生したマージの競合を解決できます。
difftoolと同様に、コマンドラインでGUIプログラムを設定できます-t <tool> / --tool=<tool>
が、以前と同様に、.gitconfig
ファイルで構成する方が理にかなっています。[注:下部にある引用符とWindowsパスのエスケープに関するセクションを参照してください。]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
git mergetool
実際のマージの実行には使用しません。使用git mergetool
する前に、通常の方法でgitを使用してマージを実行します。例えば
git checkout master
git merge branch_name
マージの競合がある場合、gitは次のように表示します。
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
この時点file_name
で、マージ競合情報を含む部分的にマージされたファイルが含まれます(すべての>>>>>>>
および<<<<<<<
エントリが含まれているファイルです)。
Mergetoolを使用して、マージの競合を解決できるようになりました。あなたはそれを非常に簡単に始めます:
git mergetool
適切に構成されている場合、3つのファイルを表示するMeldウィンドウが開きます。各ファイルは、GUIインターフェイスの個別のペインに含まれます。
.gitconfig
上記の例のエントリでは、2行が行として提案されてい[mergetool "meld"]
cmd
ます。実際、上級ユーザーがcmd
回線を構成する方法にはさまざまな種類がありますが、それはこの回答の範囲を超えています。
この回答には2つの代替cmd
ラインがあり、それらの間でほとんどのユーザーに対応します。また、ツールを次のレベルの複雑さまで進めたい上級ユーザー向けの良い出発点になります。
まず、パラメータの意味は次のとおりです。
$LOCAL
現在のブランチ(マスターなど)内のファイルです。
$REMOTE
マージされるブランチ内のファイルです(たとえば、branch_name)。
$MERGED
部分的にマージされたファイルで、その中にマージ競合情報があります。
$BASE
コミット共有祖先のさ$LOCAL
と$REMOTE
これが含む分岐は時にそれがあったように、ファイルを言うことです、$REMOTE
最初に作成されました。
次のいずれかを使用することをお勧めします。
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
または:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
選択は、使用するかどうかである$MERGED
か$BASE
の間に$LOCAL
と$REMOTE
。
どちらの方法でもメルドはとの3つのペイン表示されます$LOCAL
と$REMOTE
、左と右のペインでいずれか$MERGED
または$BASE
中央ペインのを。
どちらの場合も、中央のペインは、マージの競合を解決するために編集する必要があるファイルです。違いは、どの編集位置を開始するかだけです。$MERGED
マージ競合情報を含む部分的にマージされたファイルを含むファイル、またはandの$BASE
共有コミット祖先。[両方の行が役立つので、両方をファイルに保存します。ほとんどの場合、この行を使用し、その行はコメント化されていますが、代わりにその行を使用したい場合は、コメントアウトを入れ替えることができます。]$LOCAL
$REMOTE
cmd
.gitconfig
$MERGED
$BASE
$BASE
ない心配:出力ファイルノートオン--output "$MERGED"
で使用されているcmd
かどうかにかかわらずの$MERGED
か$BASE
以前に使用したcmd
ライン。この--output
オプションは、競合解決ファイルを保存したいファイル名をgitにMeldに通知するだけです。Meldは、使用する$MERGED
か$BASE
、開始編集ポイントとして使用するかに関係なく、競合編集をそのファイルに保存します。
中央のペインを編集してマージの競合を解決したら、ファイルを保存してメルドウィンドウを閉じます。Gitは自動的に更新を行い、現在のブランチ(マスターなど)のファイルには、中央のペインで最終的に作成されたものが含まれます。
gitは.orig
、元のファイル名に追加することで、部分的にマージされたファイルのマージ競合情報を含むバックアップを作成します。例えばfile_name.orig
。マージに問題がないことを確認し、必要なテストを実行した後、.orig
ファイルを削除できます。
この時点で、コミットを実行して変更をコミットできます。
Meldでマージの競合を編集しているときに、Meldの使用を中止し、中央のペインにマージ解決ファイルを保存せずにMeldを終了します。gitはメッセージで応答してfile_name seems unchanged
からを尋ねWas the merge successful? [y/n]
ます。答えるn
と、マージ競合の解決が中止され、ファイルは変更されません。Meldにファイルを保存したことがある場合は、gitから警告やプロンプトが表示されないことに注意してください。[もちろん、ファイルを削除して、.orig
gitが作成したバックアップファイルで置き換えることもできます。]
マージの競合があるファイルが複数ある場合、gitは、すべてが完了するまで、それぞれに新しいMeldウィンドウを次々に開きます。それらはすべて同時に開かれるわけではありませんが、1つの競合の編集を終了してMeldを閉じると、gitは次の競合を開き、すべてのマージの競合が解決されるまで続きます。
使用テストするダミーのプロジェクトを作成するために賢明だろうgit mergetool
にそれを使用する前に、ライブのプロジェクトを。OSでcmd
行の引用符をエスケープする必要がある場合に備えて、必ずスペースを含むファイル名をテストで使用してください。以下を参照してください。
引用文字のエスケープ
一部のオペレーティングシステムでは、引用符をcmd
エスケープする必要がある場合があります。経験の浅いユーザーは、configコマンドラインはスペースを含むファイル名でテストする必要があることを覚えておいてください。スペースを含むファイル名でこれらのcmd
行が機能しない場合は、引用符をエスケープしてください。例えば
cmd = meld \"$LOCAL\" \"$REMOTE\"
場合によっては、より複雑な引用エスケープが必要になることがあります。以下の最初のWindowsパスリンクには、各引用符をトリプルエスケープする例が含まれています。それは退屈ですが、時には必要です。例えば
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Windowsパス
Windowsユーザーは、おそらくMeld cmd
ラインに追加の構成を追加する必要があります。meldc
コマンドラインからWindowsで呼び出されるように設計されているへのフルパスを使用する必要がある場合や、ラッパーを使用する必要がある場合があります。彼らは、Windowsの正しいMeld 行の設定に関する以下のリンクのStackOverflowページを読む必要がありcmd
ます。私はLinuxユーザーなので、さまざまなWindowsのcmd
行をテストすることはできず、Meldまたはへのフルパスを追加した私の例を使用しmeldc
たり、Meldプログラムフォルダーをに追加したりする以外に、この件に関する詳細情報はありませんpath
。
Meldで末尾の空白を無視する
Meldには、GUIで構成できるいくつかの設定があります。
設定Text Filters
タブには、差分を実行するときにコメントなどを無視するための便利なフィルターがいくつかあります。All whitespace
とを無視Leading whitespace
するTrailing whitespace
フィルターはありますが、無視フィルターはありません(これはMeldメーリングリストの追加として提案されていますが、私のバージョンでは使用できません)。
末尾の空白を無視することは、多くの場合、特に共同作業を行うときに非常に役立ちText Filters
ます。また、[ メルド設定]タブの単純な正規表現を使用して手動で簡単に追加できます。
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
これが皆さんのお役に立てば幸いです。