El `git` de Homebrew no usa la terminación

144

Cuando uso el git de OSX, después de modificar un archivo, simplemente puedo hacer git commit <tab>, y eso completará automáticamente el nombre del archivo al que se modificó. Sin embargo, si instalo una versión más nueva de git de homebrew y la uso, esa característica ya no funciona (lo que significa que presiono <tab>y simplemente me "pregunta" en qué archivo quiero hacerlo, incluso los que no tienen cambios )

¿Alguien puede arrojar algo de luz sobre por qué y cómo resolver eso? Prefiero usar el git de homebrew, ya que está más actualizado.

Mi shell es zsh, y ni la instalación bash-completionni el zsh-completionstrabajo (incluso después de seguir las instrucciones posteriores a la instalación de homebrew).

Además, después de instalar git con homebrew dice

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Entonces, ¿no debería poder usar uno de esos?

usuario137369
fuente
¿Qué versión de zshy gitestás usando?
simont
Lo último de homebrew. zsh 5.0.2 y git 1.8.1.3
user137369
¿ gitFuncionan otras terminaciones ( git co<TAB>==> git commit, por ejemplo)?
simont
2
Sospecho que algunos problemas diferentes terminan aquí, pero la instalación de git a través de brew me solucionó esto. Parece que zsh-completionsno estaba contento con el mac git, aunque funcionó bien antes (posiblemente actualizado a ciegas a 0.17.x).
ti7

Respuestas:

287

Estas buscando:

brew install git bash-completion

Como dice el comentario de warpc, deberás agregar lo siguiente a tu ~/.bash_profilepara que funcione bash-complete de homebrew:

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

Lo anterior se menciona en las advertencias cuando instala la fórmula de finalización de bash.


Nota: si está usando Bash v4 o posterior (vía brew install bash), entonces querrá usarlo brew install bash-completion@2, para habilitar la finalización de pestañas agregue lo siguiente ~/.bash_profilecomo se describe en las advertencias:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

La exportación adicional es necesaria para git, docker, youtube-dl y otras finalizaciones que pueden incluirse en el $(brew --prefix)/etc/bash_completion.d/directorio.

Graham Perks
fuente
3
Mi caparazón es zsh. ¿Eso significa que debo hacer brew install git zsh-completions? Además, después de instalar git con homebrew, dice Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, ¿no podría usar uno de esos?
user137369
2
Ni instalar bash-completionni zsh-completionstrabajar (incluso después de seguir las instrucciones de homebrew después de la instalación).
user137369
12
¿También agregó en ~ / .bash_profile para bash case este contenido: if [-f $ (brew --prefix) / etc / bash_completion]; luego . $ (brew --prefix) / etc / bash_completion fi
warpc
55
Ya he instalado git sin preparación. Ahora quiero instalar bash_completion usando brew. Ejecuté brew install bash-complete y agregué el código anterior, pero no
tuve
3
Vale la pena señalar que instalar git a través de brew es esencial para que esto funcione. No sabía que la versión de manzanas de git era parte del problema. Voté esta respuesta antes de darme cuenta y ahora no puedo votar :(
Reimus Klinsman
109

La finalización de esta pestaña git de Get funciona en OSX sin tener que reiniciar su terminal:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile
usuario2347638
fuente
14
Es un poco tramposo llamarlo una línea cuando se usa &&. Cualquier script bash podría ser de una sola línea como esa.
usuario137369
1
¡Eres el verdadero MVP!
jeez
2
Definitivamente mejor que el brew installmétodo. Simplemente porque funciona.
dchayka
2
He estado buscando durante horas una solución para saber por qué bash no estaba tomando los comandos git-complete. Finalmente, esto funcionó! Muchas gracias!
TheAmazingKnight
1
Esta es la solución real más fácil
Rigin Oommen
22

En caso de que alguien más cometa mi tonto error, inténtalo brew install git. Estaba usando el gitque viene con Xcode y no me di cuenta de que nunca había instalado el git de Homebrew para obtener los autocompletados.

Harvey
fuente
19

por alguna razón me faltaba el archivo, $(brew --prefix)/etc/bash_completionasí que la respuesta correcta de @Graham Perks no funcionó para mí

Terminó la solución en mi caso fue:

brew unlink bash-completion
brew link bash-completion
Anéntrópico
fuente
Después de seguir la respuesta de @Graham Pixel, esto finalmente hizo que funcionara para mí.
Lucas
Esto también funcionó para mí con Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) y bash-complete 1.3 en OS X Sierra 10.12.6.
Jared
10

Resolví el problema descubriendo que $(brew --prefix)/etc/bash_completionregresaba Permission deniedcuando se ejecutaba. Entonces, después de un simple:

chmod +x $(brew --prefix)/etc/bash_completion

