コマンドラインで*ブランチ*のgitオートコンプリート?


350

私のLinuxマシンでは、Git を使用したブランチのオートコンプリートあります。

[ bashの補完ではなく、gitブランチの補完(コマンド、ファイルなど)について話していることに注意してください。したがって、レーンの答えはまったくありません]

たとえば、git checkout+ TABと入力して、ブランチのリストを取得できます。

または、「git checkout feb*+ TAB」と入力して、「feb」で始まるすべてのブランチを取得できます。

Macでこの機能を取得するにはどうすればよいですか?

私はダウンロードして実行しようbash-completion/bash_completionとしましたbash-completion/bash_completion.sh.inが、喜びはありませんでした。最初はについてのエラーメッセージを出しましたdeclare: -A invalid_option。2番目はエラーがありませんでした。私はときにgit checkout+ TAB私はまだ枝、ディレクトリ内のファイルの一覧を取得していないのに。私はプロジェクトのルートにいます。

ディレクトリおよびbashコマンドのオートコンプリートは正常に機能しているため、Gitに固有です。

回答:


483

OK、だからgit autocompletionスクリプトが必要だった。

私はこのURLからそれを得ました:

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

ホームディレクトリ(~)がターゲットで使用されるため、これを実行するときにどのディレクトリにいるかを心配する必要はありません。

次に、~/.bash_profileファイルに次の「存在する場合は実行」コードを追加しました。

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

更新:.bashrcファイルを縮小するために、これらのコードをより簡潔にします。この場合は、次を使用します

test -f ~/.git-completion.bash && . $_

注:$_は、前のコマンドの最後の引数を意味します。. $_つまり、それを実行することを意味します- .git-completion.bashこの場合は「それ」です

これは、UbuntuとOSXの両方、およびスクリプト.git-completion.bashscriptのないマシンでも機能します。

git Tab(実際はgit TabTab)が魅力のように動作します!

ps:これがすぐにうまくいかない場合は、実行chmod u+x ~/.git-completion.bashして自分に必要な許可を与える必要があるかもしれません。

  • chmod ファイルのパーミッションを変更するコマンドです
  • u は、ファイルを所有するユーザー、デフォルトでは作成者を意味します
  • + 許可を設定/有効化/追加することを意味します
  • x 実行許可、つまりスクリプトを実行する機能を意味します

1
はい、bashスクリプトを追加した後にターミナルを再起動すると動作しました。私はここに座って、なぜオートコンプリートするためModelsにヒットm Tabしたときにフォルダにオートコンプリートしようとし続けたのか疑問に思っていましたmaster
アレックス

1
別のヒントについては、unix.stackexchange.com / q / 48862/10043も参照してください
Michael Durrant

3
受け入れられた答えが誰にも役に立たない場合はsource ~/.bash_profile、コードを貼り付けてからこれを試してください。ターミナルを再起動しても同じことが行われます。
ベン

ありがとうございました!他にもいくつか試してみましたが、何も機能しませんでした(このgithub.com/bobthecow/git-flow-completion/wiki/…を含む)。ソリューションは魅力のように機能しました;)
rgoliveira

1
(あなたが醸造ありませんgitが、アップルのデフォルトgitbrew install gitなど奇妙なエラー直面している人のために、端末の再起動git checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
サチン

89

一部の人々は、パッケージマネージャーを使用して、Mac OSパッケージのインストール、更新、および構成を自動化することを好みます。私はパッケージマネージャーのファンであり、HomebrewはMac OSの最高のパッケージマネージャーだと思います(事実上のMac OSパッケージマネージャーだと言う人もいます)。

あなたが自作をインストールしたら、あなたは簡単にインストールできるのgitを一緒にbashの補完brew install git bash-completion

次に、以下を以下に入れる必要があります~/.bash_profile

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(注:このインストールが404エラーで失敗し、既にgitがインストールされている場合は、このbrewインストールのgit部分を削除するだけです)

gitおよびbash-completion with brewのインストールに関する詳細は、こちらをご覧ください。


27
追加gitして追加すると、bash-completion追加すると、すべて同じではない.git-completion.bash 彼らは別のプログラムであり、彼らは全く異なることを行う- 1は、bashコマンドの自動補完を行い、他方はgitのコマンドの自動補完と「NairさんTWAINが会うん。)
マイケル・デュラント

