Git di Homebrew non utilizza il completamento


144

Quando uso git di OSX, dopo aver modificato un file, posso semplicemente fare git commit <tab>, e questo completerà automaticamente il nome del file con quello che è stato modificato. Tuttavia, se installo una versione più recente di git da homebrew e la uso, quella funzione non funziona più (il che significa che premo <tab>e mi chiede semplicemente su quale file voglio farlo, anche includendo quelli che non hanno modifiche ).

Qualcuno può far luce sul perché e su come risolverlo? Preferirei usare git di homebrew, dato che è più aggiornato.

La mia shell è zsh e non si installa bash-completionzsh-completionsfunziona (anche dopo aver seguito le istruzioni post-installazione di homebrew).

Inoltre, dopo aver installato git con homebrew, dice

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

Quindi non dovrei essere in grado di utilizzare uno di quelli?


Quale versione di zshe gitstai usando?
simont

Ultime dall'homebrew. zsh 5.0.2 e git 1.8.1.3
user137369

Altri gitcompletamenti funzionano ( git co<TAB>==> git commit, ad esempio)?
simont

2
Ho il sospetto che alcuni problemi diversi finiscano qui, ma l'installazione di git tramite brew ha risolto questo problema per me. Sembra che zsh-completionsnon sia soddisfatto del mac git, anche se prima ha funzionato bene (probabilmente aggiornato alla cieca a 0.17.x).
ti7

Risposte:


287

Stai cercando:

brew install git bash-completion

Come afferma il commento di warpc, dovrai aggiungere quanto segue al tuo ~/.bash_profileper far funzionare il completamento della bash di homebrew:

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

Quanto sopra è menzionato negli avvertimenti quando si installa la formula di completamento bash.


Nota: se si utilizza Bash v4 o versione successiva (tramite brew install bash), si desidera utilizzarlo brew install bash-completion@2, per abilitare il completamento della scheda aggiungere quanto segue ~/.bash_profilecome descritto nelle avvertenze:

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"

L'esportazione aggiuntiva è necessaria per git, docker, youtube-dl e altri completamenti che possono essere inclusi nella $(brew --prefix)/etc/bash_completion.d/directory.


3
La mia shell è zsh. Significa che dovrei fare brew install git zsh-completions? Inoltre, dopo aver installato git con homebrew, dice Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, quindi non potrei usare uno di quelli?
user137369,

2
Né installazione bash-completionzsh-completionsfunzionamento (anche dopo aver seguito le istruzioni di homebrew dopo l'installazione).
user137369

12
Hai anche aggiunto in ~ / .bash_profile per questo caso bash questo contenuto: if [-f $ (brew --prefix) / etc / bash_completion]; poi . $ (brew --prefix) / etc / bash_completion fi
warpc

5
Ho già installato git senza birra. Ora voglio installare bash_completion usando brew. Ho eseguito brew install bash-completamento e ho aggiunto il codice sopra, ma senza fortuna
MagePsycho,

3
Vale la pena notare che l'installazione di git tramite brew è essenziale affinché questo funzioni. Non sapevo che la versione di git con le mele fosse parte del problema. Ho annullato la votazione di questa risposta prima di
rendermene conto

109

Il completamento di questa scheda git funziona su OSX senza riavviare il terminale:

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
È un po 'imbarazzante chiamarlo one-liner quando si usa &&. Qualsiasi script bash potrebbe essere un one-liner come quello.
user137369,

1
Sei il vero MVP!
Heez,

2
Decisamente migliore del brew installmetodo. Semplicemente perché funziona.
Dchayka,

2
Ho cercato per ore una soluzione sul perché Bash non stava rilevando i comandi git-completamento. Finalmente ha funzionato! Grazie mille!
TheAmazingKnight

1
Questa è la soluzione più semplice
Rigin Oommen,

22

Nel caso in cui qualcun altro commetta il mio stupido errore, prova brew install git. Stavo usando il gitsoftware fornito con Xcode e non mi ero reso conto che non avevo mai installato il git di Homebrew per ottenere i completamenti automatici.


19

per qualche motivo mi mancava il file, $(brew --prefix)/etc/bash_completionquindi la risposta corretta di @Graham Perks non ha funzionato per me

Alla fine la correzione nel mio caso era:

brew unlink bash-completion
brew link bash-completion

Dopo aver seguito la risposta di @Graham Pixel, questo finalmente mi ha fatto svegliare.
Luca

Questo ha funzionato anche per me con Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) e bash-completamento 1.3 su OS X Sierra 10.12.6.
jared

10

Ho risolto il problema scoprendo che $(brew --prefix)/etc/bash_completionrestituito Permission deniedquando eseguito. Quindi dopo un semplice:

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

Ora tutto funziona bene. Mi chiedo perché Homebrew non renda bash_completioneseguibile il file al momento dell'installazione.


5
No, questo è sbagliato. bash_completionè pensato per essere sourcecosì le definizioni sono nella tua shell; l'esecuzione non avrà alcun effetto.
toddkaufmann,

5

Ho trovato una soluzione funzionante. È molto recente (creato 16 ore fa e impegnato 2 ore fa), e proviene direttamente dall'homebrew .

brew install git --without-completions

L'ho appena provato e alla fine funziona come previsto.


3
Non vedo come l'installazione gitsenza completamento potrebbe migliorare la situazione di completamento non funzionante. Credo che la risposta di Graham Perks stackoverflow.com/a/14970926/1199564 debba essere contrassegnata come la risposta corretta.
mgd

Ho avuto un problema simile e ho risolto la reinstallazione git --without-completionse l'approvvigionamento del bash-completion.bashfile .bash_profileche molto probabilmente viene ignorato seguendo la procedura standard.
Leonardo,

1
Questa non è una risposta corretta La risposta di @graham perks è corretta.
CantGetANick,

@CantGetANick La risposta di Graham non ha risolto il mio problema, questo è stato, ecco perché l'ho segnato.
user137369,

1
Concordo al 100% con user137369: avevo già installato il pacchetto bash-completamento di homebrew, quindi la risposta di @ Graham non poteva funzionare per me. Tuttavia, brew install gitrisolto tutto (non è necessario per - senza completamenti). Penso che questa sia anche una risposta corretta.
Bronson,

5

Ho avuto lo stesso problema e ho persino trovato questo post stamattina. Ho risolto il problema aggiornando brew con brew updatee quindi reinstallando git con brew reinstall git.

Sono stato quindi informato di un altro file che sta bloccando il processo di collegamento homebrew, nel mio caso lo era /usr/local/share/zsh/site-functions/git-completion.bash. La rimozione del file e l'esecuzione ha brew link gitrisolto il problema. Immaginando che fosse solo una cattiva versione della ricetta su cui ci siamo imbattuti.


1
Noterai anche che la versione di git che stai utilizzando è quella di Apple e non quella installata da Homebrew. Almeno nel mio caso l'ho fatto. Puoi controllare la versione congit --version
Jonathan Knapp

No. Non funziona ancora per me. Sono sempre tornato a usare git di OSX, quel completamento è una funzione troppo grande per lasciarsi andare.
user137369

git-completamento ha smesso di funzionare per me dopo l'aggiornamento a Mavericks. Ho dovuto brew reinstall gite anche brew reinstall bash-completionfarlo funzionare di nuovo.
Krešimir Nesek,

3

Se hai $BASH_VERSION<4.1, ad esempio, 3.2.57(1)-releasevai avanti con:

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

Tuttavia, se devi brew install bashottenere la versione 4.4.12(1)-release , puoi utilizzare i completamenti migliori e più completi in:

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

Nota che alcuni pacchetti (brew, docker, tmux) aggiungeranno comunque alcuni completamenti in $(brew --prefix)/etc/bash_completion.d/modo da poter aggiungere:

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

Infine dovresti essere in grado di aggiungere lo script di completamento di git se per qualche motivo il modo in cui hai installato git non lo ha aggiunto a nessuno dei due:

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

Puoi ottenerlo e aggiungerlo con quanto sopra.



1

Per me, ho dovuto mettere

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

in .bashrc(non .bash_profile) per farlo funzionare.

".bash_profile viene eseguito per le shell di accesso, mentre .bashrc viene eseguito per le shell interattive non di accesso" - da Qual è la differenza tra .bash_profile e .bashrc? Mi sembra che MacOS Sierra non venga eseguito solo .bash_profileall'apertura di una nuova finestra del terminale .bashrc.

Non lo metterei in _bash_profile, perché quindi dovrei riavviare / disconnettersi per rendere effettivi gli aggiornamenti.


1

Questo ha funzionato per me in Mojave (OSX 10.14.1):

brew install bash-completion

Quindi aggiungi la seguente riga al tuo ~ / .bash_profile:

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

Moltiplica semplicemente il numero di avvertenze
Hussain Akram,

1

Nel 2019, usando Bash v5, non è necessario originare esplicitamente lo script di completamento git bash nel tuo .bash_profileo.bashrc

  1. Assicurati di avere le seguenti due righe nel tuo .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. Scarica lo script di completamento git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) e salvalo /usr/local/etc/bash_completion.d/comegit

Questo è tutto! Bash raccoglierà automaticamente il file di completamento git e abiliterà il completamento.


Nota a margine: raccomando di inserire tutte queste modifiche in .bashrcquanto ciò garantisce che quando si rilascia in una shell interattiva (ad es. Da pipenv shell), i completamenti verranno caricati correttamente poiché bash verrà generato .bashrce NON .bash_profile.


