我正在试用Windows上的Git。我到了尝试“git commit”的地步,我得到了这个错误:
终端是哑的,但没有视觉也
编辑器定义。请提供
消息使用-m或-F选项。
所以我发现我需要一个叫做EDITOR的环境变量。没有问题。我把它设置为指向记事本。这几乎奏效了。默认的提交消息在记事本中打开。但是记事本不支持换行。我出去得到了notepad++,但我不知道如何将notepad++设置为%EDITOR%,使其与Git正常工作。
我没有嫁给notepad++。在这一点上,我不介意我使用什么编辑器。我只是希望能够在编辑器中而不是在命令行中输入提交消息(使用-m)。
那些在Windows上使用Git的人:你使用什么工具来编辑你的提交消息,你必须做什么才能让它工作?
我也在Windows上使用Cygwin,但使用的是gVim(与基于终端的Vim相反)。
为了做到这一点,我做了以下工作:
创建一个单行批处理文件(命名为git_editor.bat),其中包含以下内容:
"C:/Program Files/Vim/vim72/gvim.exe"——nofork "%*"
将git_editor.bat放在我的PATH中。
设置GIT_EDITOR = git_editor.bat
完成此操作后,git提交等将正确地调用gVim可执行文件。
注1:gVim的——nofork选项确保它阻塞直到提交消息被写入。
注2:如果路径中有空格,则必须在gVim路径周围加上引号。
注意3:“%*”周围的引号是必要的,以防Git传递一个带空格的文件路径。
我在多个平台上使用Git,并且我喜欢在所有平台上使用相同的Git设置。(事实上,我用Git对所有配置文件进行了发布控制,并在每台机器上放置了一个Git存储库克隆。)我想到的解决办法是:
我将编辑器设置为giteditor
git config --global core.editor giteditor
然后我在PATH中创建了一个名为giteditor的符号链接。(我有一个个人的bin目录,但在PATH中的任何地方都可以工作。)这个链接指向我现在选择的编辑。在不同的机器和平台上,我使用不同的编辑器,所以这意味着我不需要更改我的通用Git配置(.gitconfig),只需更改giteditor指向的链接。
我所知道的每个操作系统都可以处理符号链接,尽管它们可能使用不同的命令。对于Linux,你用ln -s。对于Windows,您使用cmd内置mklink。它们有不同的语法(你应该查一下),但它们的工作方式是一样的,真的。
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
当使用远程挂载的主驱动器(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你有正确的编辑器,无论你在哪里。