如何关闭git的自动纠错功能?

17

当我输错 git 命令, 比如输入 git git checkout myfile (注意多了一个 "git"), 我会看到以下输出:

WARNING: You called a Git command named 'git', which does not exist.
Continuing under the assumption that you meant 'init'
in 0.1 seconds automatically...
usage: git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [<directory>]

所以Git默认我想要执行初始化操作(init),在我看到错误之前只给了我0.1秒的时间来发现错误,Git这么做不好!

我该如何关闭这个"功能"?

4个回答

13

要查看自动更正的设置,请键入:

git config help.autocorrect

根据文档的说明:

help.autocorrect实际上是一个表示秒数的整数。因此,如果将其设置为50,则Git会在执行自动更正命令之前给您5秒钟的时间来改变主意。

要关闭此功能,请使用以下命令:

git config --global help.autocorrect 0


1
不错!即使将 help.autocorrect 设置为 0,git 仍然会打印出提示,例如 git: 'git' 不是 git 命令。请参阅 'git --help'。最相似的命令是 init。当寻找类似的命令时,它还会搜索别名;例如我将 psoh 别名定义为 push origin HEAD,如果我将其误拼为 psoj,它将建议我的别名。 - Nathan Long

4

顺便提一下,您也可以在任何Git命令中使用-c help.autocorrect=0作为参数。例如:

git -c help.autocorrect=0 svn find-rev 5e2272613fa

对于脚本而言,这非常有用,因为您不会修改正在运行的环境。

在这种情况下,如果没有安装git-svn,Git将无法识别svn命令并尝试回退到serve,这可能在脚本中造成灾难。


2
在2020年,关闭这个功能的最新方法是使用Git 2.30(Q1 2021):“git $cmd $args”命令中,当$cmd不是一个已知的子命令时,默认情况下会尝试查看$cmd是否是现有子命令的拼写错误,并根据help.autocorrect设置的情况选择性地执行更正后的命令(如果只有一种可能性)。用户现在可以通过将配置变量设置为“never”来禁用整个过程,包括寻找可能的拼写错误所花费的时间。

请查看644bb95提交(2020年11月25日),作者为Drew DeVault (ddevault)
(由Junio C Hamano -- gitster --78abcff提交中合并,2020年12月14日)

help.chelp.autocorrect=never表示“不计算建议”

签名:Drew DeVault

虽然可以将 help.autocorrect 设置为 0,拒绝自动执行可能输错的命令,但它仍然需要计算建议并浪费屏幕空间。

更新 help.autocorrect,接受字符串 "never",以便在输错命令时只是退出并显示错误,以帮助那些不想看到任何建议修正的用户。

同时,引入 "immediate" 作为更易读的方式立即执行自动更正的命令,可以通过负值实现。

git config 现在包含在其 man page 中:

如果git检测到拼写错误并能够确定一个与错误类似的有效命令,则git将在等待由此配置值以十分之一秒(0.1秒)为单位定义的持续时间后自动运行预期的命令。
  • 如果此值为0,则会显示建议的更正,但不会执行。
  • 如果它是负整数或“immediate”,则立即运行建议的命令。
  • 如果是“never”,则根本不显示建议。
默认值为零。

1

请注意,help.autocorrect 的默认值为0。

您还可以将其设置为大于1的值:它使用十分之一秒,因此10将是1秒,30将是3秒,依此类推。

请注意,从Git 2.14开始,警告和继续消息将发生变化。
请参见提交968b1fe(由Marc Branchaud(``)于2017年6月21日发布)。
(由Junio C Hamano -- gitster --提交aca226e中合并,于2017年6月26日)

以前,使用help.autoCorrect = 15:

WARNING: You called a Git command named 'lgo', which does not exist.
   Continuing under the assumption that you meant 'log'
   in 1.5 seconds automatically...

之后:

WARNING: You called a Git command named 'lgo', which does not exist.
Continuing in 1.5 seconds, assuming that you meant 'log'.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接