Todo ahora está funcionando bien. Sin embargo, me pregunto por qué Homebrew no hace que el bash_completionarchivo sea ejecutable en la instalación.

Asbjørn Ulsberg
fuente
55
No, esto está mal. bash_completionestá destinado a ser source'd para que las definiciones estén en su shell; la ejecución no tendrá efecto.
toddkaufmann
5

Encontró una solución de trabajo. Es muy reciente (creado hace 16 horas y comprometido hace 2 horas), y viene directamente de homebrew .

brew install git --without-completions

Solo lo probé, y finalmente funciona según lo previsto.

usuario137369
fuente
3
No veo cómo la instalación gitsin finalización podría mejorar la situación de finalización que no funciona. Creo que la respuesta de Graham Perks stackoverflow.com/a/14970926/1199564 debe marcarse como la respuesta correcta.
mgd
Tuve un problema similar y he resuelto reinstalar git --without-completionsy obtener el bash-completion.basharchivo de lo .bash_profileque probablemente se anule siguiendo el procedimiento estándar.
Leonardo
1
Esta no es una respuesta correcta. La respuesta de @graham perks es correcta.
CantGetANick
La respuesta de @CantGetANick Graham no resolvió mi problema, esto sí, por eso lo marqué.
usuario137369
1
De acuerdo al 100% con el usuario 137369: ya tenía instalado el paquete bash-complete de homebrew, por lo que la respuesta de @graham no podría funcionar para mí. Sin embargo, brew install gitsolucionó todo (no es necesario para --with-completions). Creo que esta también es una respuesta correcta.
bronson
5

Tuve el mismo problema e incluso encontré esta publicación esta mañana. Solucioné el problema actualizando brew with brew updatey luego reinstalando git with brew reinstall git.

Luego me notificaron de otro archivo que está bloqueando el proceso de vinculación homebrew, en mi caso lo fue /usr/local/share/zsh/site-functions/git-completion.bash. Eliminar el archivo y ejecutarlo brew link gitresolvió el problema. Supongo que era solo una mala versión de la receta con la que nos topamos.

Jonathan Knapp
fuente
1
También notará que la versión de git que está usando es la de Apple y no la versión instalada por Homebrew. Al menos en mi caso lo hice. Puede verificar la versión congit --version
Jonathan Knapp
No Eso todavía no funciona para mí. Siempre he vuelto a usar el git de OSX, esa finalización es una característica demasiado grande para dejarla pasar.
user137369
git-complete dejó de funcionar para mí después de actualizar a Mavericks. Tenía que hacerlo brew reinstall gity también brew reinstall bash-completionhacerlo funcionar de nuevo.
Krešimir Nesek
3

Si tiene $BASH_VERSION<4.1, por ejemplo 3.2.57(1)-release, continúe con:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Sin embargo, si tiene que brew install bashobtener la versión 4.4.12(1)-release , puede usar las terminaciones mejores y más completas en:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Tenga en cuenta que algunos paquetes (brew, docker, tmux) aún incluirán algunas terminaciones, por $(brew --prefix)/etc/bash_completion.d/lo que puede agregar:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Finalmente, debería poder agregar el script de finalización de git si por alguna razón la forma en que instaló git no lo agregó a ninguno de esos:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

Puede obtenerlo y agregarlo con lo anterior.

dlamblin
fuente
1

Para mí, tuve que poner

source $(brew --prefix)/etc/bash_completion

en .bashrc(no .bash_profile) para que esto funcione.

".bash_profile se ejecuta para shells de inicio de sesión, mientras que .bashrc se ejecuta para shells interactivos sin inicio de sesión" - de ¿Cuál es la diferencia entre .bash_profile y .bashrc? Me parece que MacOS Sierra no se ejecuta .bash_profileal abrir una nueva ventana de terminal, solo .bashrc.

No lo pondría en _bash_profile, porque luego tendría que reiniciar / cerrar sesión para que las actualizaciones surtan efecto.

antonyh
fuente
1

Esto funcionó para mí en Mojave (OSX 10.14.1):

brew install bash-completion

Luego agregue la siguiente línea a su ~ / .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
ar31an
fuente
Simplemente multiplica el número de advertencias
Hussain Akram, del
1

En 2019, usando Bash v5, no necesita obtener explícitamente el script de finalización de git bash en su .bash_profileo.bashrc

  1. Asegúrese de tener las siguientes dos líneas en su .bashrc
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
  1. Descargue el script de finalización de git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) y guárdelo /usr/local/etc/bash_completion.d/comogit

¡Eso es! Bash recogerá automáticamente el archivo de finalización de git y habilitará la finalización.


Nota al margen: recomiendo incluir todos estos cambios, .bashrcya que esto garantiza que cuando caiga en un shell interactivo (es decir, desde pipenv shell), las terminaciones se cargarán correctamente ya que bash generará .bashrcy NO .bash_profile.

