Git 自动完成行为异常
Git auto completion behaving strangely
我在 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
s 在第 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
首先检查 Git 2.24 问题是否仍然存在,考虑到 2.23 和 2.24 已经在完成脚本上工作。
还要检查您的 Git bash completion is correctly installed.
我加了:
您的 .bashrc/.profile
有可能在 运行 完成 bash 脚本时出现某种错误。
除了至少定义 $PATH
)
之外,您还需要使用 .bashrc/.profile
("empty" 的最小(几乎为空)内容对其进行测试
OP alamoot确认:
Great call!
In my ~/.bash_profile
I was calling a script which was setting a custom $BASH_COMPLETION
and $BASH_COMPLETION_DIR
.
This custom script was part of and old "system setup" I don't need no more.
So taking it out I have got git completion working again.
我在 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
s 在第 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
首先检查 Git 2.24 问题是否仍然存在,考虑到 2.23 和 2.24 已经在完成脚本上工作。
还要检查您的 Git bash completion is correctly installed.
我加了
您的 .bashrc/.profile
有可能在 运行 完成 bash 脚本时出现某种错误。
除了至少定义 $PATH
)
.bashrc/.profile
("empty" 的最小(几乎为空)内容对其进行测试
OP alamoot确认:
Great call!
In my~/.bash_profile
I was calling a script which was setting a custom$BASH_COMPLETION
and$BASH_COMPLETION_DIR
.
This custom script was part of and old "system setup" I don't need no more.
So taking it out I have got git completion working again.