git commit命令无限期挂起

klsxnrf1  于 2022-12-17  发布在  Git
关注(0)|答案(5)|浏览(249)

当我尝试使用git commit提交时,sublime文本编辑器确实打开了,我写了提交消息,保存并关闭了编辑器,但修改没有被提交。终端在git commit挂起。
我搜索了一下网络,发现有人有同样的问题,并应用了相同的修复没有想任何事情。我运行命令:

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

现在当我运行git commit时,我有一个新的错误:
交配-w:1:交配-w:匹配:未找到错误:编辑器“mate -w”有问题。请使用-m或-F选项提供消息。
我对git和Ubuntu 14.04都很陌生。

2q5ifsrm

2q5ifsrm1#

它可能是一个执行长时间运行任务的预提交钩子。
检查.git/hooks/pre-commit,看看它做了什么。

webghufk

webghufk2#

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

  1. pre-commit钩子。这是$REPO_ROOT/.git/hooks/pre-commit中的一个脚本(它是而不是.sample文件!它必须是一个名称准确且唯一的pre-commit文件。)检查脚本的内容以查看它是否可能挂起。
  2. prepare-commit-msg钩子。它就在pre-commit钩子旁边,名字和你想的一样。同样的事情。
  • 如果您没有传递-m,那么您的编辑器将启动,以便您可以输入消息。
  • 窗口未以某种方式隐藏(离屏、最小化、隐藏在其他窗口后面)
  • 编辑器本身没有挂
  • commit-msg钩子和其他钩子一样。
  • 提交签名。此步骤仅在您使用git commit指定-S,或者您具有commit.gpgsign = true时运行。您可以使用git config commit.gpgsign检查后者。这也取决于您的GPG代理。检查:
  • 如果您的代理使用GUI来获取您的密码短语,则不会像使用编辑器那样隐藏窗口。
  • 代理本身没有挂起,我的代理(一个基于curses的代理)挂起了几个问题。
  • 你可以随时杀死你的GPG代理。它所做的只是暂时保存你的密码,所以你不需要每次都输入它。当你再次git commit时,它会重新开始;这对你的绞刑可能有帮助也可能没有帮助。
  • post-commit钩子。

请注意,我 * 只 * 提到了手动创建提交。merge也会创建提交,它遵循与some different hooks大致相同的顺序。
此外,如果你的仓库特别大,Git本身也会花上一段时间--每次提交基本上是给定时间内所有文件的快照。如果你明智地使用.gitignore s来忽略构建的可执行文件,而 * 只是 * 跟踪Git仓库中的源代码,它会有很大帮助。注意,这会破坏一些编辑器:VisualStudio(原版,而不是VS代码)在这类事情上尤其有一些问题。

jucafojl

jucafojl3#

git commit无限期挂起也可能发生,如果您使用gpg签署提交& gpg-agent配置错误或有其他问题。
在使用hidepid的加固系统上,在~/.gnupg/gpg-agent.conf中设置pinentry-program /usr/bin/pinentry(当前默认为gtk2 pinentry对话框)可解决tty对话框的问题。
~/.gitconfig中使用nano作为编辑器比使用桌面编辑器问题要少得多:

[core]
        editor = nano
        pager = less -FXRS
yiytaume

yiytaume4#

我用sublime来处理提交信息,我发现问题是sublime窗口打开了,但没有出现在前台(通常是这样的)。简单的解决方案,但因为它没有正常工作,看起来像是挂着的。

vh0rcniy

vh0rcniy5#

对我来说,这是一个gpg签名会话突然退出,我不得不杀死gpg会话与

gpgconf --kill gpg-agent

相关问题