git auto-complete für *branches* in der Kommandozeile?

Auf meinem Linux-Rechner habe ich Autocomplete für Branches mit Git.

[Beachten Sie, dass wir über die Git-Branch-Vervollständigung sprechen, nicht über die Bash-Vervollständigung (z. B. Befehle, Dateien usw.). Also überhaupt NICHT Lanes Antwort ]

Zum Beispiel kann ich git checkout+ eingeben TABund bekomme eine Liste von Zweigen.

Oder ich kann git checkout feb*+ TABeingeben, um alle Zweige zu erhalten, die mit "feb" beginnen.

Wie bekomme ich diese Funktion auf einem Mac?

Ich habe versucht, es herunterzuladen und auszuführen bash-completion/bash_completion, bash-completion/bash_completion.sh.inaber keine Freude. Die erste gab Fehlermeldungen über declare: -A invalid_option. Der zweite gab keine Fehler. Wenn ich git checkout+ TABerhalte, erhalte ich immer noch eine Liste der Dateien im Verzeichnis, keine Zweige. Ich bin im Projektstamm.

Die automatische Vervollständigung für Verzeichnisse und Bash-Befehle funktioniert einwandfrei, ist also spezifisch für Git.

Ich bin gerade dieser Community beigetreten, daher kann ich noch nicht antworten, aber ich fand "oh-my-zsh" super super hilfreich und ich mag die Benutzeroberfläche wirklich: github.com/ohmyzsh/ohmyzsh Dies ist natürlich für Leute mit zsh. Ich nehme an, es funktioniert nicht für Bash ...
Jetzt, da der Mac zsh anstelle von bash verwendet, kann sich diese Antwort als nützlich erweisen.
für zsh-Benutzer: echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc link

Antworten (15)

Ok, also brauchte ich das Git -Autocompletion-Skript.

Ich habe das von dieser URL mit dem folgenden Befehl in der Terminal-App erhalten:

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

Sie müssen sich keine Gedanken darüber machen, in welchem ​​Verzeichnis Sie sich befinden, wenn Sie dies ausführen, da Ihr Home-Verzeichnis ( ~) mit dem Ziel verwendet wird.

Dann habe ich meiner ~/.bash_profileDatei den folgenden Code "Ausführen, falls vorhanden" hinzugefügt:

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

Update: Ich mache diese Code-Bits prägnanter, um meine Datei zu verkleinern .bashrc, in diesem Fall verwende ich jetzt:

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

Hinweis: $_bedeutet das letzte Argument des vorherigen Befehls. so . $_bedeutet es ausführen - "es" ist .git-completion.bashin diesem Fall

Dies funktioniert immer noch sowohl unter Ubuntu als auch unter OSX und auf Computern ohne das Skriptskript .git-completion.bash.

Jetzt git Tab(eigentlich ist es git TabTab) funktioniert wie ein Zauber!

ps: Wenn dies nicht auf Anhieb funktioniert, müssen Sie möglicherweise rennen chmod u+x ~/.git-completion.bash, um sich die erforderliche Erlaubnis zu erteilen:

  • chmodist der Befehl, der Dateiberechtigungen ändert
  • ubedeutet der Benutzer, dem die Datei gehört, standardmäßig ihr Ersteller, dh Sie
  • +bedeutet eine Berechtigung setzen/aktivieren/hinzufügen
  • xbedeutet Ausführungserlaubnis, dh die Fähigkeit, das Skript auszuführen
