Как настроить редактор для работы с Git в Windows?

StackOverflow https://stackoverflow.com/questions/10564

  •  08-06-2019
  •  | 
  •  

Вопрос

я пробую Git в Windows.Я дошел до того, что попробовал «git commit», и получил эту ошибку:

Терминал глуп, но не определяется ни зрительный, ни редактор.Пожалуйста, предоставьте сообщение, используя вариант -m или -f.

Итак, я понял, что мне нужна переменная среды под названием EDITOR.Без проблем.Я установил его так, чтобы он указывал на Блокнот.Это почти сработало.Сообщение о фиксации по умолчанию открывается в Блокноте.Но Блокнот не поддерживает перевод пустой строки.Я вышел и получил Блокнот++, но я не могу понять, как настроить Notepad++ в качестве %EDITOR% таким образом, чтобы он работал с Git, как и ожидалось.

Я не женат на Notepad++.На данный момент мне все равно, какой редактор я использую.Я просто хочу иметь возможность введите сообщения коммита в редакторе а не командную строку (с -m).

Те из вас, кто использует Git в Windows:Какой инструмент вы используете для редактирования сообщений о коммитах и ​​что вам пришлось сделать, чтобы он заработал?

Это было полезно?

Решение

Обновление, сентябрь 2015 г. (6 лет спустя)

А последний выпуск git для Windows (2.5.3) теперь включает в себя:

Путем настройки git config core.editor notepad, пользователи теперь могу использовать notepad.exe в качестве редактора по умолчанию.
Настройка git config format.commitMessageColumns 72 будет подхвачен оболочкой блокнота и перенесет сообщение о фиксации после его редактирования пользователем.

Видеть зафиксировать 69b301b к Йоханнес Шинделин (англ.dscho).

И GIT 2.16 (Q1 2018) покажет сообщение, чтобы сообщить пользователю, что он ждет, когда пользователь закончит редактирование, когда появится редактор, на случай, если редактор открывает скрытое окно или где -то неясное, и пользователь теряется.

Видеть совершить коммит abfb04d (7 декабря 2017 г.) и зафиксировать a64f213 (29 ноября 2017 г.) автор: Ларс Шнайдер (англ.larsxschneider).
Помогли: Джунио С. Хамано (gitster).
(Объединено Джунио С. Хамано -- gitster -- в зафиксировать 0c69a13, 19 декабря 2017 г.)

launch_editor():указать, что Git ожидает ввода пользователя

Когда графический GIT_EDITOR порождается командой GIT, которая открывается и ожидает ввода пользователя (например,"git rebase -i"), Тогда окно редактора может быть скрыто другими окнами.
Пользователь может остаться смотреть на исходное окно терминала GIT, даже не осознавая, что S/он должен взаимодействовать с другим окном, прежде чем GIT сможет продолжить.К этому пользователю git появляется висят.

Распечатайте сообщение о том, что GIT ждет ввода редактора в исходном терминале и избавьтесь от него, когда редактор возвращается, если терминал поддерживает стирание последней строки


Оригинальный ответ

Я только что протестировал его с помощью git версии 1.6.2.msysgit.0.186.gf7512 и Notepad++5.3.1.

я предпочитаю нет нужно установить переменную EDITOR, поэтому я попробовал:

git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"

Это всегда дает:

C:\prog\git>git config --global --edit
"c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found
error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'.

Если я определяю npp.bat, включая:

"c:\Program Files\Notepad++\notepad++.exe" %*

и я печатаю:

C:\prog\git>git config --global core.editor C:\prog\git\npp.bat

Это просто работает из сеанса DOS, но не из оболочки git.
(не то, что с механизмом настройки core.editor, скрипт с "start /WAIT..."в нем ничего не получится, а только открыть новое DOS-окно)


Ответ Беннета упоминает возможность не добавлять скрипт, а напрямую ссылаться на саму программу между простыми кавычками.Обратите внимание на направление косых черт!Использовать / НЕТ \ для разделения папок по пути!

git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Или, если у вас 64-битная система:

git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Но я предпочитаю использовать скрипт (см. ниже):таким образом я могу играть с разными путями или разными опциями без необходимости заново регистрировать git config.


Фактическое решение (со сценарием) заключалось в том, чтобы понять, что:
то, на что вы ссылаетесь в файле конфигурации, на самом деле является оболочкой (/bin/sh) сценарий, а не сценарий DOS.

Итак, что работает:

