¿Cómo configurar la finalización de la línea de comandos de git bash?

131

Por ejemplo, en una máquina ubuntu nueva, acabo de ejecutar sudo apt-get gity no hay finalización al escribir, por ejemplo git check[tab].

No encontré nada en http://git-scm.com/docs , pero la finalización del IIRC está incluida en el paquete git en estos días y solo necesito la entrada correcta en mi bashrc.

Vincent Scheib
fuente
Funciona para mí de inmediato en Ubuntu Precise (y Fedora 17).
Caracol mecánico
2
Para comprobar si lo tiene por defecto o no, puede ejecutar (cd ~ && exec cat .bashrc | grep completion).
aderchox

Respuestas:

183

En Linux

en la mayoría de las distribuciones, el script de finalización de git se instala en /etc/bash_completion.d/(o /usr/share/bash-completion/completions/git) cuando instala git, no es necesario ir a github. Solo necesita usarlo, agregue esta línea a su .bashrc:

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git

En algunas versiones de Ubuntu, git autocomplete puede estar roto de forma predeterminada, la reinstalación ejecutando este comando debería solucionarlo:

sudo apt-get install git-core bash-completion

En Mac

Puede instalar la finalización de git usando Homebrew o MacPorts.

Cerveza casera

if $BASH_VERSION> 4: brew install bash-completion@2(versión actualizada) Preste especial atención a la versión de bash que tiene, ya que MacOS se envía por defecto con 3.2.57 (1) -release.

agregar a .bash_profile:

  if [ -f /usr/local/share/bash-completion/bash_completion ]; then
    . /usr/local/share/bash-completion/bash_completion
  fi

Para versiones anteriores de bash: brew install bash-completion

agregar a .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

MacPorts

sudo port install git +bash_completion

luego agregue esto a su .bash_profile:

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
fi

más información en esta guía: Instale la finalización de Bash git

Tenga en cuenta que, en todos los casos, debe crear un nuevo shell (abrir una nueva pestaña / ventana de terminal) para que los cambios surtan efecto.

Sergey Evstifeev
fuente
1
La mayoría de las cajas * nix (especialmente Ubuntu) ya tienen ese archivo, así que simplemente enviárselo a mi usuario solucionó mi problema. Gracias.
nevvermind
5
ubuntu puede tenerlo como /etc/bash_completion.d/git-prompt
Catskul
2
Tengo Git pero no /etc/bash_completion.d
sixty4bit
15
En mi Ubuntu 14.04 este archivo es /usr/share/bash-completion/completions/git. /etc/bash_completion.d/git-promptse usa para el soporte de git prompt, no para completar.
Ray Chen
18
ADVERTENCIA: El método homebrew de Mac solo funciona si tiene git instalado a través de homebrew do, brew uninstall bash-completionentonces brew install gitsi ya había instalado git a través de algún otro método, los pasos anteriores funcionarán.
patapouf_ai
66

Tuve el mismo problema, seguí los pasos a continuación:

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

luego agregue las siguientes líneas a su .bash_profile(generalmente en su carpeta de inicio)

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

fuente: http://code-worrier.com/blog/autocomplete-git/

Jospratik
fuente
Estaba detrás de un proxy, así que tuve que configurar el proxy primero para que funcione el curl. export https_proxy=proxy_ip:proxy_portRealmente no entiendo por qué no obtiene la configuración del sistema.
madlymad
2
realmente no es necesario ocultar ese archivo con un punto delante de su nombre. Además: cuidado con las versiones de git (ver la respuesta de wisbucky)
Walter Tross
42

La mayoría de las instrucciones que ve le indicarán que descargue

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

y fuente eso en su script de inicio de bash como .bashrc.

Pero hay un problema con eso, porque hace referencia a la masterrama, que es la última versión de git-completion.bash. El problema es que a veces se rompe porque no es compatible con la versión de git que tienes instalada.

De hecho, en este momento eso se romperá porque la masterrama git-completion.bashtiene nuevas características que requieren git v2.18, que ninguno de los administradores e instaladores de paquetes ha actualizado todavía. Obtendrá un errorunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config

Entonces, la solución más segura es hacer referencia a la versión / etiqueta que coincida con el git que ha instalado. Por ejemplo:

https://raw.githubusercontent.com/git/git/v2.17.1/contrib/completion/git-completion.bash

