Agregar git branch en el indicador de command Bash

Intenté agregar la twig git en la que estoy trabajando actualmente (check-out) en el indicador bash sin éxito … ( manteniendo mi ruta actual que muestra intacto el directory / file activo ) Tengo un file .bashrc en mi casa, pero también vi a muchas personas mencionar el file .profile ..

Tenga en count que este tipo de post ahora está gestionado por contrib / completion / git-prompt.sh y su variable __git_ps1_branch_name .

  • Copie este file en algún lugar (por ejemplo, ~/.git-prompt.sh ).
  • Agregue la siguiente línea a su .bashrc/.zshrc :
  source ~/.git-prompt.sh 
  • Cambie su PS1 para llamar a __git_ps1 como sustitución de command:
  Bash: PS1='[\[email protected]\h \W$(__git_ps1 " (%s)")]\$ ' ZSH: setopt PROMPT_SUBST ; PS1='[%[email protected]%m %c$(__git_ps1 " (%s)")]\$ ' 

Pero tenga en count 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 parameters , sustitución de commands y expansión aritmética.

En lugar de include el nombre de la twig sin escudar en PS1 cuando se ejecuta en modo de dos o tres arguments, construya PS1 para hacer reference a una variable que contiene el nombre de la twig.

Debido a que las shells no se expanden recursivamente, esto evita la ejecución de código arbitrario por nombres de twigs especialmente diseñados, tales como

 '$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'. 

¿Qué mente malvada nombraría una twig así? 😉 ( Al lado de una mamá como en xkcd )


informes de still_dreaming_1 en los comentarios :

Esto parece funcionar muy bien si quieres un indicador de color con xterm (en mi .bashrc ):

 PS1='\[\e]0;\[email protected]\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\03‌​3[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ ' 

Todo es un color diferente, incluida la twig.

En Linux Mint 17.3 Cinnamon de 64 bits:

 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ ' 

Siga los pasos que se detallan a continuación: (Linux)

Edite el file ~/.bashrc , para ingresar las siguientes líneas al final (en el caso de Mac, el file sería ~/.bash_profile )

 # Git branch in prompt. parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } export PS1="\[email protected]\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ " 

Ahora, inicie la nueva window de terminal e intente ingresar a cualquier git-repo. La twig actual se mostraría, con el aviso.

4 Más información – MAC / Linux

1- Si no tienes finalización de bash …: sudo apt-get install bash-completion

2- Edite su file .bashrc y marque (o agregue):

 if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi 

3- … antes de su pronta línea: export PS1='$(__git_ps1) \w\$ '
( __git_ps1 mostrará tu twig de git)

4- hacer source .bashrc

EDITAR:

Lecturas adicionales: no redevise la rueda

Aquí es cómo configuré el aviso para mostrar el estado de Git:

Obtener el script de git-prompt:

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

Y personalice su request agregando el siguiente código en su file .bashrc:

 # Load Git functions source ~/.git-prompt.sh # Syntactic sugar for ANSI escape sequences txtblk='\e[0;30m' # Black - Regular txtnetworking='\e[0;31m' # Red txtgrn='\e[0;32m' # Green txtylw='\e[0;33m' # Yellow txtblu='\e[0;34m' # Blue txtpur='\e[0;35m' # Purple txtcyn='\e[0;36m' # Cyan txtwht='\e[0;37m' # White bldblk='\e[1;30m' # Black - Bold bldnetworking='\e[1;31m' # Red bldgrn='\e[1;32m' # Green bldylw='\e[1;33m' # Yellow bldblu='\e[1;34m' # Blue bldpur='\e[1;35m' # Purple bldcyn='\e[1;36m' # Cyan bldwht='\e[1;37m' # White unkblk='\e[4;30m' # Black - Underline undnetworking='\e[4;31m' # Red undgrn='\e[4;32m' # Green undylw='\e[4;33m' # Yellow undblu='\e[4;34m' # Blue undpur='\e[4;35m' # Purple undcyn='\e[4;36m' # Cyan undwht='\e[4;37m' # White bakblk='\e[40m' # Black - Background baknetworking='\e[41m' # Red badgrn='\e[42m' # Green bakylw='\e[43m' # Yellow bakblu='\e[44m' # Blue bakpur='\e[45m' # Purple bakcyn='\e[46m' # Cyan bakwht='\e[47m' # White txtrst='\e[0m' # Text Reset # Prompt variables PROMPT_BEFORE="$txtcyn\[email protected]\h $txtwht\w$txtrst" PROMPT_AFTER="\\n\\\$ " # Prompt command PROMPT_COMMAND='__git_ps1 "$PROMPT_BEFORE" "$PROMPT_AFTER"' # Git prompt features (read ~/.git-prompt.sh for reference) export GIT_PS1_SHOWDIRTYSTATE="true" export GIT_PS1_SHOWSTASHSTATE="true" export GIT_PS1_SHOWUNTRACKEDFILES="true" export GIT_PS1_SHOWUPSTREAM="auto" export GIT_PS1_SHOWCOLORHINTS="true" 

Si desea get más información, puede get todos los files de puntos aquí: https://github.com/jamming/dotfiles

Para mac, esto funciona realmente bien: http://martinfitzpatrick.name/article/add-git-branch-name-to-terminal-prompt-mac/ :

 # Git branch in prompt. parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } export PS1="\[email protected]\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ " 

Si usa la concha de pescado es bastante sencillo. El pez es un caparazón interactivo que viene con muchas cosas buenas. Puedes instalarlo usando apt-get .

 sudo apt-get install fish 

a continuación, puede cambiar la configuration de request usando

 > fish_config Web config started at 'http://localhost:8001/'. Hit enter to stop. Created new window in existing browser session. 

ahora vaya a http://localhost:8001/ abra la pestaña de request y elija la opción clásica + git

enter image description here

Ahora haz clic en el button de request de uso y estás listo.

He probado un pequeño script en python que va en una carpeta bin … file 'gitprompt'

 #!/usr/bin/env python import subprocess, os s = os.path.join(os.getcwd(), '.git') def cut(cmd): ret='' half=0 record = False for c in cmd: if c == "\n": if not (record): pass else: break if (record) and c!="\n": ret = ret + c if c=='*': half=0.5 if c==' ': if half == 0.5: half = 1 if half == 1: record = True return ret if (os.path.isdir(s)): out = subprocess.check_output("git branch",shell=True) print cut(out) else: print "-" 

Hazlo ejecutable y esas cosas

A continuación, ajuste el indicador de bash en consecuencia como:

 \u:\w--[$(gitprompt)] \$