Проблемы с Git и DiffTool: на что указывают LOCAL и REMOTE? - PullRequest
45 голосов
/ 26 марта 2011

Я работал над тем, чтобы tortoisemerge работал как опция difftool в Git, и мой файл .gitconfig в данный момент показывает:

   [diff]
        tool = tortoise

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

    [difftool]
        prompt = false

Согласно документам по слиянию черепах команда 'mine' указывает, какой файл будет показан справа, в двухсторонней разнице.

Мой вопрос заключается в том, на что в действительности указывают переменные LOCAL и REMOTE, предоставляемые GIT? Документация немного расплывчата, что

LOCAL - это имя временного файла, содержащего содержимое предварительного изображения diff, а REMOTE - имя временного файла, содержащего содержимое пост-изображения diff.

Проблема возникает, когда я изменяю файл, а затем вводу 'git difftool' tortoisemerge запускается с файлом рабочего каталога на LEFT, а не правильным, как я предполагаю. Я знаю, что могу просто переключать «мои» и «локальные» команды, но я пытался выяснить, на что указывает локальный / удаленный и как лучше решить эту проблему

Ответы [ 3 ]

181 голосов
/ 26 марта 2011

есть 4 компонента для этого (обратите внимание, что до этого шага вы уже выполнили локальную проверку).

  • локальная проверка того, что ваше git-деревоимеет: LOCAL
  • Глава удаленного репозитория (который будет объединен): REMOTE
  • общий предок как LOCAL, так и REMOTE: BASE
  • Файл, который будет записан в результате: MERGED .
10 голосов
/ 26 марта 2011

Я думаю, это означает, что $LOCAL - это всегда a/whatever в выводе diff, тогда как $REMOTE - это b/whatever.Другими словами, если вы сделаете:

 git difftool master experiment -- Makefile

$LOCAL будет временным файлом, показывающим состояние Makefile в ветви master, тогда как $REMOTE будет временным файлом, показывающимего состояние в ветви experiment.

Если вы просто запустите:

git difftool

..., которая показывает разницу между индексом и вашим рабочим деревом, поэтому для каждого файла сРазличия: $LOCAL будет временным файлом, который совпадает с версией файла в индексе, а $REMOTE будет версией файла в вашем рабочем дереве.

1 голос
/ 21 февраля 2013

Я использую TortoiseSvn для слияния и сравнения и работает как положено.Находясь в diff, он показывает мою рабочую копию справа.Мой .gitconfig с TortoiseSvn выглядит следующим образом

[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\"
...