Homebrews "Git" verwendet keine Fertigstellung

144

Wenn ich OSXs Git verwende, kann ich nach dem Ändern einer Datei einfach etwas tun git commit <tab>. Dadurch wird der Dateiname automatisch auf den geänderten Namen vervollständigt. Wenn ich jedoch eine neuere Version von git von Homebrew installiere und sie verwende, funktioniert diese Funktion nicht mehr (dh ich drücke <tab>und frage mich nur, für welche Datei ich sie ausführen möchte, auch für diejenigen, die keine Änderungen aufweisen ).

Kann jemand etwas Licht ins Dunkel bringen, warum und wie man das löst? Ich würde es vorziehen, Homebrews Git zu verwenden, da es aktueller ist.

Meine Shell ist zsh und weder installiert bash-completionnoch zsh-completionsfunktioniert (auch nachdem ich die Anweisungen von Homebrew nach der Installation befolgt habe).

Auch nach der Installation von Git mit Homebrew heißt es

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

Sollte ich nicht in der Lage sein, eine davon zu verwenden?

user137369
quelle
Welche Version von zshund verwenden gitSie?
Simont
Neueste von Homebrew. zsh 5.0.2 und git 1.8.1.3
user137369
Funktionieren andere gitAbschlüsse ( git co<TAB>==> git commitzum Beispiel)?
Simont
2
Ich vermute, dass hier ein paar verschiedene Probleme auftauchen, aber die Installation von Git via Brew hat dies für mich behoben. Scheint zsh-completionsnicht zufrieden mit dem Mac Git zu sein, obwohl es vorher gut funktioniert hat (möglicherweise blind auf 0.17.x aktualisiert).
Ti7

Antworten:

287

Du schaust nach:

brew install git bash-completion

Wie in Warpcs Kommentar angegeben, müssen Sie Folgendes zu Ihrem hinzufügen ~/.bash_profile, damit Homebrews Bash-Vervollständigung funktioniert:

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

Das Obige wird in den Vorbehalten erwähnt, wenn Sie die Bash-Completion-Formel installieren.


Hinweis: Wenn Sie Bash v4 oder höher (via brew install bash) verwenden, sollten Sie brew install bash-completion@2Folgendes verwenden , um die Tab-Vervollständigung zu aktivieren. Fügen Sie Folgendes hinzu, ~/.bash_profilewie in den Vorsichtsmaßnahmen beschrieben:

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"

Der zusätzliche Export ist für Git, Docker, Youtube-DL und andere Vervollständigungen erforderlich, die möglicherweise im $(brew --prefix)/etc/bash_completion.d/Verzeichnis enthalten sind.

