我正在试用Windows上的Git。我到了尝试“git commit”的地步,我得到了这个错误:

终端是哑的,但没有视觉也 编辑器定义。请提供 消息使用-m或-F选项。

所以我发现我需要一个叫做EDITOR的环境变量。没有问题。我把它设置为指向记事本。这几乎奏效了。默认的提交消息在记事本中打开。但是记事本不支持换行。我出去得到了notepad++,但我不知道如何将notepad++设置为%EDITOR%,使其与Git正常工作。

我没有嫁给notepad++。在这一点上,我不介意我使用什么编辑器。我只是希望能够在编辑器中而不是在命令行中输入提交消息(使用-m)。

那些在Windows上使用Git的人:你使用什么工具来编辑你的提交消息,你必须做什么才能让它工作?


当前回答

编辑c:\Users\YourUser文件夹中的.gitconfig文件并添加:

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

其他回答

我设法通过使用引号和/设置编辑器变量来获得环境版本:

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

根据VonC的建议,这对我很有效(差点把我逼疯了):

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

省略-wait可能会导致问题,特别是如果你正在使用Gerrit,并且更改id必须手动复制到提交消息的底部。

notepad++工作得很好,尽管我选择坚持使用Notepad, -m,有时甚至是内置的“编辑”。

您在使用notepad++时遇到的问题与Git如何启动编辑器可执行文件有关。我对此的解决方案是将环境变量编辑器设置为一个批处理文件,而不是实际的编辑器可执行文件,这样做如下:

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

/WAIT告诉命令行会话停止,直到应用程序退出,这样当Git愉快地等待您时,您就可以按照自己的意愿进行编辑。%*将批处理文件的所有参数传递给notepad++。

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

如果路径中有空格,Git似乎无法找到编辑器。因此,您必须将Patrick回答中提到的批处理文件放到非空白路径中。

2015年9月更新(6年后)

git-for-Windows的最新版本(2.5.3)现在包括:

通过配置git配置核心。编辑notepad,用户现在可以使用notepad.exe作为默认编辑器。 commitmessagecolumns 72将被记事本包装器拾取,并在用户编辑后对提交消息进行换行。

参见Johannes Schindelin (dscho)的commit 69b301b。

Git 2.16(2018年第一季度)在生成编辑器时将显示一条消息告诉用户它正在等待用户完成编辑,以防编辑器 打开到一个隐藏的窗口或某个模糊的地方,用户得到 丢失。

参见Lars Schneider (larsxschneider)提交abfb04d(2017年12月7日)和提交a64f213(2017年11月29日)。 协助:Junio C Hamano(吉特)。 (由Junio C Hamano—gitster—在commit 0c69a13中合并,2017年12月19日)

launch_editor(): indicate that Git waits for user input When a graphical GIT_EDITOR is spawned by a Git command that opens and waits for user input (e.g. "git rebase -i"), then the editor window might be obscured by other windows. The user might be left staring at the original Git terminal window without even realizing that s/he needs to interact with another window before Git can proceed. To this user Git appears hanging. Print a message that Git is waiting for editor input in the original terminal and get rid of it when the editor returns, if the terminal supports erasing the last line


原来的答案

我刚刚用git版本1.6.2.msysgit.0.186测试了它。gf7512和notepad++ 5.3.1

我更喜欢不设置编辑器变量,所以我尝试了:

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 shell中工作。 (不是那个核心。编辑器配置机制,一个脚本“start /WAIT…”在它不会工作,但只打开一个新的DOS窗口)


Bennett的回答提到了避免添加脚本的可能性,而是在简单的引号之间直接引用程序本身。注意斜线的方向!使用/ NOT \以路径名分隔文件夹!

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配置。


实际的解决方案(使用脚本)是实现: 你在配置文件中提到的实际上是一个shell (/bin/sh)脚本,而不是DOS脚本。

所以有效的方法是:

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

C: /食物/ git / npp.bat:

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

or

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

有了这个设置,我可以从DOS或git Shell执行'git config -global -edit',或者我可以执行'git rebase -i…从DOS或Git Shell。 Bot命令将触发一个notepad++的新实例(因此使用-multiInst'选项),并等待该实例关闭后再继续。

注意,我只使用'/',而不是\'。我使用选项2安装了msysgit。(将git\bin目录添加到PATH环境变量中,但不覆盖一些内置的windows工具)

notepad++包装器被称为.bat这一事实并不重要。 最好将其命名为'npp.sh',并将其放在[git]\cmd目录中(或在由PATH环境变量引用的任何目录中)。


参见:

我如何查看' git diff '输出与视觉diff程序?对于一般理论 如何使用msysgit / gitk设置DiffMerge ?另一个外部工具的例子(DiffMerge和WinMerge)


Lightfire228在评论中补充道:

对于任何遇到n++只打开一个空白文件,git不接受你的提交消息的问题,请参阅“由于空消息而中止提交”:更改你的.bat或.sh文件如下:

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

这将告诉notepad++打开临时提交文件,而不是一个空白的新文件。