C:\prog\git>git config --global core.editor C:/prog/git/npp.bat

с C:/prog/git/npp.bat:

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"

или

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

С этой настройкой я могу сделать 'git config --global --edit' из DOS или Git Shell, или я могу сделать 'git rebase -i ...' из DOS или Git Shell.
Команды бота запускают новый экземпляр notepad++ (отсюда и -multiInst'), и дождитесь закрытия этого экземпляра, прежде чем продолжить.

Обратите внимание, что я использую только '/', а не \'.И я установил msysgit, используя вариант 2. (Добавить git\bin каталог в PATH переменная среды, но без переопределения некоторых встроенных инструментов Windows)

Тот факт, что оболочка notepad++ называется .bat, не имеет значения.
Было бы лучше назвать его «npp.sh» и поместить в [git]\cmd однако (или в любом каталоге, на который ссылается ваша переменная среды PATH).


Смотрите также:


светогонь228 добавляет в комментариях:

Для тех, у кого возникла проблема, когда N++ просто открывает пустой файл, а git не принимает сообщение о фиксации, см. "Прерывание фиксации из-за пустого сообщения":изменить свой .bat или .sh файл, чтобы сказать:

"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Это заставит Notepad++ открыть файл временной фиксации, а не новый пустой файл.

Другие советы

Опираясь на Ответ Даррена, чтобы использовать Notepad++, вы можете просто сделать это (все в одной строке):

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Очевидно, C:/Program Files/Notepad++/notepad++.exe часть должна быть путем к исполняемому файлу Notepad++ в вашей системе.Например, это может быть C:/Program Files (x86)/Notepad++/notepad++.exe .

Для меня работает как шарм.

В любом случае, я только что поигрался с этим и обнаружил, что для меня хорошо работает следующее:

git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

Я не думаю, что CMD любит одинарные кавычки, поэтому вы должны использовать двойные кавычки, «чтобы указать строковый аргумент, встроенный в пробел».

Cygwin (который, как я считаю, является базовой платформой для Git Bash), с другой стороны, любит и то, и другое. ' и ";вы можете указать пути, подобные CMD, используя / вместо \, пока строка заключена в кавычки, т.е.в этом случае используются одинарные кавычки.

А -m переопределяет/указывает на использование нескольких редакторов, и нет необходимости в %* прикрепил на конце.

Редактировать: После обновления до vim 7.3 я пришел к выводу, что самый чистый и простой способ сделать это:

  1. Добавьте основную папку Vim на свой путь (щелкните правой кнопкой мыши «Мой компьютер» -> «Свойства» -> «Дополнительно» -> «Переменные среды»).

  2. Запустите это:git config --global core.editor "gvim --nofork '%*'"

Если вы сделаете это таким образом, то я вполне уверен, что это будет работать и с Cygwin.

Оригинальный ответ:

Даже с парой ответов, связанных с vim, у меня возникли проблемы с работой этого с gvim под Windows (без использования пакетного файла, %EDITOR% или cygwin).

То, к чему я в конечном итоге пришел, красиво и чисто, и основано на нескольких решениях, представленных здесь:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

Одна ошибка, которая заняла у меня некоторое время: это не обратная косая черта в стиле Windows, а обычная прямая косая черта.

Notepad++ работает нормально, хотя я предпочитаю использовать Блокнот, -m или даже иногда встроенную функцию «Редактировать».

Проблема, с которой вы сталкиваетесь при использовании Notepad++, связана с тем, как git запускает исполняемый файл редактора.Мое решение состоит в том, чтобы установить для EDITOR пакетный файл, а не фактический исполняемый файл редактора, который выполняет следующие действия:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

/WAIT сообщает сеансу командной строки, чтобы он остановился до тех пор, пока приложение не закроется, таким образом, вы сможете редактировать все, что душе угодно, пока git с радостью ждет вас.%* передает все аргументы пакетного файла в Notepad++.

c:\src>echo %EDITOR%
c:\tools\runeditor.bat

Word Pad!

Я доволен использованием vim, но, поскольку я пытаюсь представить Git компании, мне хотелось чего-то, что было бы у всех нас, и я обнаружил, что Wordpad, кажется, работает нормально (т.Git ждет, пока вы закончите редактирование и закроете окно).

git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'

Это использование Git Bash на msysgit;Я не пробовал из командной строки Windows (если это имеет значение).

Я также использую Cygwin в Windows, но с gvim (в отличие от терминального vim).

Чтобы выполнить эту работу, я сделал следующее:

  1. Создал однострочный пакетный файл (с именем git_editor.bat), который содержит следующее:
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. Размещено git_editor.bat в моем PATH.
  3. Набор GIT_EDITOR=git_editor.bat

Сделав это, git commit, и т. д.правильно вызовет исполняемый файл gvim.

ПРИМЕЧАНИЕ 1:А --nofork Опция gvim гарантирует, что она блокируется до тех пор, пока не будет записано сообщение о фиксации.

ЗАМЕТКА 2:Кавычки вокруг пути к gvim обязательны, если в пути есть пробелы.

ЗАМЕТКА 3:Кавычки вокруг «%*» необходимы на тот случай, если git передает путь к файлу с пробелами.

Спасибо сообществу SO...и после небольшого исследования мне удалось найти мой любимый редактор, EditPadPro, чтобы работать в качестве основного редактора с MSYSGIT 1.7.5.git и Tortoisegit v1.7.3.0 над Winxp sp3 ...

Следуя совету выше, я добавил путь к bash-скрипту для редактора кода...

git config --global core.editor c:/msysgit/cmd/epp.sh

Однако после нескольких неудачных попыток вышеупомянутых решений...Я наконец смог заставить это работать.Согласно документации EditPadPro, добавление флага «/newinstance» позволит оболочке ожидать ввода редактора....

'/новый экземпляр'флаг был ключом в моем случае...

#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"

Это первый признак более серьезных проблем.Примечательно, что у вас есть что-то, устанавливающее TERM=dumb.Другими вещами, которые не работают должным образом, являются less команда, которая говорит, что у вас нет полнофункционального терминала.Похоже, что чаще всего это происходит из-за того, что для TERM установлено какое-то значение в глобальных переменных среды Windows.У меня проблема возникла, когда я установил Strawberry Perl. Некоторая информация об этом находится на странице ошибка msysgit для этой проблемы а также несколько решений.

Первое решение — исправить это в вашем ~/.bashrc, добавив:

export TERM=msys

Вы можете сделать это из командной строки Git BASH следующим образом:

echo "export TERM=msys" >> ~/.bashrc

Другое решение, которое в конечном итоге я сделал, потому что меня не волнуют причины, по которым Strawberry Perl добавил TERM=dumb в настройки моей среды, - это пойти и удалить TERM=dumb как направлено в этом комментарии к отчету об ошибке msysgit.

Панель управления/Система/Усовершенствованная/Экологические переменные ...(или аналогично, в зависимости от вашей версии Windows), где в Windows установлены переменные липкой среды.По умолчанию термин не установлен.Если термин установлен там, то вы (или одна из установленных вами программ - например.Strawberry Perl) установил его.Удалите эту настройку, и все будет в порядке.

Аналогично, если вы используете Strawberry Perl и заботитесь о клиенте CPAN или что-то в этом роде, вы можете оставить TERM=dumb в одиночку и использовать unset TERM в вашем файле ~/.bashrc, что будет иметь эффект, аналогичный установке явного термина, как указано выше.

Конечно, все остальные решения верны, и вы можете использовать их. git config --global core.editor $MYFAVORITEEDITOR чтобы убедиться, что git использует ваш любимый редактор, когда ему нужно запустить его для вас.

Для Атом ты можешь сделать

git config --global core.editor "atom --wait"

и подобное для VSCode

git config --global core.editor "code --wait"

который откроет Атом или VSCode окно, через которое вы можете совершить фиксацию,

или для возвышенный

git config --global core.editor "subl -n -w"

Отредактируйте файл .gitconfig в папке c:\Users\YourUser и добавьте:

[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'

Вим/Гвим у меня хорошо работает.

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

У меня PortableGit 1.6 работал нормально, но после обновления до версии PortableGit-1.7 возникли проблемы.Некоторые команды git нормально открывают Notepad++.exe, но некоторые нет, особенно git перебазировать ведет себя по-другому.

Проблема в том, что некоторые команды запускают процесс cmd Windows, некоторые используют процесс cmd unix.Я хочу назначить атрибуты запуска редактору Notepad++, поэтому мне нужен настроенный скрипт.Мое решение таково.

1) Создайте сценарий для запуска соответствующего текстового редактора.Скрипт выглядит странно, но обрабатывает варианты как для Windows, так и для Unix.c:/PortableGit/cmd/git-editor.bat

#!/bin/sh
#open a new instance

function doUnix() {
  "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar $*
  exit
}

doUnix $*

:WINCALL
"c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar %*

2) Установите глобальный сценарий переменной Core.editor был сохранен в папке GIT/CMD, поэтому он уже находится в пути GitConsole, это обязательно, поскольку полный путь может работать должным образом.

