En mi máquina Linux tengo autocompletado para sucursales con Git.
[Tenga en cuenta que estamos hablando de la finalización de la rama de git, no de la finalización de bash (por ejemplo, comandos, archivos, etc.). Por lo tanto, NO es la respuesta de Lane en absoluto]
Por ejemplo, puedo escribir git checkout
+ TABy obtener una lista de sucursales.
O puedo escribir git checkout feb*
+ TABpara obtener todas las ramas que comienzan con "feb".
¿Cómo puedo obtener esta funcionalidad en una Mac?
Intenté descargar y ejecutar bash-completion/bash_completion
, bash-completion/bash_completion.sh.in
pero no me alegré. El primero dio mensajes de error sobre declare: -A invalid_option
. El segundo no dio errores. Cuando hago git checkout
+ TAB, sigo obteniendo una lista de archivos en el directorio, no ramas. Estoy en la raíz del proyecto.
La función de autocompletar para directorios y los comandos bash funcionan correctamente, por lo que es específico de Git.
Ok, entonces necesitaba el script de autocompletado de git .
Obtuve eso 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 debe preocuparse por el directorio en el que se encuentra cuando ejecuta esto, ya que su directorio de inicio ( ~
) se usa con el objetivo.
Luego agregué a mi ~/.bash_profile
archivo el siguiente código 'ejecutar si existe':
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Actualización: estoy haciendo que estos fragmentos de código sean más concisos para reducir mi .bashrc
archivo, en este caso ahora uso:
test -f ~/.git-completion.bash && . $_
Nota: $_
significa el último argumento del comando anterior. entonces . $_
significa ejecutarlo - siendo "eso" .git-completion.bash
en este caso
Esto todavía funciona tanto en Ubuntu como en OSX y en máquinas sin la secuencia de .git-completion.bash
comandos.
¡ Ahora git
Tab(en realidad es git
TabTab) funciona a las mil maravillas!
pd: si esto no funciona de inmediato, es posible que deba ejecutar chmod u+x ~/.git-completion.bash
para otorgarse el permiso necesario:
chmod
es el comando que modifica los permisos de archivou
significa el usuario propietario del archivo, por defecto su creador, es decir, usted+
significa establecer/activar/agregar un permisox
significa permiso de ejecución, es decir, la capacidad de ejecutar el scriptModels
carpeta cuando presioné m
Tab
para que se autocompletara en master
.source ~/.bash_profile
después de pegar el código. Reiniciar el terminal también hará lo mismo.git
pero Apple predeterminado git
) brew install git
y reinicie la terminal para aquellos que enfrentan errores extraños comogit 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>]
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Gracias de nuevo :)git-completion.bash
está obsoleto: los usuarios de MacOS deben usar el contenedor de finalización zsh para git git-completion.zsh
en su lugar: github.com/git/git/blob/master/contrib/completion/…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 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 facto de Mac OS).
Una vez que haya instalado Homebrew, simplemente puede instalar git junto con bash-completion con brew install git bash-completion
.
A continuación, deberá poner 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 tiene git instalado, simplemente elimine la parte de git de esta instalación de preparación)
Más información sobre la instalación de git y bash-completion con brew aquí.
git
y agregar bash-completion
no es lo mismo que agregar .git-completion.bash
Son programas diferentes y hacen cosas bastante diferentes: uno hace el autocompletado de comandos bash y el otro hace el autocompletado de comandos git y 'nair los dos se encontrarán;)~/.bash_profile
?~/.bash_profile
se especificaron para mí en la salida de homebrew. Usé esos en lugar de las líneas anteriores. Luego, debe volver a cargar el perfil de bash en cada ventana de terminal en la que le gustaría usar el autocompletado, usando el comandosource ~/.bash_profile
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í.
~/.bash_profile
archivo no existe. Está bien, solo cree el archivo y coloque ese if
script allí y guárdelo. Vuelva a cargar su caparazón después y funcionará.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 archivo ~/.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 sucursales de git.
if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash > /dev/null fi
~/.bash_profile
, no olvide ejecutar también source ~/.bash_profile
(especialmente si crea el ~/.bash_profile
archivo por primera vez)xcode-select --install
desde Terminal.app y reinicie cuando haya terminado.macOs cambió de bash a zsh como shell predeterminado a partir de Catalina.
Por lo tanto, necesitará scripts de autocompletado específicos para zsh.
Aquí está cómo instalarlos con Homebrew:
brew install zsh-completion
De hecho, el zsh-completion de Brew incluye git-completion.
Para activar el autocompletado, debe agregar un pequeño bloque de código a su archivo ~/.zshrc
. Es posible que deba crear ese archivo en su carpeta de usuario si aún no existe. Nota: El resultado del script de instalación anterior le dirá exactamente qué código agregar, así que léalo detenidamente y cópielo desde allí en caso de que se haya actualizado desde que escribí aquí.
if type brew &>/dev/null; then
FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
autoload -Uz compinit
compinit
fi
Importante:
Cuando haya finalizado la instalación, lea el resultado del script de instalación.
Le indicará no solo que agregue código a .zshrc, sino que también le dará consejos sobre acciones adicionales que podrían ser necesarias, como forzar la reconstrucción de zcompdump. Pero lo más probable es que no necesite los pasos adicionales.
zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?
¡Pero funciona!git
Las finalizaciones de Git son parte del paquete
Homebrew , no zsh-completions
(que tiene finalizaciones para extensiones de Git, como Git Flow , entre otras). Entonces, brew install git
que le dice que instala las terminaciones, y luego siga la guía de finalización de Shell de Homebrew .Esto es lo que los confunde a algunos de ustedes: tienen brew o ports instalados, pero están usando un sistema git en /usr/bin/
. Para comprobar esto:
which git
Si ve /usr/bin/git
que brew no está configurado correctamente o no ha instalado git a través de brew.
Si instala git a través de brew, habilitar las finalizaciones de bash para brew también habilitará las finalizaciones de bash para git. Esto se debe /usr/local/etc/bash_completion
a que en realidad obtiene todo en /usr/local/bash_completion.d
, y el paquete brew para git instala un script de finalización de git allí.
Puede 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.
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 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í solo probablemente no funcionará, ya que está diseñado para que el marco de finalización lo obtenga a través de /etc/bash_completion (que se obtiene de /etc/profile.d/bash_completion.sh; archivos en /etc/profile .d provienen de /etc/profile).
Para macOS Catalina+, en zsh
:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh -o ~/.git-completion.zsh
Luego actualice su ~/.zshrc
con:
if [ -f ~/.git-completion.zsh ]; then
. ~/.git-completion.zsh
fi
c:8: command not found: __git_aliased_command
cada vez que trato de autocompletar...Si su finalización de git está parcialmente rota, incluso después de obtener el abastecimiento 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
, se autocompletaría correctamente git checkout
. Pero cuando escribí git checkout
+ TAB
, no mostró la lista de sucursales, solo HEAD
.
La solución para mí fue actualizar mi git
versión. Estaba en 2.7.0, que aparentemente no era compatible con el último git-completion.bash
. Ejecuté brew upgrade git
, que lo actualizó a 2.13.0, y ahora autocompleta correctamente los nombres de mis sucursales.
brew upgrade git
y brew link git
(con la anulación habilitada)update
a upgrade
.De lejos, la mejor referencia que he encontrado para resolver este mismo problema está en SpinDance , de Connor Livingston :
Si el script git-completion.bash no existe en su máquina, recupérelo del enlace que proporcioné anteriormente (que es este ) y guárdelo en su máquina local en un nuevo archivo llamado git-completion.bash en el / directorio usr/local/etc/bash_completion.d/ . Si el script git-completion.bash existe en su máquina, pero no está en el directorio /usr/local/etc/bash_completion.d/ , debemos crear una copia 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 ser suficiente. Para aquellos que sienten curiosidad por /usr/local/etc/bash_completion.d/directorio: es para almacenar nuevos comandos de finalización, y es posible que deba crearlo si aún no existe en su máquina.
En este punto, el script git-completion.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 en bash apuntándolo 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 paso final es recargar su perfil bash. Puede lograr esto ejecutando source ~/.bash_profile en su sesión bash actual.
Lo probé y funciona bien para las sucursales, pero cuando lo haces git st
, tab
muestra un error como este
opción desconocida: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config uso: git [--version] [--help] [-C ] [-c =] [--exec -ruta[=]] [--ruta-html] [--ruta-man] [--ruta-info] [-p | --paginar | --no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] []
Busqué en Internet y encontré que estaba --list-cmds
en .git-completion.bash
la última versión de git y en mi mac la versión de git era2.17.2
git --version
comandoLuego pon el mismo número de versión en la url como lo hice yo
curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Luego siga los mismos pasos que en la respuesta superior, ingrese el siguiente código en~/.bash_profile
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Debería intentar actualizar la versión de git a la última, entonces debería funcionar.
Instale oh-my-zsh y configure zsh como su shell predeterminado y agradézcame más tarde :)
La mayoría de los usuarios habrán git
instalado como parte de las herramientas de línea de comandos de xcode en /usr/bin/git
y las reglas de finalización de bash para git estarán disponibles en /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
.
En este caso, no es necesario instalar git desde Homebrew ni obtener las reglas de finalización de git desde raw.githubusercontent.com. Simplemente cree un enlace simbólico de la siguiente manera:
cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git
Nota: asegúrese de haber instalado y configurado bash-completion
el paquete de Homebrew.
Si está dispuesto a cambiar a un shell diferente, el fish
shell tiene esta función incorporada. También tiene algunas otras funciones útiles, como autocompletar mientras escribe.
Localiza tu .bashrc
archivo.
Ábralo y agregue esta línea en la parte inferior:
source /etc/bash_completion.d/git
/etc/bash_completion.d/
carpeta, en un sistema relativamente nuevo (OSX 10.10.3)./etc/bash_completion.d/git
? Haría que tu respuesta fuera más valiosa.brew install git bash-completion
como se explica en apple.stackexchange.com/a/92637/136365 obtendrá estos archivos, aunque en una ubicación diferente
Mikael Weiss
tonto
jillyyo
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc
enlace