0

Potrebbe avere a che fare con l'uso di libedit al posto di readline in Lion.

Prova a installare readline prima di git.

brew install readline

0

Per coloro che hanno già installato brew bash-completamento. Non avevo installato lo script di completamento git e non sono riuscito a trovare alcun tocco.

Quindi l'ho aggiunto manualmente:

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

Nota che devi rinominare il file e rimuovere l'estensione affinché funzioni.

Se non hai installato complete o git, installalo nella risposta accettata.

brew install git bash-completion


0

Se hai usato homebrew per installare git, probabilmente non è necessario installare nulla per supportare il completamento di git. Il file "git-completamento.bash" è da qualche parte (il mio era qui: /usr/local/git/contrib/completion/git-completion.bash)

Tutto quello che devi fare è trovare il file: sudo find / -type f -name "git-completamento.bash"

Quindi procedi nel suo percorso nel tuo .bash_profile. Ad esempio, dovevo aggiungere questa riga al mio ~ / .bash_profile:

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

Non dimenticare di procurarti il ​​tuo ~ / .bash_profile o riaprire il tuo terminale;)

da: how-enable-git-tab-completamento-bash-mac-os-x


@ user137369 lo fa - perché qui non è necessario installare roba che era già installata ...
Dozon Higgs

0

So che questo è un vecchio post, ma non è necessario installare alcun pacchetto aggiuntivo.

Homebrew ti sta informando che esiste una directory con tutto ciò di cui hai bisogno.

Puoi semplicemente aggiungere la seguente riga alla tua .bash_profilese stai usando Bash:

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

-1

Abilita il completamento automatico dei comandi GIT su MAC-OS Mojave 10.14 Sono uno sviluppatore e utilizzo sempre GIT dalla riga di comando. Quando considero la prospettiva di sviluppo, eseguivo molti comandi usando la riga di comando per le operazioni GIT. Il più delle volte è molto fastidioso che MAC OS non disponga di un supporto automatico per il completamento del comando che supporto parzialmente. così come i suggerimenti di comandi, il che significa quali sono i comandi disponibili per i caratteri digitati. Quindi è molto problematico digitare un comando molto lungo e un'attività per lo più ripetitiva poiché l'errore di battitura va storto. :(

Il completamento della scheda sarebbe sicuramente più veloce e più facile. Sfortunatamente, l'installazione predefinita di git su alcuni computer Mac non ha il completamento della scheda abilitato.

In modo che stavo cercando una soluzione per il problema e ci sono diverse soluzioni trovate dalla ricerca web come StackOverflow, GitHub e dal supporto. Sfortunatamente, quelle soluzioni non hanno funzionato per me e si sono frustrate nel provare diverse soluzioni così tante volte.

Stavo cercando in profondità e provando diverse soluzioni e per fortuna, è una soluzione semplice. Di seguito sono riportati i passaggi che ho raccolto da diversi post e alla fine ha funzionato come previsto. Quindi spero di condividere con altri che hanno questo problema come me.

se vai alla ricerca web e puoi trovare molte soluzioni che menzionano il file bash di completamento git. Anche la guida di GitHub. Ma ti suggerisco di verificare prima se il file git-completato.bash è già nel tuo computer MAC con git-core o qualcos'altro derivante dall'installazione. puoi usare il comando qui sotto.

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

otterrai risultati inferiori. (potrebbe avere qualche differenza in base al contenuto)

/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

Ti consiglio di scegliere quale installato da git-core

Se lo script git-completamento.bash non esiste sul tuo computer, recuperalo da quello indicato di seguito e salvalo sul tuo computer locale in un nuovo file chiamato git-completamento.bash in / usr / local / etc / bash_completion.d / directory.

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

Se usi la shell Bash, Git viene fornito con un bel script di completamento automatico che puoi abilitare. Scaricalo direttamente dal codice sorgente di Git all'indirizzo

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

Se lo script git-completamento.bash esiste sul tuo computer, ma non si trova nella directory /usr/local/etc/bash_completion.d/, dovresti creare quella directory e copiarvi il file. Sotto il comando farà il lavoro:

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

Dopo il completamento di cui sopra. Lo script git-completamento.bash dovrebbe esistere sul tuo computer locale nella directory / usr / local / etc / bash_completion.d /.

Ora devi aggiornare il tuo profilo usando il comando seguente. Caricherà il tuo file bash aggiunto nel contesto del terminale.

source ~/.bash_profile

Grande!!! l'hai fatto. Basta avviare la finestra del terminale e provarlo. Basta digitare "git sta" mostrerà suggerimenti come di seguito:

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

vedi il mio post su GitHub qui:

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

Vedi il mio post medio qui:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.