git auto-complete para * ramas * en la línea de comando?

291

En mi máquina con Linux, he completado la función de autocompletar para sucursales con Git.

[Tenga en cuenta que estamos hablando de la finalización de la rama git, no finalización de bash (por ejemplo, comandos, archivos, etc.). Por lo tanto, NO la respuesta de Lane en absoluto]

Por ejemplo, puedo escribir git checkout + TAB y obtener una lista de sucursales.

O puedo escribir git checkout feb* + TAB para obtener todas las ramas que comiencen con "feb".

¿Cómo puedo obtener esta funcionalidad en una Mac?

Intenté descargar y ejecutar bash-completion/bash_completion y bash-completion/bash_completion.sh.in pero no me alegro. El primero dio mensajes de error sobre declare: -A invalid_option . El segundo no dio errores. Cuando git checkout + TAB aunque todavía estoy obteniendo una lista de archivos en el directorio, no sucursales. Estoy en la raíz del proyecto.

La función de autocompletar para directorios y comandos bash funciona bien, por lo que es específica de Git.

    
pregunta Michael Durrant 08.07.2012 - 20:25

10 respuestas

406

ok, así que necesitaba el script de autocompletado git .

Lo obtuve de esta url:

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

No tiene que preocuparse por el directorio en el que se encuentra cuando lo ejecuta, ya que su directorio de inicio ( ~ ) se usa con el destino.

Luego agregué a mi archivo ~/.bash_profile el siguiente código 'ejecutar si existe':

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

Actualización: estoy haciendo estos bits de código más concisos para reducir mi archivo .bashrc , en este caso ahora uso:

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

Nota: $_ significa el último argumento del comando anterior. así que . $_ significa ejecutarlo - "it" siendo .git-completion.bash en este caso

Esto todavía funciona tanto en Ubuntu como en OSX y en las máquinas sin el script .git-completion.bash script.

Ahora git Tabulación (en realidad es git Tabulación//bdbd ) ¡funciona como un encanto!

(PS: si esto no funciona de forma aleatoria, es posible que necesites ejecutar chmod -X ~/.git-completion.bash para que el script tenga permiso de ejecución).

    
respondido por el Michael Durrant 09.07.2012 - 00:28
77

Algunas personas prefieren usar un administrador de paquetes para automatizar la instalación, actualización y configuración de los paquetes de Mac OS. Soy un fanático de los administradores de paquetes, y creo que Homebrew es el mejor administrador de paquetes para Mac OS (algunos dirían que es el administrador de paquetes de Mac OS de facto).

Una vez que hayas instalado Homebrew, simplemente puedes instalar git junto con bash-completed con brew install git bash-completion .

Luego deberá colocar lo siguiente en su ~/.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: si esta instalación falla con un error 404 y ya tienes git instalado, simplemente elimina la parte de git de esta instalación de brew)

Más información sobre la instalación de git y bash-completed con brew aquí.

    
respondido por el Lane 29.05.2013 - 20:02
24

Ejecuta esto en la terminal:

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

Entonces, haz esto:

vi ~/.bash_profile

Añade estas líneas:

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

Eso es todo. Esto funcionó para mí.

    
respondido por el Caique Pereira 20.06.2016 - 13:30
5

Esto es lo que los confunde a algunos de ustedes: tiene brew o puertos instalados, pero está usando un git del sistema en /usr/bin/ . Para comprobar esto:

which git

Si ves /usr/bin/git , entonces brew no está configurado correctamente o no has instalado git a través de brew.

Si instala git a través de brew, habilitar las terminaciones de bash para brew también habilitará las terminaciones de bash para git. Esto se debe a que /usr/local/etc/bash_completion realmente genera todo en /usr/local/bash_completion.d , y el paquete brew para git instala un script de finalización de git allí.

    
respondido por el Brandon 04.03.2016 - 01:46
3

Puedes instalar bash y git desde MacPorts con la opción "bash_completion" habilitada. Probablemente sea la forma más fácil de mantener actualizados tanto git como las finalizaciones.

enlace

Para instalar MacPorts: enlace

Información adicional

En cuanto a la ubicación de la configuración de finalización en su sistema Linux, eche un vistazo en /etc/bash_completion.d/git (es un archivo largo). Sin embargo, copiar eso por sí mismo probablemente no funcionará, ya que está diseñado para que el marco de trabajo lo complete a través de / etc / bash_completion (que se obtiene de /etc/profile.d/bash_completion.sh; archivos en / etc / profile .d proceden de / etc / profile).

    
respondido por el Kimmo Suominen 09.07.2012 - 00:06
3

git y git-completion.bash ya vienen con las herramientas de línea de comandos de macOS ( xcode-select --install ). Para habilitar el autocompletado de bash, agregue esto a su ~/.bash_profile .

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

Esto también habilitará el autocompletado para las ramas de git.

    
respondido por el Harsh Vakharia 20.09.2018 - 11:30
1

Si su finalización de git está parcialmente dañada, incluso después de obtener https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash , es posible que solo necesite actualizar su versión de git.

Por ejemplo, cuando escribí git check + TAB , autocompletaría correctamente git checkout . Pero cuando escribí git checkout + TAB , no mostraba la lista de ramas, solo HEAD .

La solución para mí fue actualizar mi versión git . Estaba en la versión 2.7.0, que aparentemente no era compatible con el último git-completion.bash . Ejecuté brew upgrade git , que lo actualicé a 2.13.0, y ahora se completan correctamente los nombres de mis sucursales.

    
respondido por el wisbucky 30.05.2017 - 20:33
1

Por mucho, la mejor referencia que he encontrado para resolver este problema está en SpinDance , por Connor Livingston :

  

Si el script git-completed.bash no existe en su máquina, recupérelo del enlace que proporcioné anteriormente (que es this ) y guárdelo en su máquina local en un nuevo archivo llamado git-completed.bash en el directorio /usr/local/etc/bash_completion.d/ . Si el script git-completed.bash existe en su máquina, pero no está en el directorio /usr/local/etc/bash_completion.d/ , debemos crear una copia. de eso en ese directorio. Un rápido sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash debería hacer el truco. Para aquellos que tengan curiosidad por el directorio /usr/local/etc/bash_completion.d/ : es para almacenar nuevos comandos de finalización, y es posible que tenga que crearlo si aún no existe en su máquina.

     

En este punto, el script git-completed.bash debería existir en su máquina local en el directorio /usr/local/etc/bash_completion.d/ . Ahora conectaremos el script de finalización de git a bash al señalarlo desde ~ / .bash_profile .

     

Nota: la tilde en la oración anterior se refiere al directorio de inicio en su computadora. Agregue la siguiente línea a ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash y guarde. El último paso es recargar tu perfil de bash. Puedes lograrlo ejecutando source ~ / .bash_profile en tu sesión de bash actual.

    
respondido por el ricardodelavega 15.08.2018 - 17:43
0

Instala oh-my-zsh y configura zsh como tu shell predeterminado y dame las gracias más adelante:)

    
respondido por el Saša Šijak 20.09.2018 - 11:51
-2

Localiza tu archivo .bashrc .

Ábralo y agregue esta línea en la parte inferior:

source /etc/bash_completion.d/git

    
respondido por el crmpicco 03.12.2014 - 18:17

Lea otras preguntas en las etiquetas