如何在Mac OSX上完成分支名称的Git完成?

时间:2017-06-18 10:25:20

标签: git bash macos homebrew macos-sierra

我试图连续几天调试此问题失败了。我已经尽力在我的机器上安装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完成。

我错过了什么吗?我需要采取哪些额外步骤来激活分支名称的完成?

1 个答案:

答案 0 :(得分:3)

问题是您正在使用的bash版本。现代bash完成配置脚本需要比Apple附带macOS更新的bash。您需要a)安装较新的bash; b)将其添加到/ etc / shells; c)使用chsh(或系统首选项>用户和组>解锁/验证>右键单击帐户>高级选项)更改帐户的shell。