我试图连续几天调试此问题失败了。我已经尽力在我的机器上安装git和git完成,但是我仍然无法自动完成分支名称(本地或远程)。但是,完成git子命令可以正常工作。
我有一台运行Sierra 10.12.5的Mac。
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.5
BuildVersion: 16F73
我正在使用bash,通过Homebrew安装。
$ brew info bash | head -1
bash: stable 4.4.12 (bottled), HEAD
我已经通过Homebrew安装了git。
$ brew info git | head -1
git: stable 2.13.1 (bottled), HEAD
我已经通过Homebrew安装了bash-completion。
$ brew info bash-completion | head -1
bash-completion: stable 1.3 (bottled)
我已经找到了必要的脚本。
$ source $(brew --prefix)/etc/bash_completion
我已经确认git-completion.bash实际上是在bash_completion.d目录中。
$ ll /usr/local/etc/bash_completion.d/git-completion.bash
lrwxr-xr-x 1 michael 65 Jun 18 02:19 /usr/local/etc/bash_completion.d/git-completion.bash -> ../../Cellar/git/2.13.1/etc/bash_completion.d/git-completion.bash
使用git时,我在尝试自动完成命令时看到了正确的自动完成行为。
$ git che{tab}
checkout cherry cherry-pick
但是,分支名称完成似乎根本不起作用。相反,自动完成尝试建议另一个子命令
$ git checkout{tab}
add annotate apply archive bisect [...list continues]
git确实知道这个存储库的其他分支(远程和本地)。
$ git branch -a
master
* foo
remotes/origin/HEAD -> origin/master
remotes/origin/bar
remotes/origin/foo
remotes/origin/master
然而,无论我暗示多少字母,git都不会建议另一个分支。
$ git checkout ma{tab} # => nothing
$ git checkout mas{tab} # => nothing
$ git checkout mast{tab} # => nothing
$ git checkout maste{tab} # => nothing
这发生在我机器上的每个git存储库中,而不是被隔离到一个。我有必要的权限来读取和写入这些存储库。
我尝试卸载/重新安装git和bash-completion。我曾尝试直接从Github获取规范的git-completion.bash脚本并取而代之。我试图删除所有我的git dotfiles来统治这些。
我遇到的所有指南似乎都暗示我的自动完成问题将通过下载最新的git-completion.bash(如上所述)和采购来解决,但遗憾的是,这并不是切割在这种情况下。 Bash完成似乎对其他工具(例如tmux)正常工作,所以我认为这个问题已经本地化为git完成。
我错过了什么吗?我需要采取哪些额外步骤来激活分支名称的完成?
答案 0 :(得分:3)
问题是您正在使用的bash
版本。现代bash完成配置脚本需要比Apple附带macOS更新的bash
。您需要a)安装较新的bash
; b)将其添加到/ etc / shells; c)使用chsh
(或系统首选项>用户和组>解锁/验证>右键单击帐户>高级选项)更改帐户的shell。