我正在尝试 Windows 上的 Git. 。我尝试“git commit”并收到此错误:

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

所以我发现我需要一个名为 EDITOR 的环境变量。没问题。我将其设置为指向记事本。这几乎起作用了。默认提交消息在记事本中打开。但记事本不支持裸换行。我出去得到了 记事本++, ,但我不知道如何将 Notepad++ 设置为 %EDITOR% 以使其能够按预期与 Git 配合使用的方式。

我还没有与 Notepad++ 结婚。此时我不介意我使用什么编辑器。我只是想能够 在编辑器中输入提交消息 而不是命令行(使用 -m).

在 Windows 上使用 Git 的人:您使用什么工具来编辑提交消息?您需要做什么才能使其发挥作用?

有帮助吗?

解决方案

2015 年 9 月更新(6 年后)

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

通过配置 git config core.editor notepad, 用户 现在可以使用 notepad.exe 作为他们的默认编辑器.
配置 git config format.commitMessageColumns 72 将由记事本包装器拾取,并在用户编辑提交消息后对其进行换行。

提交 69b301b 经过 约翰内斯·辛德林(dscho).

Git 2.16(Q1 2018)将显示一条消息,告诉用户,如果编辑器打开一个隐藏的窗口或某个地方晦涩难懂并且用户丢失,则在产卵编辑器时正在等待用户完成编辑。

