如何在Mac OSX上获取Git分支名称的自动补全?

3
我已经尝试了数天来调试此问题,但未能成功。我已经尽力在我的机器上安装git和git补全,但我仍然无法自动完成分支名称(本地或远程)。然而,git子命令的完成工作非常好。 我使用的是运行Sierra 10.12.5的Mac。
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.5
BuildVersion:   16F73

我正在使用通过Homebrew安装的bash。

$ 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点文件以排除这些文件的影响。
我遇到的所有指南似乎都暗示通过下载最新的git-completion.bash(如上所述)并进行源代码处理即可解决自动完成问题,但很遗憾,在这种情况下无法解决。Bash自动完成似乎正常工作于其他工具(例如tmux),因此我认为该问题局限于git自动完成。
我是否遗漏了什么?我需要采取哪些额外步骤来激活分支名称的自动完成?

1
问题可能是您正在使用的 bash 版本。我认为现代 bash 完成配置脚本需要比 macOS 自带的更新的 bash。您可能需要 a) 安装更新的 bash;b) 将其添加到 /etc/shells;以及 c) 使用 chsh(或系统偏好设置 > 用户和组 > 解锁/验证 > 右键单击帐户 > 高级选项)更改您的帐户 shell。 - Ken Thomases
1
这是我的问题。echo $BASH_VERSION 返回系统的 bash 版本 3.2.57(1)-release。在将 Homebrew 安装的 bash 添加到 /etc/shells 并运行 chsh -s /usr/local/bin/bash 后,新的 shell 现在可以自动完成分支名称!如果您想将评论作为答案添加到此问题中,我会很乐意接受它。 - michaelxor
1个回答

3
问题在于您使用的bash版本。现代的bash自动完成配置脚本需要比苹果macOS提供的更新版本。您需要a)安装更新的bash; b)将其添加到/etc/shells中; c)使用chsh(或System Prefs> Users&Groups> unlock/authenticate>右键单击帐户>高级选项)更改您的帐户shell。

我还必须进一步确保完成脚本被源化。: https://www.linkedin.com/pulse/how-enable-git-tab-completion-bash-mac-os-x-conor-livingston/ - Vince W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接