Должен ли редактор сообщений коммить запускать новый экземпляр, если я хочу, чтобы Git использовал его?

Я использую свой собственный редактор в качестве моего Git core.editor что у меня часто уже открыто и работает. Когда я использую его для редактирования сообщения о коммите, например, после

git commit # no message specified

сообщение по умолчанию открывается в моем редакторе правильно, как COMMIT_MSG, но коммит продолжается до того, как я что-то сделал в редакторе. Точно так же открывается автоматическое слияние MERGE_MSG, но слияние завершается с сообщением по умолчанию, прежде чем я смог его отредактировать.

Могу ли я использовать редактор, который уже запущен для редактирования сообщений о коммитах таким образом? Требуется ли для Git-вызова редактора сообщений новый экземпляр, чтобы ответить на мои изменения?

2 ответа

Решение

git ожидает завершения вызванной программы (с чистым состоянием выхода) и затем продолжает. В вашем случае редактор выходит напрямую (и показывает содержимое в уже существующем окне), а это не то, что git надеется.

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

Это зависит от вашего редактора. Протокол git (и большинство других вещей, в которых используется переменная EDITOR) используется для открытия $EDITOR, указывающего на временный файл, ожидания завершения процесса редактора, а затем использования содержимого временного файла.

Например, для TextMate установка EDITOR (или git's core.editor) в '/path/to/mate -w' скажет ему подождать, пока файл не закроется, прежде чем выходить из вспомогательного процесса mate. Ваш редактор может иметь что-то подобное.

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