2011-09-03 18 views
8

Estoy usando Git, he cambiado la siguiente línea en .bashrc, para mostrar la rama de salida actual en el prompt, cuando pwd es un Git Repo. Sistema operativo que estoy usando es: 32 bits de UbuntuCómo comprobar si Git está instalado desde .bashrc

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

estoy usando esta opción para acceder rama actual del repositorio git en el intérprete de comandos, en lugar de, por encima de la línea.

# PS1 Line to show current Git Branch in the Prompt 
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ ' 

El problema es cuando se lo doy a amigos, Shell da error __git_ps1: command not found, mientras que la navegación entre directorios, como los controles de secuencia de comandos para la industria de Git en el cambio de directorios. ¿Cómo verifico si Git está instalado y realizo la verificación de ramificación solo si git está instalado?

Editar: Como sugiere ayckoster, me cameup con las siguientes líneas de código:

if [ "$color_prompt" = yes ]; then 
    git --version 
    GIT_IS_AVAILABLE=$? 
    if [ $GIT_IS_AVAILABLE -eq 0 ]; then 
     # PS1 Line to show current Git Branch in the Prompt 
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ ' 
    else 
     # Original PS1 Line 
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 
    fi 
else 
    PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 
fi 

Ahora, cada vez que abro el terminal consigo el git --version da salida a la pantalla, mientras que Git se instala, y consigo el error siguiente, mientras que la apertura terminal cuando Git no está instalado:

The program 'git' is currently not installed. You can install it by typing: 
sudo apt-get install git 

¿Cómo puedo borrar esto? Gracias.

edición final:

Este es el código que se me ocurrió, finalmente, no dude en utilizar este código en tu .bashrc para mostrar actual git branch en su intérprete de comandos

if [ "$color_prompt" = yes ]; then 
    if git --version &>/dev/null; then 
     # PS1 Line to show current Git Branch in the Prompt 
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ ' 
    else 
     # Original PS1 Line 
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 
    fi 
else 
    if git --version &>/dev/null; then 
     # PS1 Line to show current Git Branch in the Prompt 
     PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w $(__git_ps1 "(%s)")\$ ' 
    else 
     # Original PS1 Line 
      PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 
    fi 
fi 
+0

Tenga en cuenta que el '__git_ps1' función no siempre está disponible. - No está disponible en mi git 2.3.2 en una Mac, por ejemplo. Sin embargo, está disponible aquí: https://github.com/git/git/blob/8976500cbbb13270398d3b3e07a17b8cc7bff43f/contrib/completion/git-prompt.sh –

Respuesta

19

intenta ejecutar

git --version 

Dependiendo del valor de retorno $? se puede asumir git está instalado o no. Si obtienes 0 todo está bien, de lo contrario, git no está instalado. También puede test esto.

Esto supone que todo está configurado correctamente y git está en tu $ PATH y el comando git no se cambia el nombre.

utilizar de esta manera

git --version 2>&1 >/dev/null # improvement by tripleee 
GIT_IS_AVAILABLE=$? 
# ... 
if [ $GIT_IS_AVAILABLE -eq 0 ]; then #... 
+0

Probablemente no desee la salida de 'git --version' en su pantalla cada vez. También sugeriría hacer el cheque en el condicional; 'if git --version 2> & 1>/dev/null; entonces ... – tripleee

+0

Gracias por la pista. Depende si necesita la información solo una vez. Agregué tu sugerencia a mi fragmento inicial. Tiene sentido omitir la variable si solo la usa una vez. – ayckoster

4

usando which debe ayuda. Si no devuelve nada -> git no está instalado.

+3

'which' es malo; usa los componentes de Bash como se sugiere en otras respuestas. – tripleee

+0

Supuse que esta no era la mejor manera, pero era la única en la que podía pensar ;-) –

+1

@tiplee: ¿Por qué 'mal' aparte del hecho de que genera un proceso? Usar el hash incorporado de Bash tiene la limitación de que solo funciona si se ha llamado a 'git' como un comando, por lo que podría existir el caso en que git esté instalado pero el comando' hash' no devuelva nada. http://www.gnu.org/s/bash/manual/bash.html –

2

recomiendo el uso de hash ya que es un modo no hay necesidad incorporado para crear un nuevo proceso. También almacena el comando en caché.

hash git && commands 
+1

quien bajó la votación, ¿puedes explicar por qué? –

+1

Una buena recomendación para utilizar un Bash incorporado, pero en la revelación completa, se debe tener en cuenta que es posible instalar git pero no estar en la tabla hash (aunque es probable que sea algo tan raro que no tenga importancia). También me interesaría saber por qué recibió un voto negativo. –

0

Se puede usar lo siguiente para cambiar condicionalmente su pronta Bash basado en la existencia de Git:

PS1='$no-git-prompt' 
if [ -a /usr/local/bin/git ] || [ -a /usr/local/git ]; then 
    PS1='$git-prompt' 

la entrada de blog Tutorial de Linux "Tutorial: Conditions in bash scripting (if statements)" muestra la diferente si las condiciones disponibles, tales como -a para comprobar por la existencia de un archivo.

El problema que veo con esta solución es que depende de la ubicación de git (es decir, /usr/local/bin/ o /usr/local/ en el ejemplo anterior). Esto puede no ser un problema ya que git en Ubuntu se encuentra en /usr/local/ cuando git se instala a través de apt-get.

Si no desea depender de la ubicación de git instalada, puede usar la sustitución de comandos para ver los resultados del comando which.

PS1='$no-git-prompt' 
if [ $(which git) ]; then 
    PS1='$git-prompt' 

Sin embargo, el uso de which se ha considerado como "mal" por otros que responden. (. Aunque, estaría interesado en ellos dar contenido a su razonamiento para tales declaraciones en lugar de sólo hacer la declaración sin proporcionar su razonamiento)

2

uso type:

$ type -t git 
file 
$ type -t nogit 
$ 
0
#!/bin/bash 
command -v git >/dev/null 2>&1 || 
{ echo >&2 "Git is not installed. Installing.."; 
    yum install git 
} 
0

Esto funcionó para mí :

GIT_VERSION = "$ (git --version)" if ["$ GIT_VERSION"! = "Comando no encontrado"]; entonces echo "git ya" instalado demás echo "git es que falta" fi

Cuestiones relacionadas