472 votos

¿git autocompletar para *ramas* en la línea de comandos?

En mi máquina Linux, tengo autocompletado para ramas con Git.

[Nota: estamos hablando de la completación de ramas en git, no de la completación en bash (por ejemplo, comandos, archivos, etc). Por lo tanto, NO es la respuesta de Lane en absoluto]

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

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

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

Intenté descargar y ejecutar bash-completion/bash_completion y bash-completion/bash_completion.sh.in pero sin éxito. El primero mostró mensajes de error sobre declare: -A invalid_option. El segundo no mostró errores. Sin embargo, al escribir git checkout+TAB, sigo obteniendo una lista de archivos en el directorio, no de ramas. Estoy en la root del proyecto.

El autocompletado para directorios y comandos de bash funciona bien, por lo que es específico de Git.

0 votos

Acabo de unirme a esta comunidad, así que todavía no puedo responder, pero encontré que "oh-my-zsh" es súper útil y realmente me gusta la interfaz de usuario: github.com/ohmyzsh/ohmyzsh Por supuesto, esto es para personas que usan zsh. Supongo que no funciona para bash...

0 votos

Ahora que Mac usa zsh en lugar de bash esta respuesta puede resultar útil.

1 votos

Para usuarios de zsh: echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc enlace

604voto

scrot Puntos 692

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

Lo obtuve de esta url usando el siguiente comando en la aplicación Terminal:

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

No hay necesidad de preocuparse por en qué directorio te encuentras cuando ejecutas esto, ya que se usa tu directorio de inicio (~) como objetivo.

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

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

Actualización: Estoy haciendo estos fragmentos 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, por lo que . $_ significa ejecutarlo - "ello" siendo .git-completion.bash en este caso

Esto sigue funcionando en Ubuntu y OSX y en máquinas sin el script .git-completion.bash.

Ahora git Tab (realmente es git TabTab) ¡funciona a la perfección!

p.d.: Si esto no funciona de inmediato, es posible que necesites ejecutar chmod u+x ~/.git-completion.bash para otorgarte los permisos necesarios:

  • chmod es el comando que modifica los permisos de los archivos
  • u significa el usuario que posee el archivo, por defecto su creador, es decir, tú
  • + significa establecer/activar/agregar un permiso
  • x significa permiso de ejecución, es decir, la capacidad de ejecutar el script

1 votos

Sí, reiniciar la terminal después de agregar el script de bash hizo que funcionara. Estaba sentado aquí preguntándome por qué seguía intentando autocompletar a mi carpeta de Models cuando presionaba m Tab para autocompletar a master.

1 votos

Ver también unix.stackexchange.com/q/48862/10043 para obtener un consejo diferente.

8 votos

Si la respuesta aceptada no funciona para nadie, entonces prueba esto: source ~/.bash_profile después de pegar el código. Reiniciar la terminal también hará lo mismo.

119voto

Lane Puntos 334

Algunas personas prefieren usar un gestor de paquetes para automatizar la instalación, actualización y configuración de paquetes de Mac OS. Soy fan de los gestores de paquetes, y considero que Homebrew es el mejor gestor de paquetes para Mac OS (algunos dirían que es el gestor de paquetes por defecto de Mac OS).

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

Luego necesitarás agregar lo siguiente en tu ~/.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 este brew install)

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

32 votos

Añadir git y añadir bash-completion no es en absoluto lo mismo que añadir .git-completion.bash. Son programas diferentes y hacen cosas bastante diferentes: uno completa comandos bash y el otro completa comandos git, ¡y nunca se cruzarán! ;)

0 votos

Funciona perfectamente, muchas gracias. ¿Podrías por favor explicar cuál es el uso del script que me has añadido en ~/.bash_profile?

3 votos

A pesar de lo que otros hayan dicho sobre esta respuesta, es la que hizo que el autocompletado de git funcionara en la terminal.

8voto

Brandon Puntos 1

Aquí está lo que está confundiendo a algunos de ustedes: tienen brew o ports instalados, pero están usando un git del sistema en /usr/bin/. Para verificar esto:

which git

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

Si instalas git a través de brew, entonces habilitar las completaciones de bash para brew también habilitará las completaciones de bash para git. Esto se debe a que /usr/local/etc/bash_completion en realidad incluye todo en /usr/local/bash_completion.d, y el paquete de brew para git instala un script de completación de git allí.

0 votos

Esto tiene sentido, pero ¿cómo "habilitar las completaciones de bash para brew"? Te falta explicar cómo hacer eso, esto debería ser parte de tu respuesta

0 votos

Acabo de hacer esto (funciona, gracias) a través de simplified.guide/macos/bash-completion, pero la autocompletación se retrasa un par de segundos... extraño

4voto

Ian Puntos 21

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

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

Para instalar MacPorts: http://www.macports.org/install.php/

Información adicional

En cuanto a encontrar la configuración de completado en tu sistema Linux, echa un vistazo a /etc/bash_completion.d/git (es un archivo largo). Sin embargo, copiar esto por sí solo probablemente no funcionará, ya que está diseñado para ser tomado por el marco de completado a través de /etc/bash_completion (que es tomado de /etc/profile.d/bash_completion.sh; los archivos en /etc/profile.d son tomados de /etc/profile).

-2voto

Josh Puntos 36

Localiza tu archivo .bashrc.

Ábrelo y agrega esta línea al final:

source /etc/bash_completion.d/git

1 votos

No tengo nada una carpeta /etc/bash_completion.d/, en un sistema relativamente nuevo (OSX 10.10.3).

0 votos

Intenta crearlo.

0 votos

No bash_completion, git_completion que hace cosas diferentes.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X