Как заставить git работать с vimdiff и trustExitCode - PullRequest
4 голосов
/ 30 мая 2011

Я настроил vimdiff как mergetool для git. Всякий раз, когда я делаю слияние, git никогда не спрашивает, было ли слияние успешным. Я также попробовал:

git config --global mergetool.vimdiff.trustExitCode false

без разницы. Тем не менее, после того, как я оставлю vimdiff с :wqa, у меня не возникнет никаких вопросов, и мне придется вручную удалять устаревшие *.orig файлы.

Может быть связано: Когда я отображаю настройки конфигурации trustExitCode больше не отображается с верблюдом:

git config --global -l

core.editor=vim
core.autocrlf=input
merge.tool=vimdiff
alias.co=checkout
alias.st=status
color.diff=auto
color.status=auto
color.branch=auto
mergetool.vimdiff.trustexitcode=false

Как это можно исправить?

Ответы [ 3 ]

4 голосов
/ 15 марта 2013

Я знаю, что это старый вопрос, но я столкнулся с той же проблемой.

Часть, касающаяся удаления устаревших файлов резервных копий вручную, может быть исправлена ​​с помощью:

git config --global mergetool.vimdiff.keepBackup false

Я думаю,Другая проблема заключается в том, что trustExitCode не делает то, что вы думаете:

mergetool.<tool>.trustExitCode

Для пользовательской команды слияния укажите, будет ли код выхода команды слиянияможет использоваться для определения успешности слияния.Если для этого параметра не задано значение true, проверяется временная метка целевого файла слияния, и слияние считается успешным, если файл был обновлен, в противном случае пользователю предлагается указать успешное слияние.

Таким образом, даже если для этого параметра установлено значение false, он будет запрашивать вас только в том случае, если файл не был изменен.

3 голосов
/ 03 сентября 2011

Я знаю, что на самом деле это не ответ на ваш вопрос, но я думаю, что вы должны проверить плагин vim под названием Fugitive .

Есть даже скринкаст на разрешении конфликтов слияния с помощью vimdiff

Он в основном предлагает все (или большую часть) функциональности git, которую вы найдете в терминале, но в vim таким образом, который действительно имеет смысл. Надеюсь, что это помогает и удачи: D.

1 голос
/ 24 августа 2018

С установленным trustExitCode (который, по-видимому, используется по умолчанию для vimdiff), вам потребуется выйти из vim с ненулевым кодом выхода, чтобы git распознал файлы как не слитые.

В vim это означает использование :cq[uit] для выхода. Обратите внимание, что :cq ведет себя как :qall!, то есть он молча отбрасывает все несохраненные изменения и выходит из vim (с ненулевым кодом выхода).

При этом (git v2.14.2.windows.1; git bash; vim 8.0.606) git пишет

merge of exampleFile.cpp failed
Continue merging other unresolved paths [y/n]?

И он оставляет файл в конфликтном состоянии. Если бы я завершил работу с :qall!, конфликт мог бы все еще быть в файле, но git пометил бы его как разрешенный.

Что касается того, почему git все еще принимает его как разрешенное при использовании trustExitCode = false, я немного не уверен. При открытии файла с git mergetool отметка времени обновляется до текущего времени, что, по-видимому, указывает на то, что vimdiff (или git) касается файла. Это может быть причиной того, что git не будет запрашивать подтверждения разрешения конфликта, поскольку он видит обновленную временную отметку и предполагает, что файл был разрешен.

...