git commit命令无限期挂起

use*_*898 8 git git-commit

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

我在网上搜索,发现有同样问题的人并且在没有考虑任何问题的情况下应用了相同的修复.我跑了命令:

git config --global core.editor "mate -w" 
Run Code Online (Sandbox Code Playgroud)

现在我跑的时候出现了一个新的错误git commit:

mate -w:1:mate -w:mate:not found error:编辑器'mate -w'出现问题.请使用-m或-F选项提供消息.

请帮忙.我是git并使用Ubuntu 14.04的新手.

tbr*_*den 13

对我来说,这是一个突然退出的 gpg 签名会话,我不得不用以下命令终止 gpg 会话

gpgconf --kill gpg-agent
Run Code Online (Sandbox Code Playgroud)


Cor*_*ein 6

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

检查.git/hooks/pre-commit并查看其作用。

  • 另外,您可以使用“git commit --no-verify”跳过预提交挂钩,作为确定是否是预提交挂钩阻止 git 继续的简单方法 (2认同)

Fun*_*uit 5

作为提交的一部分,Git 运行了许多外部位。虽然 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. 承诺签署。此步骤仅在您指定-Swith 时运行git commit,或者如果您有commit.gpgsign = true. 您可以使用git config commit.gpgsign. 这也取决于您的 GPG 代理。查看:
    • 如果您的代理使用 GUI 来获取您的密码,则该窗口不会像编辑器一样隐藏。
    • 代理本身并没有挂起。我有几个问题,一个基于诅咒的问题,悬而未决。
    • 你总是可以杀死你的 GPG 代理。它所做的只是简单地保存您的密码,因此您无需每次都输入密码。当你git commit再次,它会重新开始;这可能会或可能不会帮助您上吊。
  6. post-commit挂钩。

请注意,我解决了手动创建提交的问题。merge还将创建提交,它遵循大致相同的顺序,但有一些不同的钩子

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

  • 我按 Ctrl-D 退出了 gpg 签名诅咒提示一次,之后我必须终止 `gpg-agent` 进程才能使 `git commit` 再次工作。 (3认同)