Git自动完成行为异常



我看到gitaliases出现了一些非常奇怪的情况。当使用tab键自动完成git命令时,我会出现bash错误。例如,如果我键入git pu以查看所有选项,则会发生以下情况:

$ git pu-bash: remote: command not found
-bash: -v: command not found
-bash: command substitution: line -327: syntax error near unexpected token `|'
-bash: command substitution: line -327: `| '
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: rev-parse: command not found
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: brname: command not found
-bash: brname: command not found
-bash: brname-trimmed: command not found
-bash: brname-trimmed: command not found
-bash: ls-files: command not found
-bash: @{u}: command not found

终端被卡在上面的输出中几行,在^Cing几次之后,所有的错误行都被打印出来。

我不确定错误指的是哪一个文件的行号,因为~/.gitconfig中的alias在第174行结束。我注释掉了任何名称在错误列表中的别名(例如brname(,或者使用了列出的git命令(例如内置的rev-parse在错误中(。直到错误消息消失,自动完成再次开始工作。

因此,在良好的状态下,如果我键入git pu并按tab键,我会看到以下内容:

$ git pu
pull   pull   push   push  

请注意,这里的响应是双倍的,对于任何其他输入,我都按tab键。

我评论过的一个别名是这样的:

brname-trimmed = !git rev-parse --abbrev-ref HEAD | tr -d 'n'

假设我在标签T1 上

  1. 如果我打开一个新的选项卡T2,在T1上取消对别名的注释,并保存文件,我可以在T2上使用自动完成的git,而不会出现任何问题
  2. 如果我取消对别名的注释,保存文件,然后打开一个新的选项卡T2并在T2上键入git pu,我会看到:
$ git pu-bash: : command not found
-bash: command substitution: line -166: syntax error near unexpected token `&&'
-bash: command substitution: line -166: `&& '

我的~/.gitconfig的第166行既没有:也没有&&,它甚至被注释掉了。

  1. 如果我取消对别名的注释,并将其更改为xbrname-trimmed(只是在开头添加一个x,使其成为一个不同的单词(,则无论T2何时打开,自动完成都可以正常工作

我在一台机器上工作,我已经好几个月没有做开发工作了,所以不确定问题是什么时候发生的。git版本为2.22.0

考虑到2.23和2.24已经在完成脚本中工作,请首先检查Git 2.24是否仍然存在问题。

还要检查你的Gitbash补全是否正确安装。

我在评论中补充道:

您的.bashrc/.profile可能在运行该completion bash脚本时出现错误
您需要用.bashrc/.profile的最小(几乎为空(内容来测试它("空",除了至少定义$PATH之外(

OP alamoot确认:

伟大的呼叫
在我的~/.bash_profile中,我调用了一个设置自定义$BASH_COMPLETION$BASH_COMPLETION_DIR的脚本
这个自定义脚本是旧的"系统设置"的一部分,我不需要更多了
所以把它拿出来,我又可以完成git了。

最新更新