Git 编辑器提交错误

Git editor commit error

我的 core.editor 设置为 Sublime Text。但是,我的所有提交都会自动失败,并且会得到以下信息:

Aborting commit due to empty commit message.

即使它确实打开了 Sublime Text。我还需要做些什么来防止这种情况发生,还是 Sublime 就不能解决这个问题?

注意,我是在终端上做这一切的。

如果您在不更改消息的情况下退出,您应该知道您实际上必须在 .

中输入一些内容

同样的事情发生在我身上(gedit)如果我实际上没有在它开头的注释行之上输入一些东西(合并是可以的,因为它们会自动添加非注释 "merging a to b"-like text).


但是,如果您的编辑器实际上正在启动,但 git 提交在 打开时继续进行, 那么编辑器的启动方式存在问题。

Sublime Text 存在一个已知问题,启动它的程序无法始终正确识别它仍然是 运行。我 认为 这可能是由于命令行工具只是告诉 GUI 程序打开文件(如果需要先启动它),然后命令行工具将退出。

因此,git 将假定它已完成,并且由于此时文件尚未更改,它会向您显示该错误消息。

就解决该问题而言,我相信 Sublime Text 添加了一个 -w 标志以确保不会发生这种情况。


无论如何,我更喜欢明确地在命令行上输入一条消息,例如:

git commit -m 'fixed my earlier screw-up'

这样我就不用担心编辑之类的了。

问题是 Sublime Text 命令行工具默认告诉 Sublime Text GUI 打开一个文件,然后立即退出,即使 GUI 仍然打开文件。不过,有一个选项会告诉命令行工具等待文件在 GUI 中关闭。该选项是 --wait(或简称 -w)。所以如果我试试这个:

: $; git config core.editor subl
: $; git commit

...我得到以下信息——第一行短暂显示然后被第二行删除并替换:

hint: Waiting for your editor to close the file... 
Aborting commit due to empty commit message.

您可能会看到也可能不会看到第一行,因为这一切都发生在 Sublime Text GUI 变得可见并打开 COMMIT_MESSAGE 文件的同时。当您 return 到终端时,您只会看到第二行。

但如果我添加等待选项,它就可以工作。所以我像这样更改编辑器:

: $; git config core.editor 'subl -w'

然后,如果我执行 git commit,并在不关闭 COMMIT_MESSAGE 文件的情况下从 Sublime Text 切换到终端,我会看到:

: $; git commit
hint: Waiting for your editor to close the file... 

然后如果我返回并关闭文件(在写入一些文本并保存之后),我回来查看:

: $; git commit
[master 79d5a7b] Commit message I typed in Sublime Text GUI.
 1 file changed, 1 insertion(+), 1 deletion(-)