Ja, das Neustarten des Terminals nach dem Hinzufügen des Bash-Skripts hat funktioniert. Ich saß hier und fragte mich, warum es immer wieder versuchte, meinen ModelsOrdner automatisch zu vervollständigen, als ich drückte m Tab, um es automatisch zu vervollständigen master.
Siehe auch unix.stackexchange.com/q/48862/10043 für einen anderen Tipp
Wenn die akzeptierte Antwort für niemanden funktioniert, versuchen Sie Folgendes: source ~/.bash_profilenachdem Sie den Code eingefügt haben. Ein Neustart des Terminals bewirkt ebenfalls dasselbe.
Danke schön! Ich habe einige andere Dinge ausprobiert, aber nichts hat funktioniert (einschließlich dieser github.com/bobthecow/git-flow-completion/wiki/… ). Deine Lösung hat wie am Schnürchen funktioniert ;)
(Sie haben kein Gebräu git, sondern Apple-Standard git) brew install gitund starten Sie das Terminal neu, wenn Sie mit seltsamen Fehlern wie zgit 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>]
Ich habe das auf einem älteren Computer gemacht, mein bash_profile auf meinen neuen Computer kopiert, aber die automatische Vervollständigung hat nicht funktioniert. Ich habe vergessen, dass ich curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bashnochmal Danke sagen musste :)
@Sachin Ich habe die Lösung für Ihr Problem hier gepostet: apple.stackexchange.com/a/350790/18664
Eine interessante Änderung, die Sie am Shell-Skript vornehmen könnten, besteht darin, zu testen, ob die Datei nicht vorhanden ist. Wenn nicht, kräuseln Sie das Skript und geben Sie es als Quelle ein.
Lösen Sie in zsh auf, indem Sie der Antwort folgen. stackoverflow.com/a/26479426/5293521
Weiß jemand, wie man dafür sorgt, dass nur die lokalen Zweige angezeigt werden? Es zeigt auch alle entfernten Zweige.
Für MacOS Catalina funktioniert das nicht mehr. Lösung in dieser Antwort: apple.stackexchange.com/a/381958/81900
git-completion.bashist veraltet: MacOS-Benutzer sollten stattdessen den zsh-Completion-Wrapper für Git git-completion.zshverwenden: github.com/git/git/blob/master/contrib/completion/…
@Nefeline Ich habe den gleichen Fehler. Können Sie mir die richtige Antwort zur Verwendung des zsh-Wrappers geben?
Dies löste die automatische Vervollständigung von Git. Vielen Dank

Einige Leute ziehen es vor, einen Paketmanager zu verwenden, um die Installation, Aktualisierung und Konfiguration von Mac OS-Paketen zu automatisieren. Ich bin ein Fan von Paketmanagern und denke, dass Homebrew der beste Paketmanager für Mac OS ist (manche würden sagen, es ist der De-facto-Paketmanager für Mac OS).

Sobald Sie Homebrew installiert haben, können Sie einfach git zusammen mit bash-completion with installieren brew install git bash-completion.

Sie müssen dann Folgendes in Ihre einfügen ~/.bash_profile:

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

(Hinweis: Wenn diese Installation mit einem 404-Fehler fehlschlägt und Sie bereits Git installiert haben, entfernen Sie einfach den Git-Teil dieser Brew-Installation.)

Weitere Informationen zur Installation von Git und Bash-Completion mit Brew finden Sie hier.

Hinzufügen gitund Hinzufügen bash-completionist nicht dasselbe wie Hinzufügen .git-completion.bash. Sie sind unterschiedliche Programme und sie machen ganz unterschiedliche Dinge - das eine macht die automatische Vervollständigung von Bash-Befehlen und das andere die automatische Vervollständigung von Git-Befehlen und 'nair die beiden werden sich treffen;)
funktioniert wie ein Zauber, vielen Dank. Könnten Sie bitte erklären, was die Verwendung des Skripts ist, in dem Sie mich hinzugefügt haben ~/.bash_profile?
Ungeachtet dessen, was andere zu dieser Antwort gesagt haben, ist es diejenige, die die automatische Vervollständigung von git im Terminal zum Laufen gebracht hat.
Beachten Sie, dass die Zeilen, die hinzugefügt werden ~/.bash_profilesollen, für mich in der Ausgabe von Homebrew angegeben wurden. Ich habe diese anstelle der obigen Zeilen verwendet. Dann müssen Sie das Bash-Profil in jedem Terminalfenster, in dem Sie die automatische Vervollständigung verwenden möchten, mit dem Befehl neu ladensource ~/.bash_profile

Führen Sie dies auf dem Terminal aus:

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

Dann tun Sie dies:

vi ~/.bash_profile

Fügen Sie diese Zeilen hinzu:

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

Das ist alles. Das hat bei mir funktioniert.

