сбой git mergetool

после слияния я хочу использовать git mergetool для решения проблемы, но это не удается с любым инструментом, который я указываю:

git mergetool                                                                                                          
 merge tool candidates: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff emerge
Merging:
main.c

Normal merge conflict for 'main.c':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (kdiff3):
merge of main.c failed

инструмент, который я указываю, похоже, вообще не запускается.

выход

git config --list

merge.tool=kdiff3
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

2 ответов


kdiff3 может не установлен в вашей системе. Если это так, пожалуйста, проверьте, доступен ли он через ваш PATH переменная

попробовать

git config --global merge.tool <your_merge_program>

кроме того, вы можете указать свою операционную систему и доступные программы слияния


обратите внимание, что git 2.10 предложит лучший статус выхода для идентификации проблемы установки инструмента diff/merge.

посмотреть совершить 45a4f5d (15 авг 2016) by Иоанн Учета (johnkeeping).
(слитый Junio C Hamano -- gitster -- на совершить 331f06d, 19 авг 2016)

difftool: всегда соблюдайте коды выхода с фатальной ошибкой

на данный момент difftool " код выхода доверия" логика всегда подавляет состояние выхода утилиты diff, которую мы вызываем.
Это полезно, потому что мы не хотим выходить только потому, что diff вернул "1", потому что файлы отличаются, но это сбивает с толку, если оболочка возвращает ошибку, потому что выбранная утилита diff не найдена.

в POSIX

по крайней мере, bash и dash следуют этой спецификации, в то время как утилиты diff обычно используют "1 " для статуса выхода мы хотим игнорировать.

обрабатывать любое значение 126 или больше как специальное значение, указывающее, что произошла какая-то фатальная ошибка.