git bash: не может создать kdiff3 как difftool

Я пытаюсь использовать KDiff3 в качестве difftool в Git Bash в системе Windows 8.1, и я, по общему признанию, довольно плохо знаком с Git. Я не могу открыть KDiff3, когда пытаюсь сравнить промежуточный файл с зафиксированным файлом, и я не совсем понимаю, что с этим делать. Я нашел в Интернете указания по настройке KDiff3 в качестве инструмента слияния, и я догадался, что мне нужно сделать что-то похожее, чтобы настроить его как инструмент сравнения (я не смог найти достаточно четких указаний для новичков для настройки diff инструмент, поэтому я здесь). Это то, что я сделал после загрузки и установки KDiff3:

 git config --global diff.tool kdiff3
 git config --global difftool.kdiff3.cmd '"C:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'

Git не изобразил никаких ошибок на меня, так что, может быть, это правильно? Я полностью признаю, что не понимаю синтаксис здесь! Во всяком случае, когда я попробовал это:

 git diff HEAD

Я получаю это:

 error: cannot spawn kdiff3: No such file or directory
 external diff died, stopping at MyFile.R

Я осмотрелся и вижу некоторые ссылки на людей, у которых были похожие проблемы, когда их $PATH не был установлен правильно. Я действительно не знаю, что такое $PATH (и если бы кто-то мог просветить меня, я был бы очень благодарен), но путь, который я получил для KDiff3 (C:\Program Files\KDiff3\kidff3), определенно где kdiff3.exe находится на моей машине. Какие-либо предложения?

Заранее спасибо, и, как я уже сказал, я новичок в Git, поэтому, если я не предоставил некоторую важную информацию, пожалуйста, дайте мне знать.

2 ответа

Решение

Я предлагаю вам отказаться от второй линии конфигурации, поскольку Git bash уже определил, как использовать kdiff3. (Вы можете посмотреть на вашу установку Git Bash. Например, по моему пути я могу найти C:\Program Files (x86)\Git\libexec\git-core\mergetools\kdiff3, который является файлом конфигурации для kdiff3), Единственное, что вам нужно сделать, это вставить kdiff3 в переменную PATH.

Используйте только свою первую строку:

git config --global diff.tool kdiff3

но НЕ ваша вторая строка:

#### comment out this line:
# git config --global difftool.kdiff3.cmd '"C:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'

Чтобы исправить уже добавленный конфиг, попробуйте отредактировать ваш.gitconfig под GIT BASH

vim ~/.gitconfig

Найти раздел [difftool "kdiff3"]и удалите строку с cmd= под этим разделом. Вы также можете удалить весь раздел (т.е. также удалить строку, содержащую [difftool "kdiff3"]

Затем добавьте свой путь к kdiff3:

PATH=$PATH:"/c/Program Files/KDiff3"

Двойная кавычка необходима из-за пробела между "Program" и "Files".

Эта строка PATH может быть добавлена ​​к вашему.bashrc или.bash_profile, в зависимости от того, как вы запустите ваш bash...

--- ОБНОВИТЬ ---

Исправление: поскольку Git Bash использует системную переменную среды Windows 'PATH' + пользовательскую переменную среды Windows 'PATH'. Вышеуказанное изменение PATH сложнее (с использованием.bashrc и т. Д.). Просто измените переменные среды Windows, например, эту ссылку и / или эту ссылку

Измените вторую строку в GitBash:

git config --global diff.tool kdiff3
git config --global difftool.kdiff3.path 'c:\Program Files\KDiff3\kdiff3.exe'

Соответствующий раздел в глобальном .gitconfig выглядит так:

[diff]
    tool = kdiff3
[difftool "kdiff3"]
    path = c:\\Program Files\\KDiff3\\kdiff3.exe 

И только для того, чтобы избежать путаницы:

Сейчас git difftool HEAD катера kdiff3,

Но git diff HEAD все еще показывает изменения в GitBash.

Другие вопросы по тегам