(Mac) -bash: __git_ps1: comando no encontrado


222

Estoy tratando de cambiar mi símbolo del sistema en la terminal. Sigo recibiendo el error:

-bash: __git_ps1: command not found

Lo he intentado con tan sólo escribir en el terminal como es: __git_ps1. También lo probé en el.bash_profile

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

Como puede ver / decir, sí, tengo instalado el autocompletado y funciona muy bien.

Me encontré con esta pregunta: "La variable env PS1 no funciona en mac ", que da el código

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

Entonces lo agrego a mi .bash_profileesperanza de que cambie algo. Pues lo hizo. Simplemente cambió la salida del error.

Aquí está el .bash_profilecon la adición:

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

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

Y ahora aquí está la salida de error modificada:

sed: (%s): No such file or directory

Nota: También he movido el alias debajo de la fuente sin diferencia. Tengo git versión 1.7.12.1

Esto debería ser un cambio simple. ¿Alguien puede ayudarme?

Editar 13/10/12

No, definitivamente no quiero definir __git_ps1 yo mismo, pero solo estaba tratando de ver si sería reconocido al hacerlo. Sí, tengo el .git-completion.basharchivo instalado. Así es como obtuve la finalización automática en mi máquina.

cd ~
curl -OL https://github.com/git/git/raw/master/contrib/completion/git-completion.bash
mv ~/git.completion.bash ~/.git-completion.bash

A ls -laluego enumera el .git-completion.basharchivo.

Edición 13/10/12 - Resuelto por Mark Longair (abajo)

El siguiente código funcionó para mí .bash_profilemientras que otros no ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi

My git-completion.bashdefine __git_ps1como una función de shell. ¿El tuyo? ¿Cómo sabes que la finalización está funcionando? ¿Qué sucede cuando git hescribes <TAB>?
rob mayoff

Cuando escribo eso, termina con git help [espacio]
Geoff

La respuesta aceptada es buena, pero la solicitud también se puede habilitar presionando git <tab>como se indica en la confirmación a la que hace referencia Mark Longair.
Jack Frost

Esa no es solo una buena pregunta explicada, sino también un recurso útil que guía la solución. Un voto bien merecido.
Yannis Dran

La comprobación -f funcionó para corregir este error al ejecutar bash dentro de la pantalla (1) en OS X 10.8.5. No tengo idea de por qué, ya que el archivo existía de todos modos, ¡pero gracias de todos modos!
Nick K9

Respuestas:


324

Instaló la versión de git-completion.bashfrom master: en el historial de desarrollo de git, esto es después de una confirmación que separó la __git_ps1función de la funcionalidad de finalización en un nuevo archivo ( git-prompt.sh). El compromiso que introdujo este cambio, que explica la justificación, es af31a456 .

Todavía te sugiero que solo obtengas la versión de git-completion.bash(o git-prompt.sh) que se incluye con tu instalación de git.

Sin embargo, si por alguna razón todavía desea utilizar esta funcionalidad mediante el uso de scripts descargados por separado master, debe descargar de git-prompt.shmanera similar:

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

... y agregue la siguiente línea a su ~/.bash_profile:

source ~/.git-prompt.sh

Entonces su PS1variable que incluye __git_ps1 '%s'debería funcionar bien.


Tienes razón en que no quiero definir __git_ps1 yo mismo. Solo estaba tratando de ver si lo reconocería y no lo hace. Tengo .git-completar.bash en mi raíz. Actualizaré mi pregunta anterior para incluir cómo conseguí que funcione la finalización automática ...
Geoff

@ designer84: gracias por la información adicional. Creo que ahora está claro cuál es el problema, y ​​he actualizado mi respuesta con una explicación.
Mark Longair

¿Por qué esto no funciona? if [-f /usr/local/git/contrib/completion/git-completion.bash]; luego fuente /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff

55
En OSX 10.9 con git 1.8.5.3 instalado a través de Homebrew, tanto git-prompt.shy git-completion.bashse encuentran en `brew --prefix git`/etc/bash_completion.d/.
dokkaebi

1
En MacPorts, el camino cambió cuando el paquete git-corefue reemplazado por git, vea esta pregunta
Ramón de la Fuente

60