cgons
fuente
0

Puede tener algo que ver con el uso de libedit en lugar de readline en Lion.

Intenta instalar readline antes de git.

brew install readline
Alex
fuente
0

Para aquellos que ya tienen instalado brew-bash-complete. No tenía el script de finalización de git instalado y no pude encontrar ningún toque para eso.

Entonces lo agregué manualmente:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Tenga en cuenta que debe cambiar el nombre del archivo y eliminar la extensión para que funcione.

Si no tiene completado o git instalado, instálelo en la respuesta aceptada.

brew install git bash-completion

Andrei
fuente
0

Si usó homebrew para instalar git, entonces probablemente no haya necesidad de instalar nada para admitir la finalización de git. El archivo "git-completar.bash" está en alguna parte (el mío estaba aquí: /usr/local/git/contrib/completion/git-completion.bash)

Todo lo que necesita hacer es encontrar el archivo: sudo find / -type f -name "git-completar.bash"

Luego busca su ruta en tu .bash_profile. Por ejemplo, necesitaba agregar esta línea a mi ~ / .bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash

No olvides buscar tu ~ / .bash_profile o volver a abrir tu terminal;)

de: how-enable-git-tab-complete-bash-mac-os-x

Dozon Higgs
fuente
@ user137369 lo hace, porque aquí no es necesario instalar cosas que ya estaban instaladas ...
Dozon Higgs
0

Sé que esta es una publicación anterior, pero realmente no necesita instalar ningún paquete adicional.

Homebrew te informa que hay un directorio con todo lo que necesitas.

Simplemente puede agregar la siguiente línea a su .bash_profilesi está utilizando Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash
aldavigdis
fuente
-1

Habilite la finalización automática de comandos GIT en MAC-OS Mojave 10.14 Soy desarrollador y uso GIT desde la línea de comandos todo el tiempo. Cuando considero la perspectiva del desarrollo, solía ejecutar muchos comandos usando la línea de comandos para las operaciones GIT. La mayoría de las veces es muy molesto que MAC OS no tenga soporte automático para la finalización de comandos, lo que apoyo parcialmente. así como las sugerencias de comandos, lo que significa cuáles son los comandos disponibles para los caracteres escritos. Por lo tanto, es muy problemático escribir un comando muy largo y una tarea principalmente repetitiva, ya que el error tipográfico falla. :(

La finalización de la pestaña ciertamente sería más rápida y fácil. Desafortunadamente, la instalación predeterminada de git en algunas computadoras Mac no tiene habilitada la finalización de pestañas.

De modo que estaba buscando una solución para el problema y hay varias soluciones encontradas en la búsqueda web, como StackOverflow, GitHub y del medio. Desafortunadamente, esas soluciones no funcionaron para mí y se frustraron al probar diferentes soluciones tantas veces.

Estaba buscando profundamente y probando diferentes soluciones y, afortunadamente, es una solución fácil. A continuación se detallan los pasos que he recopilado de varias publicaciones y finalmente funcionó como se esperaba. Así que espero compartir con otros que tienen este problema como yo.

Si va a la búsqueda web y puede encontrar muchas soluciones que mencionan el archivo bash de finalización de git. Incluso la guía de GitHub también. Pero le sugiero que compruebe primero si el archivo git-completar.bash ya está en su computadora MAC con el git-core o algo más que vino de la instalación. Puedes usar el siguiente comando.

sudo find / -type f -name "git-completion.bash"

obtendrá los siguientes resultados. (puede tener alguna diferencia según el contenido)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Te sugiero que elijas qué instalado desde git-core

Si el script git-completar.bash no existe en su máquina, recupérelo de lo que se proporciona a continuación y guárdelo en su máquina local en un nuevo archivo llamado git-completar.bash en / usr / local / etc / bash_completion.d / directorio.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Si usa el shell Bash, Git viene con un buen script de autocompletado que puede habilitar. Descárguelo directamente del código fuente de Git en

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Si el script git-completar.bash existe en su máquina, pero no está en el directorio /usr/local/etc/bash_completion.d/, debe crear ese directorio y copiar el archivo en él. El siguiente comando hará el trabajo:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

Después de completar lo anterior. El script git-completar.bash debería existir en su máquina local en el directorio / usr / local / etc / bash_completion.d /.

Ahora necesita actualizar su perfil con el siguiente comando. Cargará el archivo bash agregado en el contexto del terminal.

source ~/.bash_profile

¡¡¡Excelente!!! lo has hecho. Simplemente inicie la ventana de terminal y pruébelo. Simplemente escriba "git sta", mostrará las sugerencias a continuación:

git sta
stage    stash    status
git chec<TAB> will show git checkout

mira mi publicación de GitHub aquí:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Vea mi publicación de Medium aquí:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Dilanka M
fuente