提交 abfb04d (2017 年 12 月 7 日),以及 提交 a64f213 (2017 年 11 月 29 日) 拉尔斯·施奈德(larsxschneider).
帮助者: 朱尼奥·C·滨野(gitster).
(合并于 朱尼奥·C·滨野—— gitster --提交 0c69a13, ,2017 年 12 月 19 日)

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 shell.
(不是使用 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.


实际的解决方案(使用脚本)是认识到:
您在配置文件中引用的实际上是一个 shell (/bin/sh) 脚本, ,不是 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。
Bot 命令将触发 notepad++ 的新实例(因此 -multiInst' 选项),并等待该实例关闭后再继续。

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

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


也可以看看:


光火228 添加 在评论中:

对于任何遇到 N++ 仅打开空白文件而 git 不接受您的提交消息的问题的人,请参阅“由于消息为空而中止提交”:改变你的 .bat 或者 .sh 文件说:

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

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

其他提示

建立在 达伦的回答, ,要使用 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 config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

我不认为 CMD 喜欢单引号,所以你必须使用双引号“来指定空格嵌入字符串参数”。

另一方面,Cygwin(我相信它是 Git 的 Bash 的底层平台)两者都喜欢 '";您可以指定类似 CMD 的路径,使用 / 代替 \, ,只要字符串被引用即可,即在本例中,使用单引号。

-m 覆盖/指示使用多个编辑器,并且不需要 %* 钉在最后。

编辑: 更新到 vim 7.3 后,我得出的结论是,最干净、最简单的方法是:

  1. 将 Vim 的主文件夹添加到您的路径中(右键单击我的电脑 -> 属性 -> 高级 -> 环境变量)

  2. 运行这个:git config --global core.editor "gvim --nofork '%*'"

如果你这样做,那么我相当确定它也适用于 cygwin。

原答案:

即使有几个与 vim 相关的答案,我也很难让它在 Windows 下与 gvim 一起工作(同时不使用批处理文件或 %EDITOR% 或 cygwin)。

我最终得到的结果是漂亮和干净的,并且借鉴了这里的一些解决方案:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

一个让我花了一段时间的问题是这些不是 Windows 风格的反斜杠,它们是正常的正斜杠。

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,但由于我试图将 Git 引入公司,所以我想要一些我们都拥有的东西,并发现写字板似乎工作正常(即Git 会等待您完成编辑并关闭窗口)。

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

那是在 msysgit 上使用 Git Bash;我还没有在 Windows 命令提示符下尝试过(如果这有什么区别的话)。

我也在 Windows 上使用 Cygwin,但是 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, , ETC。将正确调用 gvim 可执行文件。

注 1:这 --nofork gvim 的选项确保它会阻塞,直到写入提交消息。

笔记2:如果路径中有空格,则需要在 gvim 路径周围加上引号。

注3:需要在“%*”周围加上引号,以防 git 传递带有空格的文件路径。

感谢 SO 社区...经过一些研究,我找到了我最喜欢的编辑器, 编辑板专业版,用MSYSGIT 1.7.5.git和Tortoisegit v1.7.3.0在Winxp sp3 ...

按照上面的建议,我添加了代码编辑器的 bash 脚本的路径......

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

然而,在多次尝试上述解决方案失败后......我终于能够让这个工作了。根据 EditPadPro 的文档,添加“/newinstance”标志将允许 shell 等待编辑器输入......

这 '/新实例' 旗帜是我案例中的关键......

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

这是更大问题的第一个症状。值得注意的是,您有一些设置 TERM=dumb。其他无法正常工作的事情是 less 命令表明您没有功能齐全的终端。看来这最常见的原因是在全局 Windows 环境变量中将 TERM 设置为某些内容。对我来说,当我安装 Strawberry Perl 时出现了这个问题,有关此问题的一些信息位于 msysgit 针对此问题的 bug 以及几种解决方案。

第一个解决方案是通过添加以下内容在 ~/.bashrc 中修复它:

export TERM=msys

您可以从 Git BASH 提示符执行此操作,如下所示:

echo "export TERM=msys" >> ~/.bashrc

最终我所做的另一个解决方案是删除 TERM=dumb ,因为我不关心 Strawberry Perl 将 TERM=dumb 添加到我的环境设置的原因 针对 msysgit 错误报告的评论.

控制面板/系统/高级/环境变量...(或类似,取决于您的Windows版本)是Windows上粘性环境变量的位置。默认情况下,未设置术语。如果在其中设置了术语,则您(或您已安装的程序之一 - 例如。草莓perl)已将其设定。删除该设置,您应该没问题。

同样,如果您使用 Strawberry Perl 并关心 CPAN 客户端或类似的东西,您可以离开 TERM=dumb 单独使用 unset TERM 在你的 ~/.bashrc 文件中,这与设置上面的显式术语具有类似的效果。

当然,所有其他解决方案都是正确的,您可以使用 git config --global core.editor $MYFAVORITEEDITOR 确保 git 在需要为您启动编辑器时使用您最喜欢的编辑器。

为了 原子 你可以做

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

和类似的 VS代码

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

这将打开一个 原子 或者 VS代码 为您提供承诺的窗口,

或为了 升华

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

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

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

Vim/Gvim 对我来说效果很好。

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

我的 PortableGit 1.6 工作正常,但升级到 PortableGit-1.7 windows 版本后出现问题。一些 git 命令可以很好地打开 Notepad++.exe,但有些则不能,尤其是 git 变基 行为不同。

问题是一些命令运行 Windows cmd 进程,一些命令使用 unix cmd 进程。我想为 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)设置Global Core.Editor变量脚本已保存到GIT/CMD文件夹中,因此它已经处于GitConsole路径中,这是强制性的,因为完整路径可能无法正常工作。

git config --global core.editor "git-editor.bat"

现在我可以跑了 git 提交 -agit rebase -i master 命令。如果您在 Git windows 工具中遇到问题,请尝试一下。

我在多个平台上使用 git,并且喜欢在所有平台上使用相同的 git 设置。(事实上​​,我将所有配置文件都置于 git 的发布控制之下,并在每台机器上放置一个 git 存储库克隆。)我想出的解决方案是这样的:

我设置了我的 编辑git编辑器

git config --global core.editor giteditor

然后我创建一个名为的符号链接 git编辑器 这是在我的 小路. 。(我有一个个人 垃圾桶 目录,但在任何地方 小路 有效。)该链接指向我当前选择的编辑器。在不同的机器和不同的平台上,我使用不同的编辑器,所以这意味着我不必更改我的通用 git 配置(.gitconfig),只是链接 git编辑器 指着。

我所知道的每个操作系统都可以处理符号链接,尽管它们可能使用不同的命令。对于 Linux,您使用 ln-s. 。对于 Windows,您可以使用 指令 内置 链接. 。它们具有不同的语法(您应该查找),但实际上它们的工作方式都是相同的。

基于 冯克 上面的建议, ,这对我有用(让我发疯):

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

省略 -wait 可能会导致问题,特别是当您使用 gerrit 并更改必须手动复制到提交消息底部的 id 时

这是我要使用的设置 杰尼 作为 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 中运行。

我在 Windows 上使用 Cygwin,所以我使用:

export EDITOR="emacs -nw"

-nw 是为了 no-windows, , IE。告诉 Emacs 不要尝试使用 X11。

Emacs 键绑定不适用于 Windows shell,因此我只能在 Cygwin shell 中使用它...(推荐使用 rxvt。)

我更喜欢使用 emacs。设置它可能有点棘手。

  1. 下载 emacs 并将其解压到类似的地方 c:\emacs.
  2. 跑步 c:\emacs\bin\addpm.exe. 。如果您使用的是 Windows Vista 或更高版本,则需要右键单击并“以管理员身份运行”。这会将可执行文件放入您的路径中。
  3. 添加 (server-start) 在你的某个地方 .emacs 文件。请参阅 Emacs Windows 常见问题解答 有关放置位置的建议 .emacs 文件。
  4. git config --global core.editor emacsclientw

Git 现在将在现有 emacs 进程中打开文件。您必须手动运行该现有流程 c:\emacs\bin\runemacs.exe.

我很难让 git 与写字板、KomodoEdit 以及我提供的几乎所有其他编辑器配合。大多数打开进行编辑,但 git 显然不会等待保存/关闭发生。

作为拐杖,我一直在做,即

git commit -m "Fixed the LoadAll method"

让事情继续发展。倾向于让我的提交消息比应有的要短一些,但显然在 Windows 版本的 git 上还有一些工作要做。

GitGUI 也没有那么糟糕。这需要一点定位,但在那之后,它的效果相当好。

我需要做 两个都 使用以下命令让 git 在 windows 中启动 notepad++:

- 将以下内容添加到 .gitconfig:

editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin

- 修改启动 git bash shell 的快捷方式以管理员身份运行,然后使用它来启动 git bash shell。我猜测上下文菜单条目“Git Bash here”没有启动具有所需权限的 npp。

完成以上两项后,就成功了。

如果路径中有空格,Git 似乎找不到编辑器。所以你必须把提到的批处理文件 帕特里克的回答 进入非空白路径。

我刚刚遇到了同样的问题并找到了不同的解决方案。我正在得到

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程序监视器 我看到它在路径上的每个文件夹中查找 ec 并为 ec.exe, ,但不适合 ec.bat. 。我添加了另一个环境变量(GIT_EDITOR=ec.bat)一切都很好。

我设法通过使用引号设置 EDITOR 变量来使环境版本正常工作 /:

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

我正在使用 Windows 版 GitHub,这是一个不错的视觉选项。但我也更喜欢命令行,因此为了使其在 Git shell 中打开存储库时正常工作,我只需设置以下内容:

git config --global core.editor vim

效果很好。

这适用于 Powershell 和 cmder-1.2(与 powershell 一起使用时)。在~/.gitconfig中

[core]
    editor = 'c:/program files/sublime text 3/subl.exe' -w

如何使 Sublime Text 成为 Git 的默认编辑器?

复活旧线程,但我发现发布了一个漂亮简单的解决方案 这里 - 尽管路径中可能有错误,您必须复制作者给出的“subl”文件。我运行的是 Win 7 x64,我必须将“subl”文件放入我的 /Git/cmd/ 文件夹以使其正常工作。不过它的作用就像一个魅力。

ATOM 和 Windows 10

  1. 右键单击桌面上的 Atom 图标,然后单击属性。
  2. 复制“开始于”位置路径
  3. 用windows资源管理器查看了一下,发现了“atom.exe”。
  4. 在 git bash 中输入:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

笔记:我改变了一切 \ 为了 / 。我在我的主目录创建了一个 .bashrc 并使用 / 设置我的主目录并且它有效,所以我假设 / 将是要走的路。

当使用远程安装的 homedrive(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,因为 perl 是随 msysgit 一起提供的,并且您的 unixoid 系统也会提供一个。将脚本放入 /home/username/bin, ,应添加到 PATH.bashrc 或者 .profile. 。一旦添加 git config --global core.editor giteditor.pl 无论您身在何处,都有合适的编辑器。

这对我使用 Cygwin 和 Textpad 6 有用(编辑:只要您对脚本进行明显的更改,也可以使用 Textpad 5),并且该模型大概也可以用于其他编辑器:

〜/ .gitconfig:

[core]
    editor = ~/script/textpad.sh

〜/脚本/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`"

这对我有用:

  1. 将包含编辑器可执行文件的目录添加到您的 小路 多变的。(例如。 “C:\Program Files\Sublime Text 3\”)
  2. 重新启动计算机。
  3. 改变 核心编辑器 全局 git 变量到编辑器可执行文件的名称 没有扩展名 '。EXE文件' (例如。git config --global core.editor sublime_text)

就是这样!

笔记: Sublime Text 3 是我在本示例中使用的编辑器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top