魅力のように働いてくれてありがとう。私に追加されたスクリプトの使用方法を説明してください~/.bash_profile
ビカスバンサル

他の人がこの答えについて言ったことにもかかわらず、それはターミナルでgitオートコンプリートを機能させたものです。
イアン

32

ターミナルでこれを実行します:

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

次に、これを行います:

vi ~/.bash_profile

次の行を追加します。

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

それで全部です。これは私のために働いた。


1
(第二ステップ)誰もがちょうどこれを行う、テキストエディタでbash_profileを開くことを好む場合:オープン-eの.bash_profile
ニコラ・ボーダン-Ripert

2
未使用のMac OS High Sierraでは、~/.bash_profileファイルは存在しません。ファイルを作成し、そのifスクリプトをそこに配置して保存するだけで問題ありません。後でシェルをリロードすると、動作します。
agm1984

11

gitそしてgit-completion.bash、すでに(MacOSのコマンドラインツールが付属していますxcode-select --install)。bashのオートコンプリートを有効にするには、これをに追加します~/.bash_profile

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

これにより、gitブランチのオートコンプリートも有効になります。


コマンドラインツールがインストールされていることはかなり確かですが、私の場合はそのファイルは存在しません。ただし、brewを使用して満足です(私のgitもbrewを使用しているため、おそらく賢明です)。
drevicko

ありがとう!IMO、これは緑色のチェックマークが付いた答えです。
geekisthenewcool

8

混乱を招くものがあります:brewまたはportsがインストールされていますが、のシステムgitを使用しています/usr/bin/。これを確認するには:

which git

表示される場合/usr/bin/git、brewが正しく構成されていないか、brew経由でgitをインストールしていません。

brew経由でgitをインストールする場合、brewのbash補完を有効にすると、gitのbash補完も有効になります。これは、/usr/local/etc/bash_completion実際にはのすべてをソース/usr/local/bash_completion.dとし、gitのbrewパッケージがそこにgit完了スクリプトをインストールするためです。


これは理にかなっていますが、「brewのbash補完を有効にする」方法はありますか?あなたはそれを行う方法を見逃しています、これはあなたの答えの一部であるはずです
-skplunkerin

私はこれをしなかったを通じて(それは、あなたに感謝作品)simplified.guide/macos/bash-completionが、自動補完は...数秒は遅れ奇数である
skplunkerin

4

「bash_completion」オプションを有効にして、MacPortsからbashとgitをインストールできます。これはおそらく、gitと補完の両方を最新の状態に維持する最も簡単な方法です。

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

MacPortsのをインストールするには:http://www.macports.org/install.php/

追加情報

Linuxシステムで完了設定を見つけるには、/ etc / bash_completion.d / gitを見てください(長いファイルです)。ただし、/ etc / bash_completion(/etc/profile.d/bash_completion.shからソースされている/ etc / profile内のファイル)を介して補完フレームワークによってソースされるように設計されているため、それ自体をコピーすることはおそらく機能しません.dは/ etc / profileから取得されます)。


2

gitの補完が部分的に壊れている場合は、sourcingした後でもhttps://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash、gitバージョンを更新する必要があるだけです。

たとえば、git check+ と入力TABすると、正しくオートコンプリートされgit checkoutます。しかし、git checkout+ と入力するとTAB、ブランチのリストは表示されず、のみが表示されましたHEAD

私の修正は、私のgitバージョンを更新することでした。私は2.7.0でしたが、明らかに最新のものと互換性がありませんでしたgit-completion.bash。を実行brew upgrade gitして2.13.0に更新しましたが、現在はブランチ名が適切に自動補完されています。


