2013-02-20 21 views
92

當使用OSX的git時,在我修改一個文件後,我可以簡單地做git commit <tab>,然後它會自動完成文件的名稱修改。但是,如果我從自制軟件安裝更新版本的git並使用它,則該功能不再有效(意思是我按<tab>,它只是「詢問」我要執行的文件,甚至包括那些沒有變化)。Homebrew的`git`沒有使用完成

誰能解釋一下爲什麼,以及如何解決這個問題?我更喜歡使用自制軟件,因爲它是最新的。

我的shell是zsh,安裝bash-completionzsh-completions都沒有工作(即使在遵循自制軟件的安裝後說明之後)。

此外,通過自制的git安裝後,它說

Bash completion has been installed to: /usr/local/etc/bash_completion.d 
zsh completion has been installed to: /usr/local/share/zsh/site-functions 

所以我不應該能夠使用其中的一個?

+0

你使用的是什麼版本的'zsh'和'git'? – simont 2013-02-20 06:03:16

+0

最新的自制軟件。 zsh 5.0.2和git 1.8.1.3 – user137369 2013-02-20 13:37:25

+0

其他'git'完成工作(例如'git co ''> git commit')? – simont 2013-02-28 05:44:35

回答

184

您正在尋找:

brew install git bash-completion 

由於warpc的評論狀態,你需要將以下添加到您的~/.bash_profile得到自制的慶典完成的工作:

if [ -f $(brew --prefix)/etc/bash_completion ]; then 
    . $(brew --prefix)/etc/bash_completion 
fi 

當您安裝bash完成公式時,上面提到的注意事項。

+2

我的shell是zsh。這是否意味着我應該'brew install git zsh-completions'? 此外,它說,'與自制安裝git的安裝完成後,擊完成: /usr/local/etc/bash_completion.d zsh中已經安裝完成到: 在/ usr/local/share下/ zsh的/網站功能',所以我不能使用其中之一? – user137369 2013-02-20 02:17:00

+0

既不安裝'bash-completion'或'zsh-completions'工作(即使在安裝後遵循自制程序的指示)。 – user137369 2013-02-20 03:59:43

+0

你重新啓動了你的終端嗎? – 2013-02-20 15:46:11

0

它可能與在Lion中使用libedit而不是readline有關。

嘗試在git之前安裝readline。

brew install readline 
+0

不是這樣,readline已經安裝好了。 – user137369 2013-02-20 02:56:12

4

我有同樣的問題,甚至今天早上發現這篇文章。我通過用brew update更新brew來解決此問題,然後使用brew reinstall git重新安裝git。

我被告知另一個阻止自制鏈接過程的文件,在我的情況下它是/usr/local/share/zsh/site-functions/git-completion.bash。刪除文件並運行brew link git解決了這個問題。猜測這只是我們偶然發現的一個糟糕的配方版本。

+1

您還會注意到您使用的git版本是Apple的版本,而不是由Homebrew安裝的版本。至少在我的情況下,我做到了。你可以用'git --version'來檢查版本。 – 2013-03-02 16:36:59

+0

不可以。這仍然不適合我。我一直回到使用OSX的git,完成這個功能太放大了。 – user137369 2013-03-02 20:51:28

+0

更新到小牛後,git-completion停止工作。我不得不'重新安裝git'並且'brew重新安裝bash-completion'以使其重新工作。 – 2014-06-05 11:06:18

3

找到了一個工作解決方案。這是最近的(16小時前創作,並在2小時前提交),它來到directly from homebrew

brew install git --without-completions

剛剛試了一下,終於按預期工作。

+3

我看不到如何在沒有完成的情況下安裝'git'可以改善無法完成的情況。我相信格雷厄姆Perks的答案http://stackoverflow.com/a/14970926/1199564應被標記爲正確的答案。 – mgd 2013-09-01 13:37:13

+0

我有一個類似的問題,我已經解決了重新安裝'git --without-completions'並從'.bash_profile'找到'bash-completion.bash'文件,這些文件很可能會按照標準程序被覆蓋。 – Leonardo 2013-10-28 23:09:39

+1

這不是一個正確的答案。 @graham perks的答案是正確的。 – CantGetANick 2013-11-12 10:26:43

13

由於某種原因,我在$(brew --prefix)/etc/bash_completion缺少文件,以便@Graham心動正確的答案並沒有爲我

它結束了在我的情況下,修復工作是:

brew unlink bash-completion 
brew link bash-completion 
+0

以下@Graham Pixel的回答後,這最終使它爲我炒作。 – Luke 2015-07-14 06:37:09

66

該得到的git的標籤上完成工作OSX,而​​無需重新啓動終端:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile 
+5

當使用'&&'時,將它稱爲單線程是有點作弊的。任何bash腳本都可以像這樣一行一行。 – user137369 2015-01-24 23:24:58

+1

這實際上有效!謝謝! – kodisha 2016-03-02 16:16:34

+0

你是真正的MVP! – heez 2016-11-02 15:06:44

8

我搞清楚這$(brew --prefix)/etc/bash_completion返回解決的問題執行時。所以在一個簡單的:

chmod +x $(brew --prefix)/etc/bash_completion 

一切都工作正常。不過,我想知道爲什麼Homebrew不會在安裝時使bash_completion文件成爲可執行文件。

+0

不,這是錯誤的。 'bash_completion'意思是'source'',所以定義在你的shell中;執行將不起作用。 – toddkaufmann 2017-09-17 14:25:04

+0

@toddkaufmann的確如此。你是對的。 – 2017-09-17 20:53:39

5

如果其他人犯我愚蠢的錯誤,請嘗試brew install git。我使用的是Xcode附帶的git,並沒有意識到我從來沒有安裝過Homebrew的git來獲得自動補全。

0

對於已經安裝了brew bash-completion的用戶。我沒有安裝git完成腳本,也找不到任何水龍頭。

所以我手動添加它:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

請注意,您可以重命名文件並刪除擴展爲它工作。

如果您沒有安裝完成或安裝git,請將其安裝在接受的答案中。

brew install git bash-completion

1

對於我來說,我不得不把

source $(brew --prefix)/etc/bash_completion 

.bashrc(不.bash_profile中)來得到這個工作。

「而.bashrc中執行 交互式非登錄shell .bash_profile是爲登錄shell執行的,」 - 從What is the difference between .bash_profile and .bashrc?在我看來,在打開一個新的終端窗口時的MacOS塞拉利昂不執行.bash_profile,只.bashrc

我不會把它放在_bash_profile中,因爲那樣我就不得不重新啓動/註銷以使更新生效。

0

如果您有$BASH_VERSION < 4。1,如3.2.57(1)-release然後繼續:

brew install bash-completion 
# In ~/.bash_profile : 
if [ -f $(brew --prefix)/etc/bash_completion ]; then 
    . $(brew --prefix)/etc/bash_completion 
fi 

但是,如果你已經brew install bash獲得版本4.4.12(1)-release 你可以使用更好,更完整的完成:

brew install [email protected] 
# In ~/.bash_profile: 
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \ 
&& . "$(brew --prefix)/share/bash-completion/bash_completion" 

注意,有些軟件包(沖泡,搬運工,TMUX)仍將把一些完工進入$(brew --prefix)/etc/bash_completion.d/,所以你可以添加:

for completion in "$(brew --prefix)/etc/bash_completion.d/"* 
do 
    . $completion 
done 

最後,你應該能夠添加的git完成腳本,如果由於某種原因,你安裝的git的方式並沒有將它添加到這類原因:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \ 
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \ 
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \ 
    -o $(brew --prefix)/etc/bash_completion.d/git 

你可以得到與上述添加。