git config --global core.editor "git-editor.bat"

Теперь я могу бежать git совершить -a и git rebase -i master команды.Попробуйте, если у вас возникли проблемы с инструментом Git для Windows.

Я использую git на нескольких платформах, и мне нравится использовать на всех одни и те же настройки git.(На самом деле, все мои файлы конфигурации находятся под контролем выпуска с помощью git, и я разместил клон репозитория git на каждой машине.) Решение, которое я придумал, следующее:

я установил свой редактор к редактор

git config --global core.editor giteditor

Затем я создаю символическую ссылку под названием редактор который находится в моем ПУТЬ.(у меня есть личный мусорное ведро каталоге, но где угодно в ПУТЬ работает.) Эта ссылка указывает на мой текущий редактор.На разных машинах и разных платформах я использую разные редакторы, а это значит, что мне не нужно менять свою универсальную конфигурацию git (.gitconfig), просто ссылка, которая редактор указывает на.

Символические ссылки обрабатываются всеми известными мне операционными системами, хотя они могут использовать разные команды.Для Linux вы используете пер -с.Для Windows вы используете cmd встроенный мклинк.У них разный синтаксис (который вам следует поискать), но на самом деле все работает одинаково.

На основе ФонК предложение выше, это сработало для меня (сводило меня с ума):