私は同じ問題を得ていたが、私は実行しなければならなかったbrew upgrade gitし、brew link git (有効オーバーライドして)
トペ

1
キャッチ@Topeをありがとう。に変更updateしましたupgrade
ウィスバッキー

2

この問題を解決するために私が見つけた最良の参考文献は、Connor LivingstonによるSpinDanceです。

場合はgit-completion.bashスクリプトがマシン上に存在しない、私は(これは上記のリンクから取得してくださいこれを)と呼ばれる新しいファイルにローカルマシンに保存のgit - completion.bash/ usr / local / etc / bash_completion.d /ディレクトリ。場合はgit-completion.bashスクリプトがマシンに存在しますが、ではありません/usr/local/etc/bash_completion.d/のディレクトリ、我々はそのディレクトリにそのコピーを作成する必要があります。簡単なsudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bashがトリックを行うはずです。/usr/local/etc/bash_completion.d/に興味がある人向け ディレクトリ:新しい補完コマンドを保存するためのもので、マシンにまだ存在しない場合は作成する必要があります。

この時点で、git-completion.bashスクリプトがローカルマシンの/usr/local/etc/bash_completion.d/ディレクトリに存在するはずです。〜/ .bash_profileからポイントすることにより、git補完スクリプトをbashにプラグインします。

注:前の文のチルダは、コンピューターのホームディレクトリを指します。〜/ .bash_profileに次の行を追加します:source /usr/local/etc/bash_completion.d/git-completion.bashそして保存します。最後のステップは、bashプロファイルをリロードすることです。これを実現するには、現在のbashセッションでsource〜/ .bash_profileを実行します。


1

それを試してみましたが、ブランチではうまく機能しますが、git st+ を実行tabすると、このようなエラーが表示されます

不明なオプション:--list-cmds = list-mainporcelain、others、nohelpers、alias、list-complete、config使用法:git [--version] [--help] [-C] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

インターネットを検索し、その見つかった--list-cmds中で.git-completion.bashのgitの最新バージョンにあった、私のMac上でGitのバージョンでした2.17.2

ここに解決策があります

解決策1

  1. git --versionコマンドを使用してgitのバージョンを確認します
  2. 次に、私がやったのと同じバージョン番号をURLに入れます

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. 次に、上の答えと同じ手順に従い、以下のコードを入力します ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi

解決策2

gitバージョンを最新に更新してみてください。


0

oh-my-zshをインストールし、zshをデフォルトのシェルとして設定し、後で感謝します:)


タブを打った後、まだノー分岐提案-私は正確にそれに対処する必要がないのを期待して、それを行っている
Jytug

実際にはoh-my-zshも、別のプラグインシステムもまったく必要ありません!Gitの補完機能はすぐに使用できます。有効にするだけです。
SilverWolf

0

ほとんどのユーザーはgitxcodeコマンドラインツールの一部としてインストールされており/usr/bin/git、gitのbash完了ルールはで入手できます/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

この場合、Homebrewからgitをインストールする必要も、raw.githubusercontent.comからソースgit完了ルールをインストールする必要もありません。次のようにシンボリックリンクを作成するだけです:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

注:bash-completionHomebrewからパッケージをインストールして構成したことを確認してください。


-2

.bashrcファイルを見つけます。

開いて、この行を下部に追加します。

source /etc/bash_completion.d/git


1
/etc/bash_completion.d/比較的新しいシステム(OSX 10.10.3)では、フォルダーはありません。
リビングテック

作成してみてください。
crmpicco

bash_completionではなく、さまざまなことを行うgit_completionです。
マイケルデュラント

@MichaelDurrantそれは動作します。私を信じて。;)prowrestlingtees.com/media/catalog/product/cache/1/image/...
crmpicco

@crmpicco作成手順を教えてください/etc/bash_completion.d/git。それはあなたの答えをより価値のあるものにするでしょう。
ダニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.