我看到git
alias
es出现了一些非常奇怪的情况。当使用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
终端被卡在上面的输出中几行,在^C
ing几次之后,所有的错误行都被打印出来。
我不确定错误指的是哪一个文件的行号,因为~/.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 上
- 如果我打开一个新的选项卡T2,在T1上取消对别名的注释,并保存文件,我可以在T2上使用自动完成的git,而不会出现任何问题
- 如果我取消对别名的注释,保存文件,然后打开一个新的选项卡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行既没有:
也没有&&
,它甚至被注释掉了。
- 如果我取消对别名的注释,并将其更改为
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了。