Tenga en cuenta que tiene v2.17.en la URL en lugar de master. Y luego, por supuesto, asegúrese de obtenerlo en el script de inicio de bash.

Wisbucky
fuente
Esta es la mejor respuesta de macOS.
AShelly
Wow ... Después de una hora de golpear mi cerebro por esto, tu comentario fue la clave. ¡Gracias por esta solución! ¡Dorado!
Myke Carter
4
El archivo específico de la versión de macos ya debería estar en el disco aquí: /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bashsolo para estar seguro, lo diferencié con la versión 2.17.1 en github y coincide.
jmt
18

Ubuntu 14.10

Instalar git-coreybash-completion

sudo apt-get install -y git-core bash-completion
  • Para el uso de la sesión actual

    source /usr/share/bash-completion/completions/git
  • Tenerlo siempre encendido en todas las sesiones

    echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc
Andrzej Rehmann
fuente
1
Gracias, esto funcionó para mí en Ubuntu 16.04 LTS :)
Mrunal Pagnis
6

Solo haz esto en tu ~/.bashrc:

source /usr/share/bash-completion/completions/git

Otras respuestas le dicen que instale bash-completion, no necesita hacer eso, pero si lo hace, entonces no es necesario obtener la finalización directamente. Haces uno o el otro, no ambos.

Una solución más genérica es consultar la ubicación del sistema según lo recomendado por el proyecto de finalización de bash:

source "$(pkg-config --variable=completionsdir bash-completion)"/git
FelipeC
fuente
1
Su solución genérica funcionó perfectamente para mí en Ubuntu 18.04. Para empezar, su método es extremadamente conciso, ¡gracias!
Jason R Stevens CFA
4

en mi ubuntu hay un archivo instalado aquí:

source /etc/bash_completion.d/git-prompt

puede seguir los enlaces a la /usr/lib/git-corecarpeta. Puede encontrar allí una instrucción, cómo configurar PS1 o usar__git_ps1

besar
fuente
3

Puede ser útil para alguien: -

Después de descargar el .git-deployment.bash del siguiente enlace,

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

y tratando de usar la función __git_ps1, estaba obteniendo un error como--

 -bash: __git_ps1: command not found

Aparentemente, necesitamos descargar los scripts por separado del maestro para que este comando funcione, ya que __git_ps1 está definido en git-prompt.sh. Tan similar a la descarga de .git-deployment.bash, obtenga el git-prompt.sh:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

y luego agregue lo siguiente en su .bash_profile

source ~/.bash_git
if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
export PS1='\W$(__git_ps1 "[%s]")>'
fi

source ~ / .bash.git ejecutará el archivo descargado y

export PS1='\W$(__git_ps1 "[%s]") El comando agregará el nombre de la rama de salida después del directorio de trabajo actual (si es un repositorio de git).

Entonces se verá así: -

dir_Name[branch_name] donde dir_Name es el nombre del directorio de trabajo y branch_name será el nombre de la rama en la que está trabajando actualmente.

Tenga en cuenta que __git_ps1 distingue entre mayúsculas y minúsculas.

Mellas
fuente
1

Arch Linux

Fuente /usr/share/git/completion/git-completion.bashen uno de los archivos de inicio de bash.

Por ejemplo:

# ~/.bashrc

source /usr/share/git/completion/git-completion.bash

Es posible que pueda encontrar el script en otras ubicaciones como, /usr/share/bash-completion/completions/gitpero estos scripts no funcionaron para mí.

Robar
fuente
-1

Ubuntu

Hay una hermosa respuesta aquí . Trabajó para mí en Ubuntu 16.04

Ventanas

Git Bash es la herramienta que permite la finalización automática. No estoy seguro de si esto es parte de la distribución estándar, por lo que puede encontrar este enlace también útil. Por cierto, Git Bash permite usar comandos de shell de Linux para trabajar en Windows, lo cual es una gran cosa para las personas que tienen experiencia en el entorno GNU / Linux.

andrgolubev
fuente
-1

En Github en el proyecto Git, proporcionan un archivo bash para autocompletar comandos git.

Debería descargarlo al directorio de inicio y forzar a bash a ejecutarlo. Son simplemente dos pasos y se explican perfectamente (paso a paso) en la siguiente publicación del blog.

blog code-worrier: autocomplete-git /

Lo he probado en mac, debería funcionar también en otros sistemas. Puede aplicar el mismo enfoque a otros sistemas operativos.

wasabi
fuente