(2. Schritt) Wenn jemand das bash_profile lieber mit einem Texteditor öffnen möchte, tun Sie dies einfach: open -e .bash_profile
Auf einem jungfräulichen Mac OS High Sierra existiert die ~/.bash_profileDatei nicht. Das ist in Ordnung, erstellen Sie einfach die Datei und platzieren Sie das ifSkript dort und speichern Sie es. Laden Sie Ihre Shell danach neu und es wird funktionieren.
Das hat bei mir funktioniert. Anstelle von vi (mit dem ich immer zu kämpfen habe) öffne einfach -e ~/.bash_profile
Für den 2. Schritt benötigen Sie diesen Link
Nützlicher begleitender Link, wenn Sie Aliase für Git eingerichtet haben – gist.github.com/JuggoPop/10706934

gitund git-completion.bashsind bereits mit macOS-Befehlszeilentools ( xcode-select --install) ausgestattet. Um die automatische Vervollständigung von Bash zu aktivieren, fügen Sie dies zu Ihrer ~/.bash_profile.

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

Dadurch wird auch die automatische Vervollständigung für Git-Zweige aktiviert.

Ich bin mir ziemlich sicher, dass ich Befehlszeilentools installiert habe, aber diese Datei existiert in meinem Fall nicht. Ich gehe aber gerne mit Gebräu (und da mein Idiot auch mit Gebräu ist, vielleicht auch klüger).
Danke! IMO, das sollte die Antwort mit dem grünen Häkchen sein.
Dies ist die einfachste Lösung und es funktioniert für mich
Das hat bei mir funktioniert - obwohl ich ein etwas anderes Format verwendet habe.if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash > /dev/null fi
Für mich hat die Antwort funktioniert, aber nachdem Sie die angegebene Zeile hinzugefügt ~/.bash_profilehaben, vergessen Sie nicht, sie auch auszuführen source ~/.bash_profile(insbesondere, wenn Sie die ~/.bash_profileDatei zum ersten Mal erstellen) .
Unkompliziert und richtig. Denken Sie daran, dass Sie zuerst die Xcode-Befehlszeilentools installieren müssen, damit diese Arbeit funktioniert, verwenden Sie sie xcode-select --installvon Terminal.app und starten Sie neu, wenn Sie fertig sind.

Git-Autovervollständigung auf Catalina und neuer (mit Homebrew)

macOs wurde von bash auf zsh als Standard-Shell geändert, beginnend mit Catalina.
Sie benötigen also spezielle Autocomplete-Skripte für zsh.

So installieren Sie sie mit Homebrew:

brew install zsh-completion

Die ZSH-Vervollständigung von Brew enthält tatsächlich die Git-Vervollständigung.

Um die automatische Vervollständigung zu aktivieren, müssen Sie Ihrer ~/.zshrc. Möglicherweise müssen Sie diese Datei in Ihrem Benutzerordner erstellen, falls sie noch nicht vorhanden ist. Hinweis: Die Ausgabe des obigen Installationsskripts sagt Ihnen genau, welcher Code hinzugefügt werden muss. Lesen Sie ihn also sorgfältig durch und kopieren Sie ihn von dort, falls er aktualisiert wurde, seit ich hier geschrieben habe.

if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

  autoload -Uz compinit
  compinit
fi

Wichtig: Lesen Sie
nach Abschluss der Installation die Ausgabe des Installationsskripts. Es wird Sie nicht nur anweisen, Code zu .zshrc hinzuzufügen, sondern Ihnen auch Ratschläge zu zusätzlichen Aktionen geben, die möglicherweise erforderlich sind, wie z. B. das Erzwingen der Neuerstellung von zcompdump. Aber höchstwahrscheinlich werden Sie die zusätzlichen Schritte nicht benötigen.

Das Terminal zeigt jedes Mal, wenn es geöffnet wird, eine nervige Meldung: zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?Aber es funktioniert!
Ich bin gerade dieser Community beigetreten, daher kann ich noch nicht antworten, aber ich fand "oh-my-zsh" super super hilfreich und ich mag die Benutzeroberfläche wirklich: github.com/ohmyzsh/ohmyzsh Dies ist natürlich für Leute mit zsh. Ich nehme an, es funktioniert nicht für Bash ...
@AdolfoCorrea Sie können die Warnmeldung beheben, indem Sie den folgenden Befehl eingeben: compaudit | xargs chmod gw
Ich bekomme die nervige Meldung + es funktioniert nicht...
Git-Vervollständigungen sind Teil des Homebrew git-Pakets, nicht zsh-completions(das unter anderem Vervollständigungen für Git-Erweiterungen wie Git Flow enthält ). Also, brew install git, was Ihnen mitteilt, dass Vervollständigungen installiert werden, und folgen Sie dann dem Shell Completion Guide von Homebrew .