git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"

Пропуск -wait может вызвать проблемы, особенно если вы работаете с идентификаторами gerrit и изменений, которые необходимо вручную копировать в конец сообщения о коммите.

Это моя установка для использования Гиани в качестве редактора git:

git config --global core.editor C:/path/to/geany.bat

со следующим содержимым в geany.bat:

#!/bin/sh
"C:\Program Files\Geany\bin\Geany.exe" --new-instance "$*"

Он работает как в консоли DOS, так и в msysgit.

Я использую Cygwin в Windows, поэтому использую:

export EDITOR="emacs -nw"

А -nw для no-windows, т.е.скажите Emacs не пытаться использовать X11.

Сочетания клавиш Emacs у меня не работают из оболочки Windows, поэтому я бы использовал это только из оболочки Cygwin...(рекомендуется rxvt.)

Я предпочитаю использовать emacs.Настроить его может быть немного сложнее.

  1. Загрузите emacs и распакуйте его где-нибудь, например c:\emacs.
  2. Бегать c:\emacs\bin\addpm.exe.Вам нужно щелкнуть правой кнопкой мыши и выбрать «Запуск от имени администратора», если вы используете Windows Vista или более позднюю версию.Это поместит исполняемые файлы на ваш путь.
  3. Добавлять (server-start) где-то в твоем .emacs файл.См. Часто задаваемые вопросы по Emacs для Windows за советом, где разместить .emacs файл.
  4. git config --global core.editor emacsclientw

Git теперь будет открывать файлы в существующем процессе emacs.Вам придется запустить этот существующий процесс вручную из c:\emacs\bin\runemacs.exe.

Мне было трудно заставить git взаимодействовать с Wordpad, KomodoEdit и почти со всеми другими редакторами, которые я ему предоставляю.Большинство из них открыты для редактирования, но git явно не ждет сохранения/закрытия.

В качестве костыля я просто делал т.е.

git commit -m "Fixed the LoadAll method"

чтобы дело двигалось.Обычно мои сообщения о коммитах делаются немного короче, чем они должны быть, но очевидно, что над версией git для Windows еще предстоит поработать.

GitGUI тоже не так уж и плох.Это требует некоторой ориентации, но после этого все работает довольно хорошо.

мне нужно было сделать оба из следующего, чтобы заставить git запустить Notepad++ в Windoze:

-добавьте следующее в .gitconfig:

editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin

-измените ярлык для запуска оболочки git bash для запуска от имени администратора, а затем используйте его для запуска оболочки git bash.Я предполагал, что пункт контекстного меню «Git Bash здесь» не запускает npp с необходимыми разрешениями.

После выполнения обоих вышеперечисленных действий все заработало.

Кажется, что Git не найдет редактор, если в пути есть пробелы.Поэтому вам придется поместить командный файл, упомянутый в Ответ Патрика в путь без пробелов.

У меня только что возникла та же проблема, и я нашел другое решение.я получал

