Я тестирую Git в Windows. Я дошел до того, что пытался "git commit", и я получил эту ошибку:
Терминал немой, но нет VISUAL и РЕДАКЦИЯ определена. Пожалуйста, поставьте сообщение с использованием опции -m или -F.
Итак, я понял, что мне нужна переменная окружения EDITOR. Нет проблем. Я установил его в "Блокнот". Это сработало почти. Сообщение о фиксации по умолчанию открывается в Блокноте. Но "Блокнот" не поддерживает горячие линии. Я вышел и получил Notepad ++, но я не могу понять, как настроить Notepad ++ как %EDITOR%
таким образом, чтобы он работает с Git, как ожидалось.
Я не женат на Notepad ++. На данный момент я не против, какой редактор я использую. Я просто хочу иметь возможность печатать сообщения о фиксации в редакторе, а не в командной строке (с -m
).
Те из вас, кто использует Git в Windows: какой инструмент вы используете для редактирования сообщений о фиксации и что вам нужно сделать, чтобы заставить его работать?
Обновление сентябрь 2015 года (6 лет спустя)
последняя версия git -for-Windows (2.5.3) теперь включает в себя:
Конфигурируя
git config core.editor notepad
, пользователи теперь могут использоватьnotepad.exe
в качестве своего редактора по умолчанию.
Конфигурированиеgit config format.commitMessageColumns 72
будет подхвачено оболочкой блокнота и обматывает сообщение об окончании после того, как пользователь отредактирует его.
См. commit 69b301b Йоханнес Шинделин (dscho
).
Оригинальный ответ
Я только что протестировал его с помощью 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, script с "start /WAIT...
" в нем не работает, а только открывает новое окно DOS)
Bennett answer упоминает о возможности избежать добавления script, но напрямую ссылаться на самую программу между простыми кавычками:
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"
Но я предпочитаю использовать script (см. ниже): таким образом я могу играть с разными путями или разными опциями, не регистрируясь снова git config
.
Фактическое решение (с script) состояло в том, чтобы понять, что:
то, что вы называете в конфигурационном файле, на самом деле является оболочкой (/bin/sh
) script, а не DOS script.
Итак, что работает:
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.
Команды Bot вызовут новый экземпляр 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 ++ открывает файл temp commit, а не пустой новый.
На основе Darren answer, чтобы использовать Notepad ++, вы можете просто сделать это (все в одной строке):
В 32-разрядной ОС:
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"
Очевидно, что часть C:/Program Files/Notepad++/notepad++.exe
должна быть путь к исполняемому файлу Notepad ++ в вашей системе. Например, в Windows 7 это будет 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
переопределяет/указывает на использование нескольких редакторов, и нет необходимости в %*
, прикрепленном к концу.
git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -m"
работает для меня как git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -m"
.
Изменить: После обновления до vim 7.3 я пришел к выводу, что самый простой и простой способ сделать это:
Добавьте главную папку Vim на свой путь (щелкните правой кнопкой мыши Мой компьютер → Свойства → Дополнительно → Переменные среды)
Запустите это: 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, они являются нормальными косыми чертами.
Program Files(x86)
, вам, очевидно, нужно изменить путь.
Notepad ++ работает отлично, хотя я предпочитаю придерживаться Notepad, -m или даже иногда встроенного "edit".
Проблема, с которой вы сталкиваетесь с помощью Notepad ++, связана с тем, как git запускает исполняемый файл редактора. Мое решение состоит в том, чтобы установить EDITOR в пакетный файл, а не на исполняемый файл редактора, который выполняет следующие действия:
start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*
/WAIT сообщает сеансу командной строки останавливаться, пока приложение не выйдет, поэтому вы сможете редактировать свой сердечный контент, пока git с радостью ждет вас. % * передает все аргументы в пакетный файл через Notepad ++.
c:\src>echo %EDITOR%
c:\tools\runeditor.bat
Wordpad!
Я счастлив использовать vim, но, поскольку я пытаюсь представить Git компании, я хотел что-то, что у всех было бы, и обнаружил, что Wordpad, похоже, работает нормально (т.е. Git ждет вы закончите редактирование и закройте окно).
git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'
Это использование Git Bash на msysgit; Я не пробовал из командной строки Windows (если это имеет значение).
Я также использую Cygwin в Windows, но с gvim
(в отличие от терминального vim
).
Чтобы выполнить эту работу, я сделал следующее:
git_editor.bat
), который содержит следующее: "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
git_editor.bat
в моем PATH
.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 script для редактора кода...
git config --global core.editor c:/msysgit/cmd/epp.sh
Однако после нескольких неудачных попыток вышеупомянутых решений... наконец, я смог получить эту работу. В документации EditPadPro добавление флага '/newinstance' позволит оболочке ждать ввода редактора....
Флаг </новый "был ключом в моем случае...
#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"
/newinstance
имели ровно одну косую черту. Это вполне нормально для приложений Windows. Если вы вызываете EditPad из оболочки UNIX, вам нужно будет использовать любой механизм, предлагаемый вашей оболочкой, чтобы избежать прямого слеша, чтобы он не рассматривал переключатель как абсолютный путь и передавал один буквенный слеш в командную строку EditPad.
Это один из симптомов больших проблем. Примечательно, что у вас есть что-то, устанавливающее 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.
Control Панель/System/Advanced/Окружающая среда Переменные... (или аналогичные, в зависимости от ваша версия Windows), где установлены липкие переменные среды в Windows. По умолчанию TERM не задавать. Если TERM установлен там, то вы (или одна из программ, которые у вас есть установлен - например. Strawberry Perl) имеет установить его. Удалите эту настройку, и вы должно быть хорошо.
Аналогично, если вы используете Strawberry Perl и заботитесь о клиенте CPAN или что-то в этом роде, вы можете оставить только TERM=dumb
и использовать unset TERM
в вашем файле ~/.bashrc, который будет иметь аналогичный эффект для установки явного как указано выше.
Конечно, все остальные решения верны, что вы можете использовать git config --global core.editor $MYFAVORITEEDITOR
, чтобы убедиться, что Git использует ваш любимый редактор, когда ему нужно его запустить.
Vim/Gvim хорошо работает для меня.
>echo %EDITOR%
c:\Vim\Vim71\vim.exe
Я использую git на нескольких платформах, и мне нравится использовать те же настройки git для всех них. (Фактически, у меня есть все мои файлы конфигурации в разделе управления выпуском с помощью git и класть кэш-хранилище git на каждой машине.) Решение, которое я придумал, следующее:
Я установил свой редактор в giteditor
git config --global core.editor giteditor
Затем я создаю символическую ссылку под названием giteditor, которая находится в моей PATH. (У меня есть личная директория bin, но в любом месте PATH). Эта ссылка указывает на мой текущий редактор выбора. На разных компьютерах и на разных платформах я использую разные редакторы, поэтому это означает, что мне не нужно изменять мою универсальную конфигурацию git (.gitconfig), просто ссылку, которая giteditor указывает на.
Символьные ссылки обрабатываются каждой операционной системой, о которой я знаю, хотя они могут использовать разные команды. Для Linux вы используете ln -s. Для Windows используется cmd встроенный mklink. Они имеют разные синтаксисы (которые вы должны искать), но все работает одинаково, действительно.
error: cannot spawn giteditor: No such file or directory
У меня был режим PortableGit 1.6, но после обновления до версии PortableGit-1.7 у Windows были проблемы. Некоторые команды git открывают Notepad ++. Exe отлично, но некоторые нет, особенно git rebase ведет себя по-разному.
Проблема в том, что некоторые команды запускают процесс windows cmd, а некоторые используют процесс unix cmd. Я хочу, чтобы атрибуты запуска были написаны в редакторе Notepad ++, поэтому вам нужно настроить script. Мое решение таково.
1) Создайте script для запуска соответствующего текстового редактора. script выглядит странно, но обрабатывает как окна, так и 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 Script был сохранен в папке git/cmd, поэтому он уже находится в пути gitconsole, это обязательно, поскольку полный путь может работать неправильно.
git config --global core.editor "git-editor.bat"
Теперь я могу выполнить команды git commit -a и git rebase -i master. Попробуйте, если у вас возникли проблемы с инструментом Windows git.
Для Atom вы можете сделать
git config --global core.editor "atom --wait"
и аналогичный для VSCode
git config --global core.editor "code --wait"
который откроет окно Atom или VSCode, через которое вы сможете совершить,
или для Sublime
git config --global core.editor "subl -n -w"
Основываясь на VonC выше, это сработало для меня (сводило меня с ума):
git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"
Опускание -wait
может вызвать проблемы, особенно если вы работаете с gerrit и идентификаторами изменений, которые необходимо вручную скопировать в нижнюю часть сообщения о фиксации.
Это моя настройка для использования 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.
Я использую Cygwin для Windows, поэтому я использую:
export EDITOR="emacs -nw"
-nw
предназначен для no-windows
, то есть Emacs не пытается использовать X11.
Ключи Emacs не работают для меня из оболочки Windows, поэтому я бы использовал это только из оболочки Cygwin... (рекомендуется rxvt.)
Мне было трудно получить git для сотрудничества со словом, KomodoEdit и почти всеми другими редакторами, которые я им даю. Большинство из них открыты для редактирования, но git явно не дожидается, когда произойдет сохранение/закрытие.
Как костыль, я только что делал.
git commit -m "Fixed the LoadAll method"
чтобы все двигалось. Как правило, мои сообщения о фиксации немного короче, чем они, вероятно, должны быть, но ясно, что в версии Windows git есть определенная работа.
GitGUI также не так уж плох. Это требует немного ориентации, но после этого он работает достаточно хорошо.
Измените файл .gitconfig в папке c:\Users\YourUser и добавьте:
[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'
Я предпочитаю использовать emacs. Как настроить его может быть немного сложнее.
c:\emacs
.c:\emacs\bin\addpm.exe
. Вам нужно щелкнуть правой кнопкой мыши и "Запуск от имени администратора", если вы используете Windows Vista или выше. Это поместит исполняемые файлы в ваш путь.(server-start)
где-нибудь в вашем файле .emacs
. См. Часто задаваемые вопросы по Emacs Windows, чтобы узнать, где разместить ваш файл .emacs
.git config --global core.editor emacsclientw
Git теперь откроет файлы в существующем процессе emacs. Вам придется запустить этот существующий процесс вручную с c:\emacs\bin\runemacs.exe
.
Кажется, что Git не найдет редактор, если в пути есть пробелы. Таким образом, вам придется поместить пакетный файл, упомянутый в Patrick answer, в путь без пробелов.
Набрал это в git bash:
git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"
Примечание. Я изменил все \
на /
. Я создал .bashrc в своем домашнем каталоге и использовал /
для установки моего домашнего каталога, и он работал, поэтому я предположил, что /
будет способом.
Воскрешая старую нить, но я нашел aa красиво простое решение, размещенное здесь - хотя может быть ошибка в путь, в котором вам нужно скопировать файл "subl", предоставленный автором. Я запускаю Win 7 x64, и мне пришлось поместить файл подрезов в мою папку /Git/cmd/
, чтобы он работал. Это работает как шарм.
Это работает для Powershell и cmder-1.2 (при использовании с powershell). В ~/.gitconfig
[core]
editor = 'c:/program files/sublime text 3/subl.exe' -w
Я использую GitHub для Windows, который является приятным визуальным вариантом. Но я также предпочитаю командную строку, поэтому, чтобы заставить ее работать, когда я открываю репо в оболочке Git, я просто установил следующее:
git config --global core.editor vim
который отлично работает.
Мне удалось получить версию среды, установив переменную EDITOR с помощью кавычек и /
:
EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"
У меня была такая же проблема, и я нашел другое решение. Я получал
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
в ProcMon, я увидел, что он выглядит каждую папку на пути для ec
и для ec.exe
, но не для ec.bat
. Я добавил еще одну переменную среды (GIT_EDITOR=ec.bat
), и все было в порядке.
Вот решение с Cygwin:
#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
Если нет пути, не пропустите путь
Если путь пуст, пропустите пустой путь
Если путь не пуст, перейдите в формат Windows.
Затем я устанавливаю эти переменные:
export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
EDITOR позволяет script работать с Git
GIT_EDITOR позволяет script работать с командами концентратора
Это сработало для меня:
Что это!
ПРИМЕЧАНИЕ. Sublime Text 3 - это редактор, который я использовал для этого примера.
Это работает для меня с помощью Cygwin и Textpad 6 (EDIT: также работа с Textpad 5 до тех пор, пока вы сделаете очевидное изменение в script), и, предположительно, модель может быть использована и для других редакторов:
~/.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`"
Я просто использую TortoiseGit прямо из коробки. Интеграция красиво с моими открытыми ключами PuTTY. Имеет идеальный редактор для фиксации сообщений.
При использовании удаленно смонтированного homedrive (samba share, nfs,...) ваша папка ~/.git
является общей для всех систем, что может привести к нескольким проблемам. Поэтому я предпочитаю script определить правильный редактор для правильной системы:
#!/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";
Можно подумать о простой оболочке script, но я использовал perl, так как Perl поставляется с msysgit, и ваши unixoid-системы также предоставят один.
Поместите script в /home/username/bin
, который следует добавить в PATH
в .bashrc
или .profile
. После добавления git config --global core.editor giteditor.pl
у вас есть правильный редактор, где бы вы ни находились.