【问题标题】:git commit command hangs indefinitelygit commit 命令无限期挂起
【发布时间】:2015-04-01 06:50:08
【问题描述】:

当我尝试使用git commit 进行提交时,sublime 文本编辑器确实打开了,我写了提交消息并保存并关闭了编辑器,但更改没有被提交。终端挂在git commit

我在网上搜索,发现有人遇到同样的问题并应用了同样的修复程序,没有考虑任何事情。我运行了命令:

git config --global core.editor "mate -w" 

现在我在运行git commit 时出现新错误:

mate -w: 1: mate -w: mate: 未找到 错误:编辑器“mate -w”有问题。 请使用 -m 或 -F 选项提供消息。

请帮忙。我对 git 和使用 Ubuntu 14.04 非常陌生。

【问题讨论】:

  • git commit -m "comit message" 有用吗?是的?你的编辑器有问题。
  • @NLN- 是的,它确实有效。你能帮我解决这个问题吗?我该怎么办?
  • @ThorbjørnRavnAndersen- 保存内容后我关闭了编辑器(ctrl+q)。
  • 好的!所以我运行了 git config --global core.editor "subl -n -w" 命令,现在一切正常。感谢大家。 :)

标签: git git-commit


【解决方案1】:

可能是您有一个执行长时间运行任务的预提交挂钩。

检查.git/hooks/pre-commit 看看它的作用。

【讨论】:

    【解决方案2】:

    我将 sublime 用于提交消息,我发现问题是 sublime 窗口正在打开但没有出现在前台(通常情况下)。简单的解决方案,但因为它没有像往常一样工作,所以它看起来像是挂了。

    【讨论】:

    • 它似乎没有回答这个问题。它应该是 IMO 的评论。
    • 可能不适用于该特定用户,但这是谷歌搜索“git commit hangs”的首要问题,并且在这种情况下编辑器似乎是一个常见问题 - 希望它会帮助某人
    【解决方案3】:

    Git 运行 lot 的外部位作为提交的一部分。虽然 Git 本身不太可能挂起,但它调用的任何外部部分都可能挂起,因此按照执行顺序:

    1. pre-commit 钩子。这是$REPO_ROOT/.git/hooks/pre-commit 上的一个脚本(它不是.sample 文件!它必须是一个准确且唯一的名称pre-commit。)检查脚本的内容以查看是否它可能会挂起。
    2. prepare-commit-msg 钩子。它就在pre-commit 钩子旁边,就像你所期望的那样命名。同样的事情。
    3. 如果您没有通过-m,那么您的编辑器将启动,以便您输入消息。确保
      • 窗口未以某种方式隐藏(屏幕外、最小化、在其他窗口后面)
      • 编辑器本身没有挂起
    4. commit-msg 钩子。与其他钩子相同。
    5. 提交签名。此步骤仅在您指定 -Sgit commit 或如果您有 commit.gpgsign = true 时运行。您可以使用git config commit.gpgsign 检查后者。这也取决于您的 GPG 代理。查看:
      • 如果您的代理使用 GUI 来获取您的密码,则窗口不会像编辑器那样隐藏。
      • 代理本身没有挂起。我的有几个问题,一个基于curses 的问题,挂起。
      • 您可以随时杀死您的 GPG 特工。它所做的只是简单地保存您的密码,因此您无需每次都输入密码。当你再次git commit 时,它会重新开始;这可能会或可能不会帮助您上吊。
    6. post-commit 钩子。

    请注意,我解决了手动创建提交的问题。 merge 也将创建提交,它遵循与some different hooks 大致相同的顺序。

    此外,如果您的存储库特别大,Git 本身可能需要一段时间——每次提交本质上是给定时间其中所有文件的快照。如果您明智地使用.gitignores 来忽略诸如已构建的可执行文件之类的内容并跟踪 Git 存储库中的源代码,那么它会大有帮助。请注意,这会破坏一些编辑器:尤其是 Visual Studio,设计不佳,因此与 Git 不兼容。

    【讨论】:

    • 我 Ctrl-D 退出 gpg 签名诅咒提示一次,之后我不得不杀死 gpg-agent 进程以使 git commit 再次工作。
    • 只想突出显示@Waked 评论。还有一个 gpg 代理更新过程似乎也挂了。对我来说,问题是从 vscode 中启动提交时开始的,它没有将 gpg auth shell 带到前台。我相信它超时了,这似乎触发了挂起。
    【解决方案4】:

    如果您使用gpggpg-agentmisconfigured 签署提交或有其他问题,也可能会出现git commit 无限期挂起。

    在强化系统上使用~/.gnupg/gpg-agent.conf 中的pinentry-program /usr/bin/pinentry 设置pinentry-program /usr/bin/pinentry(当前默认为gtk2 pinentry 对话框)可以解决tty 对话框的问题。

    ~/.gitconfig 中使用nano 作为编辑器比使用桌面编辑器问题要少得多:

    [core]
            editor = nano
            pager = less -FXRS
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2022-11-21
      • 2013-02-22
      • 2017-06-12
      • 2017-06-29
      相关资源
      最近更新 更多