我试了好几天都没有成功调试这个问题。我已尽力在我的机器上安装 git 和 git completion,但我仍然无法自动完成分支名称(本地或远程)。然而,完成 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。我试过捕获规范 git-completion.bash直接从 Github 获取脚本并改为采购。我试图删除我所有的 git 点文件以排除这些。
我遇到的所有指南似乎都暗示我的自动完成问题将通过下载最新的 git-completion.bash(如上链接)并获取它来解决,但遗憾的是,在这种情况下并不能解决问题. Bash 完成似乎对其他工具(例如 tmux)正常工作,所以我相信这个问题局限于 git 完成。
我错过了什么吗?我需要采取哪些额外步骤来激活分支名称的完成?
最佳答案
问题在于您使用的 bash
版本。现代 bash 完成配置脚本需要比 Apple 随 macOS 提供的更新的 bash
。您需要 a) 安装更新的 bash
; b) 将其添加到/etc/shells; c) 使用 chsh
(或系统偏好 > 用户和组 > 解锁/验证 > 右键单击帐户 > 高级选项)更改您帐户的 shell。
关于git - 如何在 Mac OSX 上获取分支名称的 Git 补全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44614025/