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

Я пробую Git в Windows . Я дошел до попытки "git commit" и получил эту ошибку:

Терминал тупой, но не определен ни ВИЗУАЛЬНЫЙ, ни РЕДАКТОР. Пожалуйста, предоставьте сообщение, используя опцию -m или -F.

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

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

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

Ответов (25)

Решение

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

Последний выпуск мерзавца-для-Windows , (2.5.3) теперь включает в себя:

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

См совершить 69b301b по Johannes Schindelin ( dscho) .

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

Смотрите фиксацию abfb04d (7 декабря 2017 г.) и фиксацию a64f213 (29 ноября 2017 г.) Ларсом Шнайдером ( larsxschneider) .
Помощник: Junio ​​C Hamano ( gitster) .
(Объединено Junio ​​C Hamano - gitster- в коммите 0c69a13 , 19 декабря 2017 г.)

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

Когда графический GIT_EDITORобъект создается командой Git, которая открывается и ожидает ввода пользователя (например, " git rebase -i"), тогда окно редактора может быть закрыто другими окнами.
Пользователь может смотреть в исходное окно терминала Git, даже не осознавая, что ему нужно взаимодействовать с другим окном, прежде чем 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сценарием shell ( ) , а не сценарием 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).


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


lightfire228 добавляет в комментариях :

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

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

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

Это работает для меня с использованием 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`"

Изменить: после обновления до 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. Это обычные косые черты.

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

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

Вот и все!

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

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

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

git config --global core.editor giteditor

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

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

Для Atom вы можете сделать

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

и аналогичный для Visual Studio Code

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

который откроет окно кода Atom или Visual Studio, через которое вы сможете выполнить фиксацию,

или для Sublime Text :

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

Вот решение с Cygwin:

#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
  1. Если нет пути, не пройди путь

  2. Если путь пуст, передать пустой путь

  3. Если путь не пустой, конвертируйте в формат Windows.

Затем я установил эти переменные:

export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
  1. РЕДАКТОР позволяет скрипту работать с Git

  2. GIT_EDITOR позволяет скрипту работать с командами Hub

Источник

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

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

Чтобы заставить Git запускать Notepad ++ в Windows, мне нужно было выполнить оба следующих действия:

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

    editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
    
  • Измените ярлык, чтобы запустить оболочку Git Bash от имени администратора, а затем используйте ее для запуска оболочки Git Bash. Я предполагал, что пункт контекстного меню «Git Bash here» не запускал Notepad ++ с необходимыми разрешениями.

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

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

Основываясь на ответе Даррена , чтобы использовать 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 сотрудничать с WordPad , Komodo Edit и почти со всеми остальными редакторами, которые я ему даю. Большинство из них открыты для редактирования, но Git явно не ждет, пока произойдет сохранение / закрытие.

В качестве костыля я только что делал то есть

git commit -m "Fixed the LoadAll method"

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

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

Notepad ++ работает нормально, хотя я предпочитаю использовать 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

Vim / gVim у меня хорошо работает.

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

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

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

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

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

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

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

export EDITOR="emacs -nw"

Это -nw для no-windows, т.е. сказать Emacs, чтобы он не пытался использовать X Window .

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

Я также использую 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 передает путь к файлу с пробелами.

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

Проблема в том, что некоторые команды запускают процесс 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 commit -a и git rebase -i master . Попробуйте, если у вас есть проблемы с инструментом Git Windows.

Комп !

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

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

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

Это моя установка для использования Geany в качестве редактора для 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.

Это один из симптомов более серьезных проблем. Примечательно, что у вас что-то настраивается 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 устанавливаются липкие переменные среды. По умолчанию TERM не установлен. Если там установлен TERM, значит, вы (или одна из установленных вами программ - например, Strawberry Perl) установили его. Удалите этот параметр, и все будет в порядке.

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

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

При использовании удаленно смонтированного домашнего диска ( общий ресурс Samba , 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, поскольку он поставляется с msysgit, и ваши Unix-подобные системы обычно также предоставляют его. Вставляем скрипт /home/username/bin, который нужно добавить PATH в .bashrc или .profile . После добавления у git config --global core.editor giteditor.pl вас будет нужный редактор, где бы вы ни находились.

Благодаря сообществу Stack Overflow ... и небольшому исследованию я смог заставить мой любимый редактор EditPad Pro работать в качестве основного редактора с msysgit 1.7.5.GIT и TortoiseGit v1.7.3.0 поверх Windows XP SP3. ..

Следуя приведенному выше совету, я добавил путь к сценарию Bash для редактора кода ...

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

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

Флаг ' / newinstance ' был ключевым в моем случае ...

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

Основываясь на предложении VonC , это сработало для меня (сводило меня с ума):

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

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

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

Инструмент , который я считаю наиболее полезным и как мой мерзавца редактор и мой редактор кода общего назначения , как в Windows , и Linux, является Sublime Text 3 . Он работает очень хорошо, но требует небольшой настройки, чтобы сделать его правильным, поэтому я полностью задокументировал это здесь:

Боковое примечание о моем основном редакторе: для больших проектов я использую Eclipse в качестве основного редактора и Sublime Text 3 в качестве редактора git и дополнительного редактора файлов, когда мне нужно использовать его расширенные функции, такие как режим с несколькими курсорами, вертикальный / столбец режим выбора и т. д. Для малых и средних проектов я использую только Sublime Text 3. Инструкции по установке Eclipse см. В моем PDF-документе здесь .