web-dev-qa-db-ja.com

Homebrewの「git」は補完を使用していません

OSXのgitを使用している場合、ファイルを変更した後、git commit <tab>を実行するだけで、ファイル名が変更されたものに自動的に補完されます。ただし、homebrewから新しいバージョンのgitをインストールして使用すると、その機能は機能しなくなります(つまり、<tab>を押して、何のファイルを作成するかを尋ねるだけです。変更)。

誰がなぜ、そしてそれを解決する方法についていくらか光を当てることができますか? homebrewのgitは最新のものなので、使用したいです。

私のシェルはzshであり、bash-completionzsh-completionsのどちらもインストールできませんでした(homebrewのインストール後の指示に従っても)。

また、homebrewで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

だから、それらのいずれかを使用することはできませんか?

129
user137369

あなたが探しています:

brew install git bash-completion

Warpcのコメントが述べているように、homebrewのbash-completionを動作させるには、~/.bash_profileに以下を追加する必要があります:

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

上記は、bash完了式をインストールする際の注意事項に記載されています。


注: Bash v4以降(brew install bash経由)を使用している場合は、brew install bash-completion@2を使用して、タブ補完を有効にし、警告に記載されているように以下を~/.bash_profileに追加します。

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Git、docker、youtube-dl、および$(brew --prefix)/etc/bash_completion.d/ディレクトリに含まれる可能性のあるその他の補完には、追加のエクスポートが必要です。

259
Graham Perks

これは、ターミナルを再起動することなく、OSX上で動作するgitタブの補完を取得します。

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
94
user2347638

何らかの理由で$(brew --prefix)/etc/bash_completionのファイルが見つからなかったため、@ Graham Perksの正解が機能しませんでした

私の場合の修正は次のとおりです:

brew unlink bash-completion
brew link bash-completion
19
Anentropic

他の誰かが私の愚かな間違いを犯した場合は、brew install gitを試してください。 Xcodeに付属のgitを使用していましたが、オートコンプリートを取得するためにHomebrewのgitをインストールしたことがないことに気付きませんでした。

17
Harvey

$(brew --prefix)/etc/bash_completionが実行されたときにPermission deniedを返すことを理解することで問題を解決しました。簡単な後:

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

すべてが正常に動作しています。 Homebrewがインストール時にbash_completionファイルを実行可能にしないのはなぜだろうかと思っています。

10

私は同じ問題を抱えていて、今朝この投稿を見つけました。 brew updateでbrewを更新し、brew reinstall gitでgitを再インストールすることで問題を修正しました。

その後、自作のリンクプロセスをブロックしている別のファイルが通知されました。私の場合は/usr/local/share/zsh/site-functions/git-completion.bashでした。ファイルを削除してbrew link gitを実行すると、問題が解決しました。それは私たちがつまずいたレシピのバージョンが悪いだけだと思います。

5
Jonathan Knapp

実用的なソリューションを見つけました。それはごく最近のもので(16時間前に作成され、2時間前にコミットされました)、 homebrewから直接 になります。

brew install git --without-completions

試しただけで、最終的に意図したとおりに機能します。

4
user137369

ステップ1:自動補完スクリプトをダウンロードします。

cd ~
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

ステップ2:.bash_profileおよび.bashrcを更新する

echo "source ~/git-completion.bash" >> .bash_profile

経由 https://www.anintegratedworld.com/git-tab-autocomplete-on-osx-10-11-el-capitan/

上記が機能しない場合は、 https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion を試してください

2
Feuda

$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 bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

一部のパッケージ(brew、docker、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

上記で取得して追加できます。

2
dlamblin

私にとっては、

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

これを機能させるには、.bashrc(.bash_profileではありません)に入れます。

「.bash_profileはログインシェルに対して実行され、.bashrcはインタラクティブな非ログインシェルに対して実行されます」 。bash_profileと.bashrcの違いは何ですか? MacOS Sierraはそうではないようです'.bash_profileのみ、新しいターミナルウィンドウを開くときに.bashrcを実行します。

更新を有効にするには再起動/ログアウトする必要があるため、_bash_profileには入れません。

1
antonyh

これはMojave(OSX 10.14.1)で機能しました:

brew install bash-completion

次に、〜/ .bash_profileに次の行を追加します。

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
1
ar31an

これは古い投稿であることは知っていますが、追加のパッケージをインストールする必要はありません。

Homebrewは、必要なものがすべて揃ったディレクトリがあることを通知します。

Bashを使用している場合は、.bash_profileに次の行を追加するだけです。

source /usr/local/etc/bash_completion.d/git-completion.bash
0
aldavigdis

すでにbash-completionのbrewがインストールされている場合。 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

0
Andrei

Lionでreadlineの代わりにlibeditが使用されていることと関係があるかもしれません。

Gitの前にreadlineをインストールしてください。

brew install readline
0
Alex