Después de actualizar a OSX 10.9 Mavericks, tuve que hacer referencia a los siguientes archivos para completar el comando git shell y que git prompt vuelva a funcionar.

Desde mi .bash_profile o similar:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash ]; then
    . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
fi

source /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh

#shell prompt example
PS1='\u $(__git_ps1 "(%s)")\$ '

Este también fue mi problema en osv 10.9
jeremyjjbrown

Si bien la respuesta aceptada de @marklongair es una buena descripción, encontré esta pregunta a través de una búsqueda en Google de un mensaje de error (después de actualizar a OS 10.10) y esta respuesta es la solución más simple para mi problema (simplemente cambiando la ruta a la nueva ubicación )
RedBassett

Esto funcionó para mí en 10.10.5 Yosemite, sin embargo, cambié la ubicación de git-prompt a ~/.git_prompt.sh. Las otras soluciones no funcionaron.
Rein

bash: __docker_machine_ps1: command not found
Agregué

43

Debieras

$ brew install bash bash-complete git

Luego, ingrese "$ (brew --prefix) / etc / bash_completion" en su .bashrc.


Gran respuesta, definitivamente la mejor manera si git se instala con brew. Pero creo que necesita obtener esto: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey

1
@febLey Sí, la ubicación cambió. He actualizado la respuesta. Gracias.
Steven Shaw

Esto no funciona Recibo errores: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: Permiso denegado bash: __docker_machine_ps1: comando no encontrado
IgorGanapolsky

14

Lo siguiente funcionó para mí como un encanto:

Ejecute siguiente en su Terminal:

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

Abrir / Crear bash_profile:

$ vi ~/.bash_profile

Agregue lo siguiente al archivo:

source ~/.bash_git
export PS1='\[\033[01;32m\]os \[\033[01;34m\]\w $(__git_ps1 "[%s]")\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"

Finalmente, búscalo usando:

$ source ~/.bash_profile

Esto resolverá el problema de bash: __git_ps1: command not found .

Además, su mensaje cambiará a "os". Para cambiar "os" a otra cosa, modifique la cadena "os" en la línea de exportación PS1.


Todavía recibo un error sh -c "clear && / bin / bash" bash: __docker_machine_ps1: el comando no se encuentra cada vez que ingreso Docker CLI.
IgorGanapolsky

8

Solución para MacOS Sierra y git versión 2.10.1 <2017-2-06>

Paso 1: instala el Git

Puede omitir este paso si ya instaló el último git.

Descargue el paquete git del navegador https://git-scm.com/download/

Nota: si instala con curl [option] https://... opción de descarga, deberá asegurarse de que su sistema sea compatible con SSL. Entonces, para los recién llegados, descargar desde el navegador e instalar directamente desde el instalador de git es mucho más fácil.

Verificación de instalación:
  • Muestra dónde está tu directorio git en: which git
  • Muestra qué versión es actualmente tu git: git --versionla versión actual debe ser 2.10.1.

Paso 2: agrega tu perfil de git a tu shell

  1. Abre tu perfil de shell:
    • nano ~/.bash_profileo nano ~/.bashrcDepende de dónde esté su modificación.
  2. Agregue el siguiente código al archivo:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Nota: la ubicación de instalación de git cambió de opt / directorio a usr / local / después de la actualización de OSX a El Capitain, y es por eso que algunas de las respuestas anteriores ya no funcionan en MacOS Sierra.

  1. Agregue el siguiente código a su configuración de PS1:

    • Opción 1: agregue directamente a su PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      Prefiero este enfoque simple ya que ya sé que .git-completion.bashestá en mi directorio de inicio, y puedo agregar otro formato de solicitud al frente. Aquí está mi mensaje personal para su referencia:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Opción 2: agregar una secuencia de comandos de selección

    si [-f ~ / .git-completar.bash]; luego
          export PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Guarde y use el perfil: source ~/.bash_profileosource ~/.bashrc

Ahora debería ver que el indicador git funciona correctamente y muestra en qué rama se encuentra ahora.

5

Tuve el mismo problema al actualizar a Yosemite.

Solo tuve que modificar ~/.bashrcen source /usr/local/etc/bash_completion.d/git-prompt.shlugar de la ruta anterior.

