【问题标题】:Git commit fails with Vim and GVimVim 和 GVim 的 Git 提交失败
【发布时间】:2010-09-21 21:07:54
【问题描述】:

当我尝试执行 git commit -a 时,我得到了一个不错的 vim 实例。我输入我的消息,做:wq,vim 关闭并且终端有消息,

Aborting commit due to empty commit message.

根据this question,我确保我的 core.editor 显示“gvim”(user.editor 也是如此,fwiw),但我仍然收到该错误消息。

有人有其他想法吗?

编辑 1:我能够通过指定文件来提交。我的消息太长,无法合理使用 -m 选项。

编辑 2:

$ git config core.editor
vim
error: More than one value for the key core.editor: vim
error: More than one value for the key core.editor: gvim

编辑 3: 即使对 core.editor 进行了排序,仍然有同样的问题。还有其他想法吗?

$ git config core.editor
gvim -f

$ git commit
Aborting commit due to empty commit message.

编辑 4: 其他错误信息。这就是我所看到的一切。我从我原来的问题中排除了几个,因为我已经在很多机器上得到了它们,其中没有一个在使用 vim/gvim 和 git 时遇到问题(当前的除外)。在此处显示的情况下,core.editor 设置为vim -f

$ git commit

(gvim:21655): GLib-WARNING **: g_set_prgname() called multiple times

** (gvim:21655): CRITICAL **: gtk_form_set_static_gravity: assertion `static_gravity_supported' failed

** (gvim:21655): CRITICAL **: gtk_form_set_static_gravity: assertion `static_gravity_supported' failed

** (gvim:21655): CRITICAL **: gtk_form_set_static_gravity: assertion `static_gravity_supported' failed

** (gvim:21655): CRITICAL **: gtk_form_set_static_gravity: assertion `static_gravity_supported' failed

** (gvim:21655): CRITICAL **: gtk_form_set_static_gravity: assertion `static_gravity_supported' failed
Aborting commit due to empty commit message.

当 core.editor 设置为 gvim -f 时,我得到完全相同的错误消息,只是数字是 21641,而不是 21655。当我用谷歌搜索其中一行时,我没有得到任何匹配项(我觉得很难相信,但是你来了)。

【问题讨论】:

  • 它是否适用于core.editor = vim
  • @mathepic:不。它会生成新的变量,都称为 core.editor,有多种选择。我如何摆脱多余的东西?这肯定会导致问题。
  • 回复:您的“编辑 3”。看起来你可能在 core.editor 的值中有一个额外的换行符(gvim -f 和下一个提示符之间不应该有一个空行,除非你的 shell 的提示符把它放在那里)。如果 gvim-started-by-committing 没有为您提供提交模板(通常是一个空行,后面跟着许多信息性的“#comment”行),那么这可能是问题的一部分。从值中删除额外的换行符;重置值注意不要在 git config --global core.editor 'gvim -f' 的结束引号之前按 Return/Enter。
  • @Chris Johnsen:好眼力。不要认为那是问题所在;这是我从命令提示符中删除不相关内容时复制/粘贴的结果。刚才仔细检查了一下,gvim -f行后面没有空行,只是另一个提示符。
  • 您看到的2164121655 是进程ID。它们不太可能在搜索结果中出现相同的情况。把这些数字留在外面。

标签: git vim


【解决方案1】:

如果你使用 gvim,你需要确保它保持在前台,否则它会在你有机会编辑和保存你的消息之前将控制权返回给 git。将-f 开关指定为编辑器设置的一部分应该会启用此功能。

gvim -f

您为core.editor 设置设置了多个值,这导致了问题。您只需进行一项设置即可。

试试:

git config --global --unset-all core.editor
git config --unset-all core.editor
git config --global core.editor "gvim -f"

【讨论】:

  • 我确实说过我能够输入我的提交信息。 Gvim 弹出,我开始输入。你是说在完成提交消息之前我不能专注于任何其他窗口?
  • @kajaco:您还说保存您的消息不起作用,这可以通过 gvim 的 auto-detaching-from-the-shell 行为来解释。你是说这个修复不能确定有效吗?
  • @kajaco:嗯,你发布了一条错误消息,说当 git 读取提交消息时它是空的,所以很明显你 git 没有读取你试图保存的消息。再说一遍:你是说这个修复不能确定吗?
  • @kajaco:如果这个答案是正确的,你会看到“Aborting commit due to empty commit message”。当 gvim 弹出时立即在 shell 中。再次尝试并在 gvim 打开后立即切换回终端窗口(在输入提交消息或保存之前)以查找错误。
  • @kajaco:“我确实会立即收到该消息。” – 完全正确。 当您进行提交时,git 会启动编辑器并等待它返回,然后尝试进行提交。您遇到的问题是 gvim 是一个图形编辑器并在后台(控制台)启动。所以控制台调用gvim 立即返回,git 使用(当时未更改)提交消息文件。 然后你得到vim窗口的焦点,并改变文件。但是那个时候,git的工作已经完成了。因此,您需要在关闭窗口之前使 gvim 调用不返回。而-f 正是这样做的。
【解决方案2】:

使用gvim -f 应该是解决方案(对我有用),但简单地设置core.editor 不一定会导致git 使用它。要了解 git 实际 使用的是什么,请运行 git var GIT_EDITOR。它应该打印gvim -f。如果不是,请检查man git-var 并跳转到GIT_EDITOR 变量部分,找出可能覆盖您的core.editor 设置的部分。

【讨论】:

    【解决方案3】:

    您是否在提交消息中的行前加上 #?如果是,Git 会将这些视为注释行,忽略它们,并且在您的消息中找不到任何内容。

    【讨论】:

    • 是的,这就是我的情况。谢谢布赖恩!
    【解决方案4】:

    我遇到了类似的错误。

    运行:wq:q! 会出现问题退出。我已经尝试过其他编辑器(TextMate),并且在保存并退出该编辑器后,提交将完成。

    发现当使用:x 关闭文档时,提交将关闭,而无需移动到 gvim 以及那里需要的所有配置。

    总结 -

    :x 是我的答案。

    【讨论】:

      【解决方案5】:

      考虑为 vim 使用 fugitive git 插件。

      您可以直接从 (g)vim 执行最常用的 git 命令。

      【讨论】:

        猜你喜欢
        • 2019-07-12
        • 2012-01-02
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        相关资源
        最近更新 更多