git commit 命令无限期挂起

问题描述 投票:0回答:6

当我尝试使用

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 git-commit
6个回答
14
投票

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

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

也会创建提交,并且它遵循大致相同的顺序,但有 一些不同的钩子

此外,如果您的存储库特别大,Git 本身可能需要一段时间——每次提交本质上都是给定时间其中所有文件的快照。如果您明智地使用 .gitignore

s

忽略诸如构建的可执行文件之类的事情,并just

 跟踪 Git 存储库中的源代码,它会很有帮助。请注意,这会破坏一些编辑器:Visual Studio(原始版本,而不是 VS Code)在此类事情上尤其存在一些问题。
对我来说,这是一个突然退出的 gpg 签名会话,我不得不用

终止 gpg 会话

11
投票

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

9
投票
.git/hooks/pre-commit

看看它做了什么。

如果您使用 
git commit

签署提交且

3
投票

配置错误

 或存在其他问题,也可能会发生 
gpg-agent
无限期挂起。
在强化系统上,使用 pinentry-program /usr/bin/pinentry 中的 

hidepid

设置 ~/.gnupg/gpg-agent.conf(当前默认为

gtk2
pinentry 对话框)可以解决
tty
对话框的问题。
使用 
nano
作为

~/.gitconfig

中的编辑器比使用桌面编辑器问题要少得多:

[core]
        editor = nano
        pager = less -FXRS
    

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

2
投票

您可以在这里找到详细的解决方案:

由于 GPG 锁定问题导致 Git Commit Freeze(解决方案)

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.