git auto-completo per * branches * alla riga di comando?

292

Sul mio computer Linux ho completato automaticamente per i rami con Git.

[Si noti che stiamo parlando del completamento del ramo git, del completamento della basem non (ad esempio comandi, file, ecc.). Quindi NON risposta di Lane affatto]

Ad esempio, posso digitare git checkout + TAB e ottenere un elenco di rami.

Oppure posso digitare git checkout feb* + TAB per ottenere tutti i rami che iniziano con "feb".

Come posso ottenere questa funzionalità su un Mac?

Ho provato a scaricare ed eseguire bash-completion/bash_completion e bash-completion/bash_completion.sh.in ma nessuna gioia. Il primo ha dato messaggi di errore su declare: -A invalid_option . Il secondo non ha dato errori. Quando I git checkout + TAB anche se sto ancora ricevendo un elenco di file nella directory, non rami. Sono nella root del progetto.

Il completamento automatico per le directory e i comandi bash funzionano correttamente, quindi è specifico per Git.

    
posta Michael Durrant 08.07.2012 - 20:25
fonte

10 risposte

408

ok, quindi avevo bisogno dello script di git autocompletion.

L'ho ricevuto da questo URL:

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

Non è necessario preoccuparsi della directory in cui ti trovi quando la esegui come directory home ( ~ ) utilizzata con la destinazione.

Poi ho aggiunto al mio file ~/.bash_profile il seguente codice "esegui se esiste":

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

Aggiornamento: sto rendendo questi bit di codice più concisi per ridurre il mio file .bashrc , in questo caso ora uso:

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

Nota: $_ indica l'ultimo argomento del comando precedente. quindi . $_ significa eseguirlo - "it" essendo .git-completion.bash in questo caso

Questo funziona ancora su Ubuntu e OSX e su macchine senza lo script .git-completion.bash script.

Ora git Tab (in realtà è git Tab Tab ) funziona come un incantesimo!

(PS: se questo non funziona, puoi dover eseguire chmod -X ~/.git-completion.bash per dare l'autorizzazione allo script per l'esecuzione.)

    
risposta data 09.07.2012 - 00:28
fonte
78

Alcune persone preferiscono utilizzare un gestore di pacchetti per automatizzare l'installazione, l'aggiornamento e la configurazione dei pacchetti Mac OS. Sono un fan dei gestori di pacchetti e penso che Homebrew sia il miglior gestore di pacchetti per Mac OS (alcuni direbbero che è il de facto gestore di pacchetti Mac OS).

Dopo aver installato Homebrew, puoi semplicemente installare git insieme a bash-completion con brew install git bash-completion .

Dovrai quindi inserire quanto segue in ~/.bash_profile :

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

(Nota: se questa installazione fallisce con un errore 404 e hai già installato git, rimuovi solo la parte git di questa installazione brew)

Maggiori informazioni sull'installazione di git e bash-completion con brew qui.

    
risposta data 29.05.2013 - 20:02
fonte
25

Esegui sul terminale:

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

Quindi, fai questo:

vi ~/.bash_profile

Aggiungi questa riga:

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

Questo è tutto. Questo ha funzionato per me.

    
risposta data 20.06.2016 - 13:30
fonte
6

Ecco cosa confonde alcuni di voi: avete installato brew o porte, ma state usando un git di sistema in /usr/bin/ . Per controllare questo:

which git

Se vedi /usr/bin/git , brew non è configurato correttamente o non hai installato git via brew.

Se installi git tramite brew, abilitando i completamenti di bash per brew si abilitano anche i completamenti di bash per git. Ciò è dovuto al fatto che /usr/local/etc/bash_completion sorgente effettivamente tutto in /usr/local/bash_completion.d e il pacchetto brew per git installa lì uno script di completamento git.

    
risposta data 04.03.2016 - 01:46
fonte
4

Potresti installare bash e git da MacPorts con l'opzione "bash_completion" abilitata. È probabilmente il modo più semplice per aggiornare sia git che i completamenti.

link

Per installare MacPorts: link

Informazioni aggiuntive

Come per localizzare le impostazioni di completamento sul tuo sistema Linux, dai un'occhiata a /etc/bash_completion.d/git (è un file lungo). La copia che da sola probabilmente non funzionerà, tuttavia, poiché è progettata per essere originata dal framework di completamento tramite / etc / bash_completion (che è originata da /etc/profile.d/bash_completion.sh; file in / etc / profile .d sono originati da / etc / profile).

    
risposta data 09.07.2012 - 00:06
fonte
4

git e git-completion.bash sono già dotati di strumenti da riga di comando macOS ( xcode-select --install ). Per abilitare il completamento automatico di bash, aggiungi questo al tuo ~/.bash_profile .

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

Questo abiliterà anche il completamento automatico dei rami git.

    
risposta data 20.09.2018 - 11:30
fonte
2

Se il completamento del tuo git è parzialmente rotto, anche dopo aver acquistato https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash , potresti semplicemente dover aggiornare la versione di Git.

Ad esempio, quando ho digitato git check + TAB , è possibile eseguire correttamente il completamento automatico di git checkout . Ma quando ho digitato git checkout + TAB , non ha visualizzato l'elenco dei rami, solo HEAD .

La soluzione per me era aggiornare la mia versione git . Ero su 2.7.0, che apparentemente non era compatibile con l'ultimo git-completion.bash . Ho eseguito brew upgrade git , che lo ha aggiornato alla versione 2.13.0 e ora completa automaticamente i nomi dei miei rami.

    
risposta data 30.05.2017 - 20:33
fonte
2

Di gran lunga, il miglior riferimento che ho trovato per risolvere questo problema è su SpinDance , di Connor Livingston :

If the git-completion.bash script doesn’t exist on your machine, please retrieve it from the link I provided above (which is this) and save it to your local machine in a new file called git-completion.bash in the /usr/local/etc/bash_completion.d/ directory. If the git-completion.bash script exists on your machine, but is not in the /usr/local/etc/bash_completion.d/ directory, we should create a copy of it in that directory. A quick sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash should do the trick. For those who are curious about the /usr/local/etc/bash_completion.d/ directory: it’s for storing new completion commands, and you may have to create it if it doesn’t already exist on your machine.

At this point the git-completion.bash script should exist on your local machine in the /usr/local/etc/bash_completion.d/ directory. Now we’ll plug the git completion script into bash by pointing to it from ~/.bash_profile.

Note: the tilde in the previous sentence refers to the home directory on your computer. Add the following line to ~/.bash_profile: source /usr/local/etc/bash_completion.d/git-completion.bash and save. The final step is to reload your bash profile. You can achieve this by running source ~/.bash_profile in your current bash session.

    
risposta data 15.08.2018 - 17:43
fonte
0

Installa oh-my-zsh e imposta zsh come shell predefinita e ringraziami più tardi:)

    
risposta data 20.09.2018 - 11:51
fonte
-2

Individua il tuo file .bashrc .

Aprilo e aggiungi questa linea in basso:

source /etc/bash_completion.d/git

    
risposta data 03.12.2014 - 18:17
fonte

Leggi altre domande sui tag