git completamento automatico per * rami * dalla riga di comando?


351

Sulla mia macchina Linux ho il completamento automatico per i rami con Git.

[Nota che stiamo parlando del completamento del ramo git, non del completamento bash (ad es. Comandi, file, ecc.). Quindi NON la risposta a Lane ]

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

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

Come posso ottenere questa funzionalità su un Mac?

Ho provato a scaricare e correre bash-completion/bash_completione bash-completion/bash_completion.sh.innon ho provato gioia. Il primo ha dato messaggi di errore su declare: -A invalid_option. Il secondo non ha dato errori. Quando io git checkout+ TABperò sto ancora ottenendo un elenco di file nella directory, non rami. Sono nella radice del progetto.

Il completamento automatico per directory e comandi bash funziona correttamente, quindi è specifico per Git.

Risposte:


484

ok, quindi avevo bisogno dello script di completamento automatico git .

L'ho preso 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 ci si trova quando si esegue questa come home directory ( ~) viene utilizzata con la destinazione.

Quindi ho aggiunto al mio ~/.bash_profilefile 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 .bashrcfile, in questo caso ora uso:

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

Nota: $_indica l'ultimo argomento del comando precedente. quindi . $_significa eseguirlo - "esso" è .git-completion.bashin questo caso

Funziona ancora su Ubuntu e OSX e su macchine senza script di .git-completion.bashscript.

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

ps: se questo non funziona in modo anomalo, potresti dover correre chmod u+x ~/.git-completion.bashper concederti l'autorizzazione necessaria:

  • chmod è il comando che modifica le autorizzazioni del file
  • u indica l'utente che possiede il file, di default il suo creatore, cioè tu
  • + significa impostare / attivare / aggiungere un'autorizzazione
  • x significa eseguire l'autorizzazione, ovvero la possibilità di eseguire lo script

1
Sì, il riavvio del terminale dopo aver aggiunto lo script bash lo ha fatto funzionare. Ero seduto qui a chiedermi perché continuasse a provare a completare automaticamente la mia Modelscartella quando l'ho premuto m Tabper farlo completare automaticamente master.
Alex,

1
Vedi anche unix.stackexchange.com/q/48862/10043 per un suggerimento diverso
Michael Durrant,

3
Se la risposta accettata non funziona per nessuno, prova questo: source ~/.bash_profiledopo aver incollato il codice. Anche il riavvio del terminale farà la stessa cosa.
Ben

Grazie! Ho provato alcune altre cose ma nulla ha funzionato (incluso questo github.com/bobthecow/git-flow-completion/wiki/… ). La tua soluzione ha funzionato come un fascino;)
rgoliveira,

1
(non hai birra gitma impostazione predefinita di Apple git) brew install gite riavvia il terminale per coloro che si trovano ad affrontare uno strano errore comegit 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>]
Sachin

90

Alcune persone preferiscono utilizzare un gestore 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 gestore di pacchetti Mac OS di fatto).

Una volta installato Homebrew, puoi semplicemente installare git insieme a bash-completamento con brew install git bash-completion.

Dovrai quindi inserire quanto segue nel tuo ~/.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 non riesce con un errore 404 e hai già installato git, rimuovi la parte git di questa installazione brew)

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


27
Aggiungere gite aggiungere bash-completionnon è affatto come aggiungere. .git-completion.bash Sono programmi diversi e fanno cose abbastanza diverse: uno fa il comando automatico di completamento e l'altro fa il comando automatico di completamento e 'nair i due si incontreranno;)
Michael Durrant

lavorando come un incantesimo, molte grazie. Potresti spiegare a cosa serve lo script in cui mi hai aggiunto ~/.bash_profile?
Vikas Bansal,

Nonostante ciò che altri hanno detto su questa risposta, è quello che ha fatto funzionare git con il completamento automatico nel terminale.
Iain,

32

Esegui questo 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

È tutto. Questo ha funzionato per me.


1
(2 ° passaggio) Se qualcuno preferisce aprire il bash_profile con un editor di testo, basta fare questo: open -e .bash_profile
Nicolas Bodin-Ripert,

2
Su un Mac OS High Sierra vergine, il ~/.bash_profilefile non esiste. Va bene basta creare il file e posizionare lo ifscript lì dentro e salvare. Ricarica la tua shell dopo e funzionerà.
agm1984,

11

gite git-completion.bashgià fornito con macOS command line tools ( xcode-select --install). Per abilitare il completamento automatico di bash, aggiungilo 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

Ciò consentirà anche il completamento automatico per i rami git.


Abbastanza sicuro di aver installato gli strumenti da riga di comando, ma quel file non esiste nel mio caso. Felice di andare con la birra però (e dal momento che il mio spirito è anche con la birra, forse anche più saggio).
drevicko,

Grazie! IMO, questa dovrebbe essere la risposta con il segno di spunta verde.
geekisthenewcool

8

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

which git

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

Se installi git tramite brew, abilitare i completamenti bash per brew abiliterà anche i completamenti bash per git. Questo perché in /usr/local/etc/bash_completionrealtà si trova tutto in /usr/local/bash_completion.d, e il pacchetto brew per git installa lì uno script di completamento git.


