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

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

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

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

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


当前回答

我发现了一个漂亮的简单的解决方案张贴在这里-虽然可能有一个错误的路径,你必须复制的“subl”文件由作者给出。

我运行的是Windows 7 x64,我必须把“subl”文件放在我的/Git/cmd/文件夹中才能使它工作。

不过,它的效果很好。

其他回答

当使用远程挂载的主驱动器(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";

人们可能会考虑使用普通的shell脚本,但我使用的是Perl,因为它随msysgit一起提供,而且您的类unix系统通常也会提供一个。 将脚本放在/home/username/bin中,该脚本应该添加到.bashrc或.profile中的PATH中。一旦添加了git配置-全局核心。编辑器giteditor。pl你有正确的编辑器,无论你在哪里。

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

在我的git编辑器和通用代码编辑器中,我发现在Windows和Linux中最有用的工具是Sublime Text 3。它工作得很好,但需要一点设置才能让它正确,所以我在这里完整地记录了这一点:

如何让Git使用我选择的编辑器进行提交?- Sublime Text 3作为Git编辑器的最佳设置(Windows和Linux指令)

关于我的主编辑器的边注:对于大型项目,我使用Eclipse作为我的主编辑器,Sublime Text 3作为我的git编辑器,当我需要使用它的高级功能时,如多光标模式,垂直/列选择模式等。对于中小型项目,我只使用Sublime Text 3本身。有关Eclipse的设置说明,请参阅我的PDF文档。

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++打开临时提交文件,而不是一个空白的新文件。

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

感谢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'标志将允许shell等待编辑器输入…

在我的例子中,'/newinstance'标志是关键…

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