2011-09-03 18 views
8

Git kullanıyorum, şu satırı .bashrc olarak değiştirdim, pwd Git Repo'dur, geçerli checkedout dalını sormak için. Ben kullanıyorum İşletim Sistemi: yerine yukarıdaki hattının Kabuk isteminde git repo mevcut şube görüntülemek için bu çizgiyi kullanıyorumGit'in yüklenip yüklenmediğini nasıl kontrol edelim .bashrc

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

Ubuntu 32bit.

# 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\]\$ ' 

Sorun

Ben arkadaşlara verince dizinleri arasında gezinirken, Shell değişen dizinlerde git şube için komut kontrolleri gibi, hata __git_ps1: command not found verir olduğunu. Git'in yüklü olup olmadığını nasıl kontrol edebilirim ve yalnızca git'i yüklüyse şube denetimini gerçekleştirir mi?

Düzenleme: ayckoster önerdiği gibi , ben aşağıdaki kod hatları ile cameup:

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 

Şimdi Everytime ı git --version ekrana outputted olsun terminali açın Git yüklü iken, ve Git kurulmadığında terminal açılırken şu hatayı alıyorum:

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

Bunu nasıl temizlerim? Teşekkürler.

Final Düzenleme:

Bu Sonunda geldi kod, which kullanarak kabuk isteminde

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

Not "git eksik" Echo. - Örneğin, Mac'te git 2.3.2'de mevcut değildir. Ancak burada mevcuttur: https://github.com/git/git/blob/8976500cbbb13270398d3b3e07a17b8cc7bff43f/contrib/completion/git-prompt.sh –

cevap

19

Eğer git yüklü olup varsayabiliriz $? dönüş değeri bağlı

git --version 

yürütmek için deneyin. 0 alırsanız her şey yolundaysa, git kurmuyor. Ayrıca, bu test da yapabilirsiniz.

Bu, her şeyin doğru şekilde kurulduğunu ve git $ PATH öğenizde olduğunu ve git komutunun yeniden adlandırılmadığını varsayar.

yeni bir süreç oluşturmak için yerleşik bir nedenle gerek var gibi ben hash kullanılması önerilir bu

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

Muhtemelen her zaman ekranda 'git --version 'çıktısını istemiyorsunuz. Ayrıca şartlı olarak kontrol yapmayı öneririm; 'eğer git --version 2> & 1>/dev/null; o zaman ... – tripleee

+0

İpucu için teşekkürler. Bilgiye sadece bir kez ihtiyacı varsa bağlıdır. Önerinizi ilk snippet'ime ekledim. Sadece bir kez kullanırsanız, değişkeni atlamak mantıklıdır. – ayckoster

4

mevcut git branch gerektiğini gösterecek şekilde .bashrc bu kodu kullanmayı Feel Free olduğunu yardım et. Hiçbir şey döndürmezse - git gitmez.

+3

'kötülük; Diğer yanıtlarda önerildiği gibi Bash yerleşiklerini kullanın. – tripleee

+0

Bu en iyi yolun etrafta olmadığını tahmin ettim ama düşünebildiğim tek şey buydu ;-) –

+1

@tiplee: Neden bir süreç ortaya çıkardığı gerçeğinden başka bir şey değil? Bash yerleşik 'hash' kullanmak, sadece' git' komut olarak adlandırılmışsa çalışacak şekilde sınırlıdır, bu yüzden git'in kurulu olduğu durum söz konusu olabilir ama 'hash' komutu hiçbir şey döndürmez. http://www.gnu.org/s/bash/manual/bash.html –

2

gibi kullanın. Komutu da önbelleğe alır.

hash git && commands 
+1

reddeden kimse neden açıklayabilir? –

+1

Bash yerleşik olarak kullanmak için iyi bir öneri, ancak tam açıklamada, git yüklenmesinin ancak karma tablosunda bulunmamasının mümkün olabileceğine dikkat edilmelidir (büyük ihtimalle maddi olmayan bir şey olması muhtemel olsa da). Ayrıca neden bir downvote aldığınızı da merak ediyorum. –

0

Sen şartlı Git varlığına dayalı Bash istemi değiştirmek için aşağıdaki kullanabilirsiniz: koşullar varsa

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

Linux Eğitimi Blog yazısı "Tutorial: Conditions in bash scripting (if statements)" böyle -a olarak kontrol etmek, farklı gösteriyor bir dosyanın varlığı için.

bu çözüm ile bkz sorun git yere bağlı olmasıdır (yani, /usr/local/bin/ veya /usr/local/ yukarıdaki gibi). Git apt-get ile yüklendiğinde, Ubuntu'daki git /usr/local/'da bulunduğundan bu bir sorun olmayabilir.

Git'in kurulu olduğu konuma bağımlı olmak istemiyorsanız, which komutunun sonuçlarına bakmak için komut ikamesini kullanabilirsiniz. which kullanarak Ancak

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

, diğer cevap verenlere göre "kötü" olarak kabul edilmiştir. (. Ben onlara akıl vermeden yerine deklarasyonu yapma tür ifadelerin onların muhakeme ortaya koymasıyla ilgi duyarım rağmen)

2

kullanım 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

Bu benim için çalıştı :

GIT_VERSION = "$ (git --version)" ["$ GIT_VERSION"! = "Komut bulunamadı"]; Sonra yankı "git zaten" başka yüklü fi `__git_ps1` fonksiyon her zaman mevcut olmadığını

İlgili konular