git 1.9.3 o posterior: uso __git_ps1
Git proporciona un script de shell llamado git-prompt.sh
, que incluye una función __git_ps1
que
imprime el texto para agregar a la solicitud de bash PS1 (incluye el nombre de la sucursal)
Su uso más básico es:
$ __git_ps1
(master)
También toma una cadena de formato opcional:
$ __git_ps1 'git:[%s]'
git:[master]
Cómo conseguirlo
Primero, copie el archivo en algún lugar (por ejemplo ~/.git-prompt.sh
).
Opción 1: use una copia existente en su sistema de archivos. Ejemplo (Mac OS X 10.15):
$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
Opción 2: extraer el script de GitHub .
A continuación, agregue la siguiente línea a su .bashrc/.zshrc
:
source ~/.git-prompt.sh
Finalmente, cambie su PS1
llamada __git_ps1
a sustitución de comando:
Intento:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Pero tenga en cuenta que solo git 1.9.3 (mayo de 2014) o posterior le permite mostrar de forma segura ese nombre de sucursal (!)
Ver commit 8976500 por Richard Hansen ( richardhansen
) :
Tanto bash como zsh someten el valor de PS1 a la expansión de parámetros , la sustitución de comandos y la expansión aritmética.
En lugar de incluir el nombre de rama sin formato y sin escape PS1
cuando se ejecuta en modo de dos o tres argumentos, construya PS1
para hacer referencia a una variable que contenga el nombre de rama.
Debido a que los shells no se expanden recursivamente, esto evita la ejecución de código arbitrario por nombres de rama especialmente diseñados, como
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
¿Qué mente tortuosa llamaría una rama así? ;) ( Al lado de una mamá como en xkcd )
Más ejemplos
still_dreaming_1 informa en los comentarios :
Esto parece funcionar muy bien si desea un indicador de color con xterm
(en mi .bashrc
):
PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ '
Todo es de un color diferente, incluida la rama.
En Linux Mint 17.3 Cinnamon 64-bit:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '