Pregunta

Ejecuto los siguientes códigos por separado como mensaje sin éxito en .zshrc.Esto me sugiere que aparentemente no tengo un programa llamado __git_ps1.No está en MacPorts.

#1

PROMPT="$(__git_ps1 " \[\033[1;32m\] (%s)\[\033[0m\]")\$"$

#2

PROMPT="$(__git_ps1 " (%s)")\$"$

#3

# Get the name of the branch we are on
git_prompt_info() {
  branch_prompt=$(__git_ps1)
  if [ -n "$branch_prompt" ]; then
    status_icon=$(git_status)
    echo $branch_prompt $status_icon
  fi
}

# Show character if changes are pending
git_status() {
  if current_git_status=$(git status | grep 'added to commit' 2> /dev/null); then
    echo "☠"
  fi
}
autoload -U colors
colors
setopt prompt_subst
PROMPT='
%~%{$fg_bold[black]%}$(git_prompt_info)
→ %{$reset_color%}'

¿Cómo puede obtener un mensaje que muestre el nombre de una rama de Git?

¿Fue útil?

Solución

__git_ps1 es de git-completion.bash.En zsh probablemente tengas que proporcionar tu propia función para determinar la rama git del directorio actual.Hay unos cuantos publicaciones de blog acerca de una mensaje de git para zsh.

Solo necesitas:

  • una función para proporcionar el nombre de la sucursal
  • habilitar la sustitución rápida (comando)
  • agregue la función a su mensaje

Por ejemplo

git_prompt() {
 ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
 echo $ref
}
setopt prompt_subst
PS1=$(git_prompt)%#
autoload -U promptinit
promptinit

Actualizar:use el módulo zsh vcs_info en lugar de git_prompt()

setopt prompt_subst
autoload -Uz vcs_info
zstyle ':vcs_info:*' actionformats \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
zstyle ':vcs_info:*' formats       \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'

zstyle ':vcs_info:*' enable git cvs svn

# or use pre_cmd, see man zshcontrib
vcs_info_wrapper() {
  vcs_info
  if [ -n "$vcs_info_msg_0_" ]; then
    echo "%{$fg[grey]%}${vcs_info_msg_0_}%{$reset_color%}$del"
  fi
}
RPROMPT=$'$(vcs_info_wrapper)'

Otros consejos

Este es un símbolo del GIT extendida para zsh:. zsh-git-pronta

text alt

La respuesta de ko-dos es grande, pero yo prefiero un poco más pronta git conscientes que la que utiliza. En concreto, me gusta por etapas, sin preparar, y las notificaciones de archivos sin seguimiento en el propio símbolo. Haciendo uso de su respuesta y la zsh vcs_info ejemplos, Vine con lo siguiente:

setopt prompt_subst
autoload -Uz vcs_info
zstyle ':vcs_info:*' stagedstr 'M' 
zstyle ':vcs_info:*' unstagedstr 'M' 
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' actionformats '%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
zstyle ':vcs_info:*' formats \
  '%F{5}[%F{2}%b%F{5}] %F{2}%c%F{3}%u%f'
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
zstyle ':vcs_info:*' enable git 
+vi-git-untracked() {
  if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
  [[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then
  hook_com[unstaged]+='%F{1}??%f'
fi
}


precmd () { vcs_info }
PROMPT='%F{5}[%F{2}%n%F{5}] %F{3}%3~ ${vcs_info_msg_0_} %f%# '

Esto crea un mensaje que imita la salida coloreada de git status -s (que puede ser configurado en el archivo de .gitconfig). Una imagen es quizás el más útil aquí:

símbolo

En comparación con git status -s:

introducir descripción de la imagen aquí

Si no te gusta de salida coloreada, o si prefiere algún otro carácter o la construcción del sistema, basta con cambiar las stagedstr, unstagedstr y valores hook_com[unstaged] en el código de seguridad.

Muchas de estas soluciones parecía lento para mí cuando maceración la tecla de retorno, así que aquí tiene una opción que es básico y rápido:

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

setopt PROMPT_SUBST
PROMPT='%9c%{%F{green}%}$(parse_git_branch)%{%F{none}%} $ '

Usted obtendrá un mensaje que se parece a esto: ~/dev/project (feature-branch) $

Gracias por los enlaces!

Me hizo la siguiente línea de base en ellos

     # get the name of the branch we are on
     git_prompt_info() { 
         git branch | awk '/^\*/ { print $2 }'
     }
     get_git_dirty() { 
       git diff --quiet || echo '*'
     }

     autoload -U colors
     colors     
     setopt prompt_subst

     PROMPT='%{$fg[blue]%}%c %{$fg_bold[red]%}$(git_prompt_info)$(get_git_dirty)%{$fg[blue]%} $ %{$reset_color%}'                                           

     RPROMPT='%{$fg[green]%}%1(j.%j.)'        

Por favor, sugerir una mejora.

Yo sólo rehizo la mina ya que tenemos los nombres de rama larga en el trabajo. Éste truncará con puntos suspensivos si se trata de más de 35 caracteres.

parse_git_branch() {
    git_status="$(git status 2> /dev/null)"
    pattern="On branch ([^[:space:]]*)"
    if [[ ! ${git_status} =~ "(working (tree|directory) clean)" ]]; then
        state="*"
    fi
    if [[ ${git_status} =~ ${pattern} ]]; then
      branch=${match[1]}
      branch_cut=${branch:0:35}
      if (( ${#branch} > ${#branch_cut} )); then
          echo "(${branch_cut}…${state})"
      else
          echo "(${branch}${state})"
      fi
    fi
}

setopt PROMPT_SUBST
PROMPT='%{%F{blue}%}%9c%{%F{none}%}$(parse_git_branch)$'

(Me da vergüenza en lo orgulloso que estoy de esto.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top