我試圖在幾天內調試此問題失敗。我已經盡我所能在我的機器上安裝git和git完成,但是我仍然無法自動完成分支名稱(本地或遠程)。但是,完成git子命令可以很好地工作。如何在Mac OSX上獲取分支名稱的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
我已經安裝了git通過自制軟件。
$ brew info git | head -1
git: stable 2.13.1 (bottled), HEAD
我已經通過Homebrew安裝了bash完成功能。
$ 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 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存儲庫中,而不是被隔離到一個。我有必要的權限來讀取和寫入這些存儲庫。
我試着卸載/重新安裝混帳和bash完成。我試圖直接從Github抓取規範的git-completion.bash腳本,然後取而代之。我試圖刪除所有我的git dotfiles來排除這些。
我遇到過的所有指南似乎暗示我的自動完成困境將通過下載最新的git-completion.bash(如上面鏈接)並採購它來解決,但可悲的是,這不會在此案件。 Bash完成似乎對其他工具(例如tmux)正常工作,所以我認爲這個問題已經本地化爲git完成。
我錯過了什麼嗎?我需要採取哪些額外步驟來激活分行名稱的完成?
問題可能是您正在使用的'bash'版本。我認爲現代的bash完成配置腳本需要比Apple在MacOS上運行的更新的'bash'。你可能需要a)安裝一個新的'bash'; b)將其添加到/ etc/shells;和c)使用'chsh'(或System Prefs> Users&Groups>解鎖/認證>右鍵單擊帳戶>高級選項)更改您的帳戶的shell。 –
賓果 - 這是我的問題。 'echo $ BASH_VERSION'返回系統bash版本'3.2.57(1)--release'。在將'homebrew'安裝的bash添加到'/ etc/shells'並運行'chsh -s/usr/local/bin/bash'之後,新的shell現在可以自動完成分支名稱!如果你想添加你的評論作爲這個問題的答案,我會很樂意接受它。 – michaelxor