error: There was a problem with the editor 'ec'

у меня есть VISUAL=ec, и пакетный файл с именем ec.bat на моем пути, который содержит одну строку:

c:\emacs\emacs-23.1\bin\emacsclient.exe %*

Это позволяет мне редактировать файлы из командной строки с помощью ec <filename>, а наличие визуального набора означает, что большинство Unixy-программ тоже его подхватывают.Кажется, что Git ищет путь иначе, чем другие мои команды - когда я посмотрел на git commit в Прокмон Я видел, как он просматривал каждую папку на пути к ec и для ec.exe, но не для ec.bat.Я добавил еще одну переменную среды (GIT_EDITOR=ec.bat) и все было хорошо.

Мне удалось заставить работать версию среды, установив переменную EDITOR в кавычках и /:

EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"

Я использую GitHub для Windows, это хороший визуальный вариант.Но я также предпочитаю командную строку, поэтому, чтобы она работала, когда я открываю репозиторий в оболочке Git, я просто установил следующее:

git config --global core.editor vim

который отлично работает.

Это работает для Powershell и cmder-1.2 (при использовании с powershell).В ~/.gitconfig

[core]
    editor = 'c:/program files/sublime text 3/subl.exe' -w

Как сделать Sublime Text редактором по умолчанию для Git?

Возрождаю старую тему, но нашел прекрасное простое решение. здесь - хотя может быть ошибка в пути, по которому нужно скопировать указанный автором файл "subl".Я использую Win 7 x64, и мне пришлось поместить файл «subl» в свой /Git/cmd/ папку, чтобы она заработала.Хотя это работает как шарм.

АТОМ и Windows 10

  1. Щелкните правой кнопкой мыши значок Atom на рабочем столе и выберите «Свойства».
  2. Скопирован путь к местоположению «Начать с».
  3. Посмотрел туда с помощью проводника Windows и нашел «atom.exe».
  4. Набрал это в git bash:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

Примечание:я поменял все \ для / .Я создал .bashrc в своем домашнем каталоге и использовал / установить свой домашний каталог, и это сработало, поэтому я предположил / будет путь.

При использовании удаленно подключенного домашнего диска (sambashare, nfs,...) ваш ~/.git Папка является общей для всех систем, что может привести к ряду проблем.Поэтому я предпочитаю сценарий для определения правильного редактора для правильной системы:

#!/usr/bin/perl
# Detect which system I'm on and choose the right editor
$unamea = `uname -a`;
if($unamea =~ /mingw/i){
    if($unamea =~ /devsystem/i){#Check hostname
        exec('C:\Program Files (x86)\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
    if($unamea =~ /testsystem/i){
        exec('C:\Program Files\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
}
$MCEDIT=`which mcedit`;
if($MCEDIT =~ /mcedit/){
    exec($MCEDIT, @ARGV);
}
$NANO=`which nano`;
if($NANO =~ /nano/){
    exec($NANO, @ARGV);
}
die "You don't have a suitable editor!\n";

Можно было бы рассмотреть простой сценарий оболочки, но я использовал Perl, поскольку Perl поставляется с msysgit, и ваши Unixoid-системы также его предоставляют.Вставляем скрипт /home/username/bin, который следует добавить к PATH в .bashrc или .profile.После добавления с помощью git config --global core.editor giteditor.pl у вас есть подходящий редактор, где бы вы ни находились.

У меня это работает с использованием Cygwin и Textpad 6 (EDIT:также работает с Textpad 5, если вы вносите очевидные изменения в сценарий), и, предположительно, эту модель можно использовать и для других редакторов:

~/.gitconfig:

[core]
    editor = ~/script/textpad.sh

~/script/textpad.sh

#!/bin/bash

APP_PATH=`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`
FILE_PATH=`cygpath -w $1`

"$APP_PATH" -m "$FILE_PATH"

Этот однострочник также работает:

~/script/textpad.sh (вариант 2):

"`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`"

Это сработало для меня:

  1. Добавьте каталог, содержащий исполняемый файл редактора, в ваш ПУТЬ переменная.(например. «C:\Program Files\Sublime Text 3»)
  2. Перезагрузите компьютер.
  3. Изменить core.editor глобальная переменная git в имя исполняемого файла редактора без расширения '.Exe' (например.git config --global core.editor sublime_text)

Вот и все!

ПРИМЕЧАНИЕ: Sublime Text 3 — это редактор, который я использовал для этого примера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top