luego vuelve a utilizar tu . ~/.bashrcpara obtener el efecto.


5

¡Solución limpia High Sierra con colores!

Sin descargas Sin cerveza No Xcode

Simplemente agréguelo a su ~ / .bashrc o ~ / .bash_profile

export CLICOLOR=1
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"
PROMPT_COMMAND='__git_ps1 "\h:\W \u" "\\\$ "'

4

__git_ps1 para bash ahora se encuentra en git-prompt.sh en /usr/local/etc/bash_completion.d en mi brew instalado git versión 1.8.1.5


2

esto funciona en OS 10.8 en el .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi

No soluciona el error: bash: __docker_machine_ps1: comando no encontrado
IgorGanapolsky

2

Para macports tuve que agregar: source /opt/local/share/git-core/git-prompt.sha mi ./perfil


1
@IgorGanapolsky ¿Supongo que no tienes macports instalado? Simplemente hazlo touch ~/.profile. Pero es obvio que necesita un archivo en: /opt/local/share/git-core/git-prompt.sh
Velop

2

Si espera usar Homebrew para actualizar Git y ha dejado que su sistema se desactualice en general (como lo hice yo), es posible que primero deba actualizar Homebrew (según la actualización de brew) : Los siguientes archivos de árbol de trabajo no rastreados se sobrescribirán mediante fusión: gracias @ chris-frisina)

Primero ponga Homebrew en línea con la versión actual

cd / usr / local
git fetch origin
git reset - origen duro / maestro

Luego actualiza Git:

preparar actualización git

¡Problema resuelto! ;-)


2

Al menos con Xcode 6, ya tienes git-completion.bash . Está dentro del paquete de la aplicación Xcode.

Simplemente agregue esto a su .bashrc:

source `xcode-select -p`/usr/share/git-core/git-completion.bash

2
  1. Descargue los archivos git-prompt.sh y git-completar.bash desde esta finalización de Git
  2. Cambiar el nombre de los archivos.
  3. Mueva esos archivos a su directorio de inicio.
  4. Agregue el archivo fuente al .bash_profile

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    


1

Estaba haciendo el curso sobre Udacity para git hub y estaba teniendo el mismo problema. Aquí está mi código final que hace que funcione correctamente.

# Change command prompt
alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \ .   (.*\)/(\1)/'"

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

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
# '\u' adds the name of the current user to the prompt
# '\$(__git_ps1)' adds git-related stuff
# '\W' adds the name of the current directory
export PS1="$purple\u$green\$(__git_ps1)$blue \W $ $reset"

¡Funciona! https://i.stack.imgur.com/d0lvb.jpg


0

Este funcionó para mí, y tiene una salida de color de git y un indicador en el mensaje si los archivos han cambiado / agregado, directamente incorporado:

GIT_PS1_SHOWDIRTYSTATE=true

. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-completion.bash
. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-prompt.sh

PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

¡Asegúrese de usar la ruta correcta! Utilicé homebrew para instalar git, utilícelo brew list gitpara obtener la ruta a su instalación actual.

Sería bueno no utilizar una ruta codificada, pero no sé cómo obtener la ruta a la instalación actual.

Más información aquí: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


0

Para git, hay /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Y por favor mira /etc/bashrc_Apple_Terminaltambién.

Entonces, puse esto en ~/.bash_profile:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh ]; then
  . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh
  export GIT_PS1_SHOWCOLORHINTS=1
  export GIT_PS1_SHOWDIRTYSTATE=1
  PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__git_ps1 '\u:\w' '\\\$ '"
fi

Todavía bash: __docker_machine_ps1: command not found
obtengo

0

Prefacio: perdón por no comentar la respuesta de respuesta de haysclark y hacer una nueva, simplemente no hay suficiente representante.

Tenga en cuenta que si no ha instalado git a través de Xcode o home-brew, es probable que encuentre los scripts de bash que haysclarks hace referencia en /Library/Developer/CommandLineTools/, y no en /Applications/Xcode.app/Contents/Developer/, haciendo que las líneas se incluyan en .bashrc lo siguiente:

if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then
    . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
fi

source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

Necesitará esas líneas si desea utilizar git-prompt también.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.