Graham Perks
quelle
3
Meine Shell ist zsh. Heißt das, ich sollte es tun brew install git zsh-completions? Nach der Installation von git mit Homebrew heißt es Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functionsalso, könnte ich nicht eines davon verwenden?
user137369
2
Weder installiert bash-completionnoch zsh-completionsfunktioniert (auch nach Befolgung der Anweisungen von Homebrew nach der Installation).
user137369
12
Haben Sie in ~ / .bash_profile für Bash-Fall auch diesen Inhalt hinzugefügt: if [-f $ (Brew - Präfix) / etc / bash_completion]; dann . $ (Brew
Warpc
5
Ich habe bereits Git ohne Gebräu installiert. Jetzt möchte ich bash_completion mit Brew installieren. Ich habe Brew Install Bash-Vervollständigung ausgeführt und den obigen Code hinzugefügt, aber kein Glück
MagePsycho
3
Es ist erwähnenswert, dass die Installation von Git durch Brauen unerlässlich ist, damit dies funktioniert. Ich hatte nicht gewusst, dass die Apfelversion von Git Teil des Problems war. Ich habe diese Antwort abgelehnt, bevor ich das wusste, und jetzt kann ich nicht mehr stimmen :(
Reimus Klinsman
109

Dies funktioniert unter OSX, ohne dass Sie Ihr Terminal neu starten müssen:

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
user2347638
quelle
14
Es ist ein bisschen betrügerisch, es bei der Verwendung als Einzeiler zu bezeichnen &&. Jedes Bash-Skript könnte so ein Einzeiler sein.
user137369
1
Du bist der wahre MVP!
Heez
2
Auf jeden Fall besser als brew installMethode. Einfach weil es funktioniert.
Dchayka
2
Ich habe stundenlang nach einer Lösung gesucht, um herauszufinden, warum Bash die Git-Vervollständigungsbefehle nicht aufgegriffen hat. Endlich hat das geklappt! Ich danke dir sehr!
TheAmazingKnight
1
Dies ist die eigentliche Lösung einfacher
Rigin Oommen
22

Falls jemand meinen dummen Fehler macht, versuchen Sie es brew install git. Ich habe das gitmit Xcode gelieferte verwendet und nicht bemerkt, dass ich Homebrews Git nie installiert habe, um die Autovervollständigungen zu erhalten.

Harvey
quelle
19

Aus irgendeinem Grund fehlte mir die Datei unter, $(brew --prefix)/etc/bash_completionsodass die richtige Antwort von @Graham Perks bei mir nicht funktionierte

Es endete die Lösung in meinem Fall war:

brew unlink bash-completion
brew link bash-completion
Anentropisch
quelle
Nachdem ich der Antwort von @Graham Pixel gefolgt war, war es endlich ein Wok für mich.
Luke
Dies funktionierte auch nur für mich mit Homebrew 1.6.0, Git 2.17.0 (Hub 2.2.9) und Bash-Completion 1.3 unter OS X Sierra 10.12.6.
Jared
10

Ich löste das Problem , indem sie herauszufinden , dass $(brew --prefix)/etc/bash_completionzurückgegeben , Permission deniedwenn sie ausgeführt. Also nach einem einfachen:

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

Alles funktioniert jetzt gut. Ich frage mich, warum Homebrew die bash_completionDatei bei der Installation nicht ausführbar macht.

Asbjørn Ulsberg
quelle
5
Nein, das ist falsch. bash_completionsoll so sein source, dass die Definitionen in Ihrer Shell sind; Die Ausführung hat keine Auswirkung.
Toddkaufmann
5

Eine funktionierende Lösung gefunden. Es ist sehr neu (vor 16 Stunden verfasst und vor 2 Stunden festgelegt) und kommt direkt von Homebrew .

brew install git --without-completions

Ich habe es gerade versucht und es funktioniert schließlich wie beabsichtigt.

user137369
quelle
3
Ich sehe nicht, wie eine Installation gitohne Abschluss die Situation verbessern kann, in der die Fertigstellung nicht funktioniert. Ich bin der Meinung, dass die Antwort von Graham Perks stackoverflow.com/a/14970926/1199564 als die richtige Antwort gekennzeichnet werden sollte.
mgd
Ich hatte ein ähnliches Problem und habe die Neuinstallation git --without-completionsund Beschaffung der bash-completion.bashDatei gelöst .bash_profile, die höchstwahrscheinlich nach dem Standardverfahren überschrieben wird.
Leonardo
1
Dies ist keine richtige Antwort. Die Antwort von @graham perks ist richtig.
CantGetANick
@CantGetANick Grahams Antwort hat mein Problem nicht gelöst. Deshalb habe ich es markiert.
user137369
1
Stimmen Sie 100% mit user137369 überein: Ich hatte bereits das Bash-Completion-Paket von Homebrew installiert, sodass die Antwort von @ graham möglicherweise nicht für mich funktionieren konnte. Es wurde jedoch brew install gitalles behoben (keine Notwendigkeit für - ohne Abschluss). Ich denke, das ist auch eine richtige Antwort.
Bronson
5

Ich hatte das gleiche Problem und habe diesen Beitrag heute Morgen sogar gefunden. Ich habe das Problem behoben, indem ich Brew mit aktualisiert brew updateund dann Git mit neu installiert habe brew reinstall git.

Ich wurde dann über eine andere Datei informiert, die den Homebrew-Verknüpfungsprozess blockiert, in meinem Fall /usr/local/share/zsh/site-functions/git-completion.bash. Durch Entfernen der Datei und Ausführen wurde brew link gitdas Problem behoben. Ich schätze, es war nur eine schlechte Rezeptversion, auf die wir gestoßen sind.

Jonathan Knapp
quelle
1
Sie werden auch feststellen, dass die von Ihnen verwendete Version von git die von Apple ist und nicht die von Homebrew installierte Version. Zumindest in meinem Fall. Sie können die Version mitgit --version
Jonathan Knapp
Nee. Das funktioniert bei mir immer noch nicht. Ich habe immer wieder OSXs Git verwendet, diese Fertigstellung ist einfach zu groß, um sie loszulassen.
user137369
Nach dem Update auf Mavericks funktionierte Git-Completion für mich nicht mehr. Ich musste brew reinstall gitund musste es auch wieder brew reinstall bash-completionzum Laufen bringen.
Krešimir Nesek
3

Wenn Sie $BASH_VERSION<4.1 haben, z. B. 3.2.57(1)-releasefahren Sie fort mit:

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

Wenn Sie brew install bashjedoch eine Version 4.4.12(1)-release benötigen, können Sie die besseren und vollständigeren Vervollständigungen verwenden in:

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

Beachten Sie, dass einige Pakete (Brew, Docker, TMX) noch einige Vervollständigungen enthalten, $(brew --prefix)/etc/bash_completion.d/sodass Sie Folgendes hinzufügen können:

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

Schließlich sollten Sie in der Lage sein, das Git-Abschlussskript hinzuzufügen, wenn die Art und Weise, wie Sie Git installiert haben, es aus irgendeinem Grund nicht zu einem der folgenden hinzugefügt hat:

[[ -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

Sie können es mit den oben genannten erhalten und hinzufügen.

Dlamblin
quelle
2

Schritt 1: Laden Sie das Auto-Completion-Skript herunter:

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

Schritt 2: Aktualisieren Sie .bash_profile und .bashrc

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

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

Wenn dies nicht funktioniert, versuchen Sie es mit https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion

Feuda
quelle
1

Für mich musste ich setzen

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

in .bashrc(nicht .bash_profile), damit dies funktioniert.

".bash_profile wird für Login-Shells ausgeführt, während .bashrc für interaktive Nicht-Login-Shells ausgeführt wird" - von Was ist der Unterschied zwischen .bash_profile und .bashrc? Es scheint mir, dass MacOS Sierra nicht nur .bash_profilebeim Öffnen eines neuen Terminalfensters ausgeführt wird.bashrc .

Ich würde es nicht in _bash_profile einfügen, da ich dann neu starten / abmelden müsste, damit Updates wirksam werden.

antonyh
quelle
1

Dies hat bei mir in Mojave (OSX 10.14.1) funktioniert:

brew install bash-completion

Fügen Sie dann die folgende Zeile zu Ihrem ~ / .bash_profile hinzu:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
ar31an
quelle
Es multipliziert nur die Anzahl der Warnungen
Hussain Akram
1

Im Jahr 2019 müssen Sie mit Bash v5 das Git-Bash-Abschlussskript nicht explizit in Ihrem .bash_profileoder angeben.bashrc

  1. Stellen Sie sicher, dass Sie die folgenden zwei Zeilen in Ihrem haben .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. Laden Sie das Git Bash Completion Script ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) herunter und speichern Sie es /usr/local/etc/bash_completion.d/untergit

Das ist es! Bash nimmt automatisch die Git-Abschlussdatei auf und aktiviert den Abschluss.


Randnotiz: Ich empfehle, alle diese Änderungen vorzunehmen, .bashrcda dies sicherstellt, dass beim Ablegen in eine interaktive Shell (dh von pipenv shell) die Vervollständigungen korrekt geladen werden, da die Bash-Quelle .bashrcund NICHT .bash_profile.

cgons
quelle
0

Es kann etwas damit zu tun haben, dass libedit anstelle von readline in Lion verwendet wird.

Versuchen Sie, readline vor git zu installieren.

brew install readline
Alex
quelle
0

Für diejenigen, die bereits einen Bash-Bash-Abschluss installiert haben. Ich hatte das Git-Vervollständigungsskript nicht installiert und konnte keinen Tipp dafür finden.

Also habe ich es manuell hinzugefügt:

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

Beachten Sie, dass Sie die Datei umbenennen und die Erweiterung entfernen müssen, damit sie funktioniert.

Wenn Sie Completion oder Git nicht installiert haben, installieren Sie es in der akzeptierten Antwort.

brew install git bash-completion

Andrei
quelle
0

Wenn Sie Homebrew zur Installation von Git verwendet haben, müssen Sie wahrscheinlich nichts installieren, um die Fertigstellung von Git zu unterstützen. Die Datei "git-vervollständigung.bash" befindet sich irgendwo (meine war hier: /usr/local/git/contrib/completion/git-completion.bash)

Alles was Sie tun müssen, ist die Datei zu finden: sudo find / -type f -name "git-vervollständigung.bash"

Geben Sie dann den Pfad in Ihr .bash_profile ein. Zum Beispiel musste ich diese Zeile zu meinem ~ / .bash_profile hinzufügen:

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

Vergiss nicht, dein ~ / .bash_profile zu beschaffen oder dein Terminal erneut zu öffnen;)

von: How-Enable-Git-Tab-Vervollständigung-Bash-Mac-OS-X

Dozon Higgs
quelle
@ user137369 es tut - weil hier müssen Sie nicht Sachen installieren, die bereits installiert wurden ...
Dozon Higgs
0

Ich weiß, dass dies ein alter Beitrag ist, aber Sie müssen keine zusätzlichen Pakete installieren.

Homebrew informiert Sie darüber, dass es ein Verzeichnis mit allen benötigten Informationen gibt.

Sie können einfach die folgende Zeile zu Ihrer hinzufügen, .bash_profilewenn Sie Bash verwenden:

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

Aktivieren der automatischen Vervollständigung von GIT-Befehlen unter MAC-OS Mojave 10.14 Ich bin Entwickler und verwende GIT die ganze Zeit über über die Befehlszeile. Wenn ich die Entwicklungsperspektive betrachte, habe ich viele Befehle über die Befehlszeile für GIT-Operationen ausgeführt. Meistens ist es sehr ärgerlich, dass MAC OS keine automatische Unterstützung für die Befehlsvervollständigung hat, die ich teilweise unterstütze. sowie die Befehlsvorschläge, dh welche Befehle für eingegebene Zeichen verfügbar sind. Es ist daher sehr mühsam, sehr lange Befehle und meist sich wiederholende Aufgaben als Tippfehler einzugeben. :((

Die Tab-Vervollständigung wäre sicherlich schneller und einfacher. Leider ist bei der Standardinstallation von git auf einigen Mac-Computern die Tab-Vervollständigung nicht aktiviert.

Damit habe ich nach einer Lösung für das Problem gesucht und es wurden verschiedene Lösungen aus der Websuche gefunden, wie z. B. StackOverflow, GitHub sowie aus dem Medium. Leider haben diese Lösungen bei mir nicht funktioniert und ich war frustriert, so oft verschiedene Lösungen ausprobiert zu haben.

Ich habe tief gesucht und verschiedene Lösungen ausprobiert und zum Glück ist es eine einfache Lösung. Im Folgenden sind die Schritte aufgeführt, die ich in mehreren Posts gesammelt habe und die schließlich wie erwartet funktioniert haben. Ich hoffe, mit anderen zu teilen, die dieses Problem wie ich haben.

Wenn Sie zur Websuche gehen, finden Sie viele Lösungen, in denen die BIT-Datei für die Git-Vervollständigung erwähnt wird. Sogar GitHub-Anleitung. Ich schlage jedoch vor, dass Sie zuerst prüfen, ob sich die Datei git-finish.bash bereits auf Ihrem MAC-Computer mit dem Git-Core oder etwas anderem befindet, das aus der Installation stammt. Sie können den folgenden Befehl verwenden.

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

Sie erhalten unten Ergebnisse. (kann je nach Inhalt einen Unterschied haben)

/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

Ich schlage vor, Sie wählen, welche von Git-Core installiert

Wenn das Skript "git-vervollständigung.bash" auf Ihrem Computer nicht vorhanden ist, rufen Sie es bitte aus dem oben angegebenen Format ab und speichern Sie es auf Ihrem lokalen Computer in einer neuen Datei mit dem Namen "git-vervollständigung.bash" in / usr / local / etc / bash_completion.d / Verzeichnis.

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

Wenn Sie die Bash-Shell verwenden, wird Git mit einem netten Skript zur automatischen Vervollständigung geliefert, das Sie aktivieren können. Laden Sie es direkt aus dem Git-Quellcode unter herunter

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

Wenn das Skript git-vervollständigung.bash auf Ihrem Computer vorhanden ist, sich jedoch nicht im Verzeichnis /usr/local/etc/bash_completion.d/ befindet, sollten Sie dieses Verzeichnis erstellen und die Datei in dieses Verzeichnis kopieren. Der folgende Befehl erledigt die Aufgabe:

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

Nach dem Abschluss von oben. Das Skript git-vervollständigung.bash sollte auf Ihrem lokalen Computer im Verzeichnis / usr / local / etc / bash_completion.d / vorhanden sein.

Jetzt müssen Sie Ihr Profil mit dem folgenden Befehl aktualisieren. Es wird Ihre hinzugefügte Bash-Datei in den Terminal-Kontext laden.

source ~/.bash_profile

Toll!!! Du hast es getan. Starten Sie einfach das Terminalfenster und probieren Sie es aus. Geben Sie einfach "git sta" ein, um die folgenden Vorschläge anzuzeigen:

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

siehe meinen GitHub Beitrag hier:

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

Siehe meinen mittleren Beitrag hier:

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

Dilanka M.
quelle