Questo ha senso, ma come "abiliteresti i completamenti di bash per la birra"? Ti stai perdendo come farlo, questo dovrebbe far parte della tua risposta
skplunkerin

Ho appena fatto questo (funziona, grazie) tramite simplified.guide/macos/bash-completion , ma il completamento automatico è ritardato di un paio di secondi ... strano
skplunkerin

4

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

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

Per installare MacPorts: http://www.macports.org/install.php/

informazioni addizionali

Per quanto riguarda l'individuazione delle impostazioni di completamento sul tuo sistema Linux, dai un'occhiata a /etc/bash_completion.d/git (è un file lungo). Copiarlo da solo probabilmente non funzionerà, tuttavia, poiché è progettato per essere fornito dal framework di completamento tramite / etc / bash_completion (che proviene da /etc/profile.d/bash_completion.sh; file in / etc / profile .d provengono da / etc / profile).


2

Se il completamento di git è parzialmente interrotto, anche dopo l'approvvigionamento https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, potrebbe essere necessario aggiornare la versione di git.

Ad esempio, quando ho digitato git check+ TAB, il completamento automatico sarebbe corretto git checkout. Ma quando ho digitato git checkout+ TAB, non ha visualizzato solo l'elenco dei rami HEAD.

La soluzione per me era aggiornare la mia gitversione. 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 a 2.13.0, e ora completa correttamente i nomi dei miei rami.


Stavo riscontrando lo stesso problema, ma dovevo correre brew upgrade gite brew link git (con l'override abilitato)
Tope

1
Grazie per la cattura @Tope. Ho cambiato updatein upgrade.
Wisbucky,

2

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

Se lo script git-completamento.bash non esiste sul tuo computer, recuperalo dal link che ho fornito sopra (che è questo ) e salvalo sul tuo computer locale in un nuovo file chiamato git-completamento.bash in / directory usr / local / etc / bash_completion.d / . Se lo script git-completamento.bash esiste sul tuo computer, ma non si trova nella directory /usr/local/etc/bash_completion.d/ , dovremmo crearne una copia in quella directory. Un rapido sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash dovrebbe fare il trucco. Per coloro che sono curiosi di /usr/local/etc/bash_completion.d/ directory: serve per memorizzare nuovi comandi di completamento e potrebbe essere necessario crearlo se non esiste già sul computer.

A questo punto lo script git-completamento.bash dovrebbe esistere sul tuo computer locale nella directory /usr/local/etc/bash_completion.d/ . Ora inseriremo lo script di completamento git in bash puntandolo da ~ / .bash_profile .

Nota: la tilde nella frase precedente si riferisce alla home directory sul tuo computer. Aggiungi la seguente riga a ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash e salva. Il passaggio finale è ricaricare il tuo profilo bash. Puoi farlo eseguendo source ~ / .bash_profile nella tua sessione bash corrente.


1

L'ho provato e funziona bene per i rami ma quando fai git st+ taballora mostra l'errore in questo modo

opzione sconosciuta: --list-cmds = list-mainporcelain, altri, nohelpers, alias, list-complete, utilizzo configurazione: git [--version] [--help] [-C] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | --paginare | --no-pager] [--no-replace-objects] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

Cercato su internet e ho trovato che --list-cmdsin .git-completion.bashera in ultima versione del git e sul mio Mac la versione git era2.17.2

Ecco le soluzioni

Soluzione 1

  1. Controlla la versione di git usando il git --versioncomando
  2. Quindi inserisci lo stesso numero di versione nell'URL come ho fatto io

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. Quindi seguire gli stessi passaggi della risposta principale, inserire il codice seguente ~/.bash_profile

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

Soluzione 2

Dovresti provare ad aggiornare la versione git alla più recente, quindi dovrebbe funzionare.


0

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


L'ho fatto, proprio nella speranza di non doverlo affrontare - ancora nessun suggerimento sul ramo dopo aver colpito la scheda
Jytug

In realtà non hai bisogno di oh-my-zsh o di un sistema di plugin separato! Il completamento di Git viene fuori dalla scatola, devi solo abilitarlo.
SilverWolf,

0

La maggior parte degli utenti avrà gitinstallato come parte degli strumenti da riga di comando di xcode su /usr/bin/gite le regole di completamento bash per git saranno disponibili su /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

In questo caso non è necessario installare git da Homebrew o le regole di completamento di git da raw.githubusercontent.com. Basta creare un collegamento simbolico come segue:

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

Nota: assicurarsi di aver installato e configurato il bash-completionpacchetto da Homebrew.


-2

Trova il tuo .bashrcfile.

Aprilo e aggiungi questa riga in fondo:

source /etc/bash_completion.d/git


1
Non ho nulla di una /etc/bash_completion.d/cartella, su un sistema relativamente nuovo (OSX 10.10.3).
livingtech,

Prova a crearlo.
crmpicco,

Non bash_completion, git_completion che fa cose diverse.
Michael Durrant,

@MichaelDurrant Funziona. Fidati di me. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@crmpicco Potresti fornire istruzioni per la creazione /etc/bash_completion.d/git? Renderebbe la tua risposta più preziosa.
Dannid
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.