Git и проблемы с DiffTool: на что указывают LOCAL и REMOTE?
Ive работало над тем, чтобы заставить tortoisemerge работать как опция diffftool в Git с моим файлом .gitconfig, который в настоящее время отображается:
[diff]
tool = tortoise
[difftool "tortoise"]
cmd = tortoisemerge.exe -mine:$LOCAL -base:$REMOTE
[difftool]
prompt = false
В соответствии с tortoise merge docs команда 'mine' указывает, какой файл будет показан справа, в двухстороннем режиме.
Мой вопрос в том, что на самом деле указывают переменные LOCAL и REMOTE, представленные Git? Документация немного расплывчато говорит о том, что
LOCAL устанавливается на имя временного файла, содержащего содержимое предварительного изображения diff, и REMOTE устанавливается на имя временного файла, содержащего содержимое пост-изображения diff.
Проблема возникает, когда я изменяю файл, а затем вводим 'git difftool' tortoisemerge запускается с файлом рабочего каталога на LEFT, а не справа, как я предполагаю.
Я знаю, что могу просто переключать команды "мой" и "локальный", но я пытался выяснить, что такое локальные/удаленные точки и лучший способ решить эту проблему.
Ответы
Ответ 1
Я думаю, это означает, что $LOCAL
всегда является a/whatever
на выходе diff, а $REMOTE
- b/whatever
. Другими словами, если вы это сделаете:
git difftool master experiment -- Makefile
$LOCAL
будет временным файлом, показывающим состояние Makefile
в ветки master
, а $REMOTE
будет временным файлом, отображающим его состояние в ветки experiment
.
Если вы просто запустите:
git difftool
..., который показывает разницу между индексом и рабочим деревом, поэтому для каждого файла с различиями $LOCAL
будет временным файлом, который совпадает с версией файла в индексе, а $REMOTE
будет версией файла в вашем рабочем дереве.
Ответ 2
есть 4 компонента (обратите внимание, что до этого шага вы уже выполнили локальную проверку).
- Локальная проверка, что ваше дерево git имеет: LOCAL
- Глава удаленного репозитория (который будет объединен): REMOTE
- общий предок как для LOCAL, так и для REMOTE: BASE
- Файл, который будет записан в результате: MERGED.
Ответ 3
Я использую TortoiseSvn для merge и diff и работает как ожидалось. Пока в 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\"