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


144

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

なぜ、そしてそれを解決する方法について誰かがいくつかの光を当てることができますか?Homebrewのgitを使用することをお勧めします。

私のシェルはzshで、インストールbash-completionzsh-completions機能もしません(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

だから私はそれらのうちの1つを使うことができないのですか?


どのバージョンのzshgit、あなたが使用していますか?
simont 2013

自作の最新作。zsh 5.0.2およびgit 1.8.1.3
user137369

他のgit補完は機能しますか(git co<TAB>==> git commitなど)?
simont 2013

2
私はいくつかの異なる問題がここで終わると思いますが、brewを介してgitをインストールすると、これが修正されました。そうですzsh-completions(多分0.17.xに盲目的に更新)する前に、それは罰金を働いていたものの、マックのgitと幸せではなかったです。
ti7 2016

回答:


287

あなたが探しています:

brew install git bash-completion

warpcのコメントにあるように、~/.bash_profilehomebrewのbash補完を機能させるには、以下を追加する必要があります。

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

上記は、bash-completion式をインストールする際の警告に記載されています。


注: 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/ディレクトリに含まれている可能性があるその他の補完機能には、追加のエクスポートが必要です。


3
私のシェルはzshです。それは私がやるべきことを意味しbrew install git zsh-completionsますか?また、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、と表示されます。
user137369 2013

2
インストールbash-completionzsh-completions機能もしなかった(インストール後に自作の指示に従っても)。
user137369 2013

12
また、bashケースの〜/ .bash_profileにこのコンテンツを追加しましたか?if [-f $(brew --prefix)/ etc / bash_completion]; その後。$(brew --prefix)/ etc / bash_completion fi
warpc '20

5
私は醸造せずにgitをすでにインストールしています。次に、brewを使用してbash_completionをインストールします。brew install bash-completionを実行して上記のコードを追加しましたが、うまくいきませんでした
MagePsycho

3
これが機能するには、brew経由でgitをインストールすることが不可欠であることに注意してください。Appleバージョンのgitが問題の一部であることを知りませんでした。私はそれを知る前にこの回答に反対票を投じましたが、今は投票できません:(
Reimus Klinsman

109

これはあなたのターミナルを再起動することなく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

14
を使用する場合、ワンライナーと呼ぶのは少し簡単&&です。すべてのbashスクリプトは、そのようなワンライナーになる可能性があります。
user137369

1
あなたは本当のMVPです!
heez

2
間違いなくbrew installメソッドよりも優れています。それが機能するからといって。
dchayka 2017

2
bashがgit-completionコマンドを取得しなかった理由について、解決策を何時間も探していました。最後に、これはうまくいきました!どうもありがとうございます!
TheAmazingKnight 2018年

1
これが実際の解決策です
Rigin Oommen '14

22

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


19

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

それは私の場合の修正に終わりました:

brew unlink bash-completion
brew link bash-completion

@Graham Pixelの回答をフォローした後、これはようやく私にとって中立的なものになりました。
ルーク

これは、Homebrew 1.6.0、git 2.17.0(hub 2.2.9)、およびOS X Sierra 10.12.6のbash-completion 1.3でも動作しました。
18

10

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

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

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


5
いいえ、これは間違っています。 定義がシェルbash_completionにあるようにsource'd されることを意図しています。実行しても効果はありません。
toddkaufmann 2017

5

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

brew install git --without-completions

試してみたところ、最終的には意図したとおりに機能しました。


3
git完了せずにインストールすると、完了しない状況がどのように改善されるかわかりません。グラハムパークスの回答であるstackoverflow.com/a/14970926/1199564は正しい回答としてフラグを立てられるべきだと思います。
mgd 2013

私は同様の問題を抱えていたので、再インストールgit --without-completionsして解決したので、そのbash-completion.bashファイルからのファイルのソーシングは、.bash_profileおそらく標準的な手順に従ってオーバーライドされる可能性が高いです。
Leonardo

1
これは正解ではありません。@graham perksの答えは正しいです。
CantGetANick 2013年

@CantGetANickグラハムの答えは私の問題を解決しませんでした、これは解決しました、それが私がそれをマークした理由です。
user137369

1
user137369と100%同意する:自作のbash-completionパッケージをすでにインストールしているので、@ grahamの答えがうまく機能しない可能性があります。ただし、brew install gitすべてを修正しました(--without-completionsは不要)。これも正解だと思います。
ブロンソン

5

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

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


1
また、使用しているgitのバージョンがAppleのものであり、Homebrewによってインストールされたバージョンではないことにも気づくでしょう。少なくとも私の場合はそうしました。バージョンを確認するにはgit --version
Jonathan Knapp

いいえ。それでもまだうまくいきません。私は常にOSXのgitを使用することに戻ってきましたが、その完了は手放すには大きすぎる機能です。
user137369 2013年

Mavericksへのアップデート後、git-completionが機能しなくなりました。私はそれを再び働かせなければならなかったしbrew reinstall git、またbrew reinstall bash-completionしなければならなかった。
KrešimirNesek

3

$BASH_VERSION4.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

ステップ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を試してください


1

私にとっては、

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

.bashrcこれを機能させるために(.bash_profileではなく)に入れます。

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

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


1

これは私のためにMojave(OSX 10.14.1)で機能しました:

brew install bash-completion

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

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

警告の数を単純に増加させます
フセインアクラム

1

2019では、Bash v5を使用して、.bash_profileまたはでgit bash完了スクリプトを明示的にソースする必要はありません。.bashrc

  1. 次の2行が含まれていることを確認してください .bashrc
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"
  1. git bash完了スクリプト(https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash)をダウンロードして、次の名前で保存し/usr/local/etc/bash_completion.d/ますgit

それでおしまい!Bashは自動的にgit補完ファイルを取得し、補完を有効にします。


サイド注:私はこれらのすべての変更を置くことをお勧めします.bashrc(。すなわちからあなたは、対話型シェルにドロップすることは、この性を保証などをpipenv shell)bashがソースになるよう、補完が正しくロードされます.bashrcとNOT .bash_profile


0

これは、Lionでreadlineの代わりにlibeditが使用されていることに関係している可能性があります。

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

brew install readline

0

すでに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


0

Homebrewを使用してgitをインストールした場合、おそらくgitの完了をサポートするために何かをインストールする必要はありません。「git-completion.bash」ファイルはどこかにあります(私がここにいた:/usr/local/git/contrib/completion/git-completion.bash)

あなたがする必要があるのはファイルを見つけることです:sudo find / -type f -name "git-completion.bash"

次に、パスを.bash_profileで取得します。たとえば、この行を〜/ .bash_profileに追加する必要がありました。

source /usr/local/git/contrib/completion/git-completion.bash

〜/ .bash_profileを読み込むか、ターミナルを再度開くことを忘れないでください;)

from: how-enable-git-tab-completion-bash-mac-os-x


@ user137369あります-ここでは、すでにインストールされているものをインストールする必要はありません...
Dozon Higgs

0

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

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

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

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

-1

MAC-OS Mojave 10.14でGITコマンドの自動補完を有効にする私は開発者であり、コマンドラインから常にGITを使用しています。開発の観点から考えると、GITの操作にはコマンドラインを使用して多くのコマンドを実行していました。ほとんどの場合、部分的にサポートしているコマンド補完の自動サポートがMAC OSにないのは非常に不愉快です。コマンドの提案と同様に、入力した文字に使用できるコマンドは何ですか。そのため、タイプミスが発生するため、非常に長いコマンドとほとんどの場合反復的なタスクを入力するのは非常に面倒です。:(

タブ補完は確かに速くて簡単です。残念ながら、一部のMacコンピューターでのデフォルトのgitのインストールでは、タブ補完が有効になっていません。

そのため、私は問題の修正を探していました。StackOverflow、GitHubなどのWeb検索から、およびメディアからいくつかの解決策が見つかりました。残念ながら、それらの解決策は私にとってうまくいかず、さまざまな解決策を何度も試すことに不満を感じました。

私は深く検索してさまざまな解決策を試していましたが、幸いにも、それは簡単な修正です。以下は、いくつかの投稿から収集した手順で、最終的には期待どおりに機能しました。私のようにこの問題を抱えている他の人と共有したいと思います。

あなたがウェブ検索に行くと、git補完bashファイルに言及した多くの解決策を見つけることができます。GitHubガイドも同様です。ただし、最初に、git-completion.bashファイルが、インストールから取得したgit-coreまたはその他の何かを使用してMACコンピューターに既にあるかどうかを確認することをお勧めします。以下のコマンドを使用できます。

sudo find / -type f -name "git-completion.bash"

以下の結果が得られます。(内容により多少異なる場合があります)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

git-coreからインストールされているものを選択することをお勧めします

git-completion.bashスクリプトがマシンに存在しない場合は、上記の下記から取得して、/ usr / local / etc /のgit-completion.bashという新しいファイルにローカルマシンに保存してください。 bash_completion.d /ディレクトリ。

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Bashシェルを使用する場合、Gitには有効にできる優れたオートコンプリートスクリプトが付属しています。次のGitソースコードから直接ダウンロードしてください。

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

git-completion.bashスクリプトがマシンに存在するが、/ usr / local / etc / bash_completion.d /ディレクトリにない場合は、そのディレクトリを作成してファイルをそこにコピーする必要があります。以下のコマンドは仕事をします:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

上記完了後。git-completion.bashスクリプトは、ローカルマシンの/usr/local/etc/bash_completion.d/ディレクトリに存在する必要があります。

次に、以下のコマンドを使用してプロファイルを更新する必要があります。追加されたbashファイルをターミナルコンテキストにロードします。

source ~/.bash_profile

すごい!!!あなたはそれをやった。ターミナルウィンドウを起動して試してください。「git sta」と入力するだけで、以下のように候補が表示されます。

git sta
stage    stash    status
git chec<TAB> will show git checkout

ここに私のGitHubの投稿を見てください:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

ここに私のMediumの投稿を見てください:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.