web-dev-qa-db-ja.com

GitとDiffToolの問題:LOCALとREMOTEは何を指しますか?

私は現在TortoisemergeがGitのdifftoolオプションとして機能するように取り組んでおり、現在.gitconfigファイルが表示されています:

   [diff]
        tool = tortoise

    [difftool "tortoise"]
        cmd = tortoisemerge.exe -mine:$LOCAL -base:$REMOTE

    [difftool]
        Prompt = false

tortoise merge docs によると、「mine」コマンドは、どのファイルが右側に表示されるかを双方向の差分で示します。

私の質問は、GITが提供するLOCALおよびREMOTE変数は実際に何を指しているのですか? documentation は少し曖昧で、

LOCALは、差分プレイメージの内容を含む一時ファイルの名前に設定され、REMOTEは、差分ポストイメージの内容を含む一時ファイルの名前に設定されます。

ファイルを変更し、「git difftool」と入力すると問題が発生します。tortoisemergeは、想定どおりの右側ではなく、左側の作業ディレクトリファイルで開始されます。私は単に「私の」コマンドと「ローカル」コマンドを切り替えることができることを知っていますが、ローカル/リモートが指すものとこの問題を解決する最良の方法を見つけようとしていました

45
x1886x

$LOCALは常にa/whateverはdiff出力で、$REMOTE それは b/whatever。つまり、次の場合:

 git difftool master experiment -- Makefile

$LOCALは、Makefileブランチのmasterの状態を示す一時ファイルになり、$REMOTEは、experimentブランチの状態を示す一時ファイルになります。

単に実行する場合:

git difftool

...これは、インデックスと作業ツリーの違いを示しているので、違いのあるファイルごとに、$LOCALは、インデックス内のファイルのバージョンと同じ一時ファイルになりますが、$REMOTEは、作業ツリー内のファイルのバージョンになります。

10
Mark Longair

これには4コンポーネントがあります(このステップの前に、既にローカルチェックインを行っていることに注意してください)。

  • Gitツリーのローカルチェックイン:[〜#〜] local [〜#〜]
  • リモートリポジトリのヘッド(マージされる):[〜#〜] remote [〜#〜]
  • lOCALとREMOTEの両方の共通の祖先:[〜#〜] base [〜#〜]
  • 結果として書き込まれるファイル:[〜#〜] merged [〜#〜]
181
Sandeep

私はTortoiseSvnをmergeとdiffに使用しており、期待どおりに動作しています。差分表示中、右側に作業コピーが表示されます。 TortoiseSvnでの.gitconfigは次のとおりです

[diff]
    tool = tortoise


[merge]
    tool = tortoise


[mergetool "tortoise"]
    cmd = TortoiseMerge.exe -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[difftool "tortoise"]
    cmd = tortoisemerge.exe -mine:\"$REMOTE\" -base:\"$LOCAL\"
1
Anup