Hier ist, was einige von Ihnen verwirrt: Sie haben brew oder ports installiert, aber Sie verwenden das System git in /usr/bin/. Um dies zu überprüfen:

which git

Wenn Sie sehen , dass /usr/bin/gitbrew entweder nicht richtig konfiguriert ist oder Sie git nicht über brew installiert haben.

Wenn Sie git über brew installieren, aktiviert die Aktivierung von Bash-Vervollständigungen für brew auch Bash-Vervollständigungen für git. Dies liegt daran , dass /usr/local/etc/bash_completioneigentlich alles in /usr/local/bash_completion.d, und das brew-Paket für git ein Git-Vervollständigungsskript dort installiert.

Das ist sinnvoll, aber wie würden Sie "Bash-Vervollständigungen für das Brühen aktivieren"? Sie vermissen, wie das geht, dies sollte Teil Ihrer Antwort sein
Ich habe das gerade getan (es funktioniert, danke) über Simplified.guide/macos/bash-completion , aber die automatische Vervollständigung ist ein paar Sekunden verzögert ... seltsam

Sie könnten bash und git von MacPorts mit aktivierter Option „bash_completion“ installieren. Es ist wahrscheinlich der einfachste Weg, sowohl Git als auch die Vervollständigungen auf dem neuesten Stand zu halten.

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

So installieren Sie MacPorts: http://www.macports.org/install.php/

zusätzliche Information

Um die Vervollständigungseinstellungen auf Ihrem Linux-System zu finden, werfen Sie einen Blick in /etc/bash_completion.d/git (es ist eine lange Datei). Das alleinige Kopieren wird jedoch wahrscheinlich nicht funktionieren, da es so konzipiert ist, dass es vom Vervollständigungs-Framework über /etc/bash_completion bezogen wird (das aus /etc/profile.d/bash_completion.sh; Dateien in /etc/profile .d stammen aus /etc/profile).

Für macOS Catalina+ unter zsh:

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

Aktualisieren Sie dann Ihre ~/.zshrcmit:

if [ -f ~/.git-completion.zsh ]; then
    . ~/.git-completion.zsh
fi
Jetzt bekomme ich immer, c:8: command not found: __git_aliased_commandwenn ich versuche, automatisch zu vervollständigen ...

Wenn Ihre Git-Vervollständigung auch nach dem Sourcing teilweise fehlerhaft ist https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, müssen Sie möglicherweise nur Ihre Git-Version aktualisieren.

Wenn ich zum Beispiel git check+ eingetippt habe TAB, wurde es korrekt automatisch vervollständigt git checkout. git checkoutAber als ich + eingegeben TABhabe, wurde nicht die Liste der Zweige angezeigt, sondern nur HEAD.

Die Lösung für mich war, meine gitVersion zu aktualisieren. Ich war auf 2.7.0, das anscheinend nicht mit dem neuesten kompatibel war git-completion.bash. Ich habe brew upgrade gitausgeführt, wodurch es auf 2.13.0 aktualisiert wurde, und jetzt werden meine Zweignamen ordnungsgemäß automatisch vervollständigt.

Ich bekam das gleiche Problem, aber ich musste laufen brew upgrade gitund brew link git(mit aktiviertem Override)
Danke für den Fang @Tope. Ich habe updatezu geändert upgrade.

Die bei weitem beste Referenz, die ich gefunden habe, um genau dieses Problem zu lösen, ist SpinDance von Connor Livingston :

Wenn das Skript git-completion.bash auf Ihrem Computer nicht vorhanden ist, rufen Sie es bitte über den Link ab, den ich oben angegeben habe (dies ist dieser ), und speichern Sie es auf Ihrem lokalen Computer in einer neuen Datei namens git-completion.bash im Verzeichnis / usr/local/etc/bash_completion.d/ Verzeichnis. Wenn das Skript git-completion.bash auf Ihrem Computer vorhanden ist, sich aber nicht im Verzeichnis /usr/local/etc/bash_completion.d/ befindet, sollten wir eine Kopie davon in diesem Verzeichnis erstellen. Ein schnelles sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash sollte ausreichen. Für diejenigen, die neugierig auf /usr/local/etc/bash_completion.d/ sindVerzeichnis: Es dient zum Speichern neuer Vervollständigungsbefehle und Sie müssen es möglicherweise erstellen, wenn es noch nicht auf Ihrem Computer vorhanden ist.

An diesem Punkt sollte das Skript git-completion.bash auf Ihrem lokalen Rechner im Verzeichnis /usr/local/etc/bash_completion.d/ vorhanden sein . Jetzt fügen wir das Git-Completion-Skript in Bash ein, indem wir von ~/.bash_profile darauf verweisen .

Hinweis: Die Tilde im vorherigen Satz bezieht sich auf das Home-Verzeichnis auf Ihrem Computer. Fügen Sie die folgende Zeile zu ~/.bash_profile hinzu : source /usr/local/etc/bash_completion.d/git-completion.bash und speichern Sie. Der letzte Schritt besteht darin, Ihr Bash-Profil neu zu laden. Sie können dies erreichen, indem Sie source ~/.bash_profile in Ihrer aktuellen Bash-Sitzung ausführen.

Ich habe es versucht und es funktioniert gut für Zweige, aber wenn Sie dies tun git st, tabwird der Fehler wie folgt angezeigt

unbekannte Option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config Verwendung: git [--version] [--help] [-C ] [-c =] [--exec -path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginieren | --no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] []

Durchsuchte das Internet und stellte fest, dass --list-cmdsin .git-completion.bashder neuesten Version des Git und auf meinem Mac die Git-Version war2.17.2

Hier sind die Lösungen

Lösung 1

  1. Überprüfen Sie die Version des Git mit dem git --versionBefehl
  2. Geben Sie dann die gleiche Versionsnummer in die URL ein wie ich

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
    
  3. Befolgen Sie dann die gleichen Schritte wie in der oberen Antwort und geben Sie den folgenden Code ein~/.bash_profile

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

Lösung 2

Sie sollten versuchen, die Git-Version auf die neueste Version zu aktualisieren, dann sollte es funktionieren.

Installieren Sie oh-my-zsh und legen Sie zsh als Ihre Standard-Shell fest und danken Sie mir später :)

Ich habe das getan, genau in der Hoffnung, mich nicht damit befassen zu müssen - immer noch keine Verzweigungsvorschläge nach dem Drücken der Tabulatortaste
Sie brauchen eigentlich kein oh-my-zsh oder überhaupt ein separates Plugin-System! Die Git-Vervollständigung ist standardmäßig vorhanden, Sie müssen sie nur aktivieren.

Die meisten Benutzer werden gitals Teil der xcode-Befehlszeilentools unter installiert haben /usr/bin/gitund Bash-Vervollständigungsregeln für Git werden unter verfügbar sein /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

In diesem Fall ist es nicht erforderlich, Git von Homebrew zu installieren oder Git-Vervollständigungsregeln von raw.githubusercontent.com zu beziehen. Erstellen Sie einfach einen Symlink wie folgt:

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

bash-completionHinweis: Stellen Sie sicher, dass Sie das Paket von Homebrew installiert und konfiguriert haben .

Wenn Sie bereit sind, zu einer anderen Shell zu wechseln, hat die fishShell diese Funktion eingebaut. Sie hat auch einige andere praktische Funktionen wie die automatische Vervollständigung während der Eingabe.

Suchen Sie Ihre .bashrcDatei.

Öffnen Sie es und fügen Sie diese Zeile unten hinzu:

source /etc/bash_completion.d/git

Ich habe /etc/bash_completion.d/auf einem relativ neuen System (OSX 10.10.3) keinen Ordner.
Versuchen Sie es zu erstellen.
Nicht bash_completion, git_completion, das verschiedene Sachen macht.
@MichaelDurrant Es funktioniert. Vertrau mir. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
@crmpicco Könnten Sie bitte Anweisungen zum Erstellen geben /etc/bash_completion.d/git? Es würde Ihre Antwort wertvoller machen.
brew install git bash-completionwie unter apple.stackexchange.com/a/92637/136365 erklärt , erhalten Sie diese Dateien, wenn auch an einem anderen Ort