La finalización automática de Git no funciona en Mac OSX 10.11.5 El Capitan

Probé los ejemplos que se encuentran aquí para hacer que la finalización automática de Git funcione en El Capitan, sin embargo, ninguno de los ejemplos funciona para mí.

Lo instalé bash-completioncon Homebrew ( brew install bash-completion).

Este es mi ~/.bash_profileactual (como puede ver, he intentado algunas cosas):

CRMPiccosMacBook:etc crmpicco$ cat ~/.bash_profile 
alias ll='ls -lG'
alias composer="php /usr/local/bin/composer.phar"

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

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

#source /usr/local/git/contrib/completion/git-completion.bash
#GIT_PS1_SHOWDIRTYSTATE=true
#export PS1='[\u@mbp \w$(__git_ps1)]\$ '

Entonces, si entro en mi directorio con el repositorio de Git clonado y escribo y presiono git checkout m[TAB], no obtengo nada (cuando espero que se complete masterpreviamente).

Cuando ejecuto un sourceen él, no existe, sin embargo, está instalado.

CRMPiccos-MacBook:signup crmpicco$ brew install bash-completion
Warning: bash-completion-1.3_1 already installed
CRMPiccos-MacBook:signup crmpicco$ source /etc/bash_completion.d/git-completion.bash
-bash: /etc/bash_completion.d/git-completion.bash: No such file or directory
La respuesta de Tony Williams aquí parece sólida y creo que solía funcionar para mí en mi Mac. No estoy seguro de cuándo o por qué dejó de funcionar en mi Mac y ahora el consejo de Tony tampoco lo solucionó. Sin embargo, ¡el consejo de Michael Durrant aquí sí lo hizo!

Respuestas (6)

Está confundiendo la finalización básica de bash con el complemento requerido para completar los comandos de git.

El gitinstalado por Apple carece del git-completion.basharchivo requerido, por lo que debe instalar el git completo. Puede hacer esto fácilmente con homebrew: brew install githará el trabajo.

Una vez que haya hecho eso, elimine los comentarios de sus tres líneas principales: -

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

Ahora source ~/.bash_profiley debería funcionar bien.

Hice exactamente lo que dijiste, Tony, pero sigue sin funcionar.
Los pasos que necesita son: - (1) Instalar bash-completionusando homebrew (2) instalar gitusando homebrew. (3) agregue las líneas anteriores a su archivo .bash_profile. Ahora abra una nueva ventana de Terminal y debería encontrar la finalización de git funcionando.
Instalar git con brew install gitresolvió mi problema. Gracias @TonyWilliams
Encontré con Homebrew git version 2.15.0que la ruta del script de finalización de bash es ligeramente diferente, por lo que`brew --prefix`/git/contrib/completion/git-completion.bash
En mi caso, git version: 2.18.0, el archivo estaba en$(brew --prefix)/etc/bash_completion.d/git-completion.bash
Tuve que instalar brew install git bash-completiony luego agregar if [ -f $(brew --prefix)/etc/bash_completion ]; then . $(brew --prefix)/etc/bash_completion fia bash_profile.

Como nota para los usuarios, como yo, que ya actualizaron a macOS Catalina, que quedó en desuso bash, pero terminaron en esta respuesta como un resultado superior...

Para macOS Catalina+, que usa zsh, existen algunos otros requisitos. Descarga ambos scripts:

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

Luego actualice su ~/.zshrccon:

zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash
fpath=(~/.zsh $fpath)

autoload -Uz compinit && compinit
No estoy completamente seguro de por qué esto fue rechazado cuando es correcto y relevante para Catalina, que usa zsh.
¿Dónde se supone que deben almacenarse estos archivos?
El título de esta pregunta se refiere a Catalina, pero un lector cuidadoso notará que el detalle en la pregunta se refiere a bash. Por lo tanto, una zshrespuesta pierde el punto de la pregunta.
Obtener not found: __git_aliased_commandal intentar autocompletar el nombre de la rama: / comandos básicos de autocompletar, por ejemplo, para checkouttrabajos.

Habilitar el autocompletado de pestañas de Git para Zsh

Las nuevas Mac usan el shell Zsh de forma predeterminada. Si está utilizando Zsh, agregue la siguiente línea al archivo ~/.zshrc y reinicie su aplicación Terminal:

autoload -Uz compinit && compinit

Alternativamente, puede ejecutar los siguientes dos comandos en su aplicación Terminal para agregar la línea necesaria al archivo .zshrc y reiniciar su shell.

echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
source ~/.zshrc

El autocompletado de pestañas Git ahora está habilitado en su Mac.

Esto resolvió mi problema. Muchísimas gracias :)

Con la ayuda de esta respuesta lo resolví usando estos comandos

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

Luego edité el archivo ejecutándolo vi ~/.zshrcy le agregué la siguiente parte

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

Luego source ~/.zshrcejecuté y las sugerencias de git comenzaron a funcionar correctamente.

El título de esta pregunta se refiere a Catalina, pero un lector cuidadoso notará que el detalle de la pregunta se refiere a bash. Por lo tanto, una respuesta zsh pierde el punto de la pregunta.
Esto resulta enERROR: this script is obsolete, please see git-completion.zsh

Para las personas que usan bash 5, puede instalar el paquete homebrew bash-completion@2y agregar lo siguiente a su archivo ~/.bash_profile.

[[ -r "$(brew --prefix)/etc/profile.d/bash_completion.sh" ]] && . "$(brew --prefix)/etc/profile.d/bash_completion.sh"
¿Cómo mejora esto en respuesta apple.stackexchange.com/a/245324/237
La sintaxis para la configuración con la finalización de bash más reciente es diferente a la otra respuesta.

Esto es lo que funcionó para mí en Sierra. Encontrado aquí .

Después de instalar bash-completiony agregar el fragmento a su .bash_profile:

cd /usr/local/etc/bash_completion.d  
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.bash-completion  
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-machine.bash-completion  
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.bash-completion