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$REMOTEcmd.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から警告やプロンプトが表示されないことに注意してください。[もちろん、ファイルを削除して、.origgitが作成したバックアップファイルで置き換えることもできます。]
マージの競合があるファイルが複数ある場合、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]*$
これが皆さんのお役に立てば幸いです。