Bash komut istemine git dalı ekleme


161

Şu anda üzerinde çalıştığım (eklenti) git dalını eklemeden denedim. ( Etkin dizini / dosyayı sağlam gösteren geçerli yolumu korurken) Evimde bir .bashrc dosyası var, aynı zamanda birçok kişinin .profile dosyasından bahsettiğini gördüm ..


3
bence bu unix / linux borsasında daha iyi sorulacak.
Cole Busby

Ben 10 farklı how-tos gibi denedim, bazıları çalıştı ama git şube var ve daha önce vardı çalışma dizini / yolunu kaybettim ..
George Katsanos

Git 1.9.3+ şubeyi görüntülemek için ilginç bir yol getiriyor: aşağıdaki cevabımı gör
VonC

1
@cole busby görünüşe göre değil.
George Katsanos

1
@GeorgeKatsanos dört yıl sonra bana gösterdi: p
Cole Busby

Yanıtlar:


161

git 1.9.3 veya üstü: kullanın __git_ps1

Git adlandırılan bir kabuk sağlayan git-prompt.shbir işlev içerir, __git_ps1bu

bash PS1 istemine eklemek için metin yazdırır (dal adını içerir)

En temel kullanımı:

$ __git_ps1
(master)

Ayrıca isteğe bağlı bir biçim dizesi alır:

$ __git_ps1 'git:[%s]'
git:[master]

Nasıl Gidilir

İlk olarak, dosyayı bir yere kopyalayın (örn. ~/.git-prompt.sh).

1.Seçenek: Dosya sisteminizde mevcut bir kopyayı kullanın. Örnek (Mac OS X 10.15):

$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

Seçenek 2: Komut dosyasını GitHub'dan çekin .

Ardından, şu satırı ekleyin .bashrc/.zshrc:

source ~/.git-prompt.sh

Son olarak, komut değiştirme yerine PS1çağrı __git_ps1olarak değiştirin:

Bash:

PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

zsh:

setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '

git <1.9.3

Ancak, yalnızca git 1.9.3 (Mayıs 2014) veya sonraki sürümlerin , o şube adını (!) Güvenli bir şekilde görüntülemenize izin verdiğini unutmayın.

Bkz. Taahhüt 8976500 , Richard Hansen ( richardhansen) :

Hem bash hem de zsh, PS1'in değerini parametre genişletme , komut değiştirme ve aritmetik genişletmeye tabi tutar.

PS1İki veya üç bağımsız değişken modunda çalışırken ham, çıkışsız dal adını eklemek yerine, dal adını PS1tutan bir değişkene başvuruda bulunun.

Kabuklar yinelemeli olarak genişlemediğinden, bu, örneğin özel hazırlanmış dal adlarıyla rastgele kod yürütülmesini önler

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

Hangi dal aklı böyle bir dalı adlandırır? ;) ( Xkcd'deki gibi bir annenin yanında )

Daha fazla örnek

still_dreaming_1 raporlar yorumlarda :

xterm(Benim .bashrc) ile bir renk istemi istiyorsanız bu harika çalışıyor gibi görünüyor :

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

Şube dahil her şey farklı bir renktir.

Linux Mint 17.3 Tarçın 64 bit:

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

3
gerçekten bir git repo'sunda olduğunuzda istemi geçerli git dalına nasıl ayarlayabilirsiniz. Normal bir dizindeyseniz normal istem gösterir.
Zubair Alam

1
@ still_dreaming_1 git'i çok kolay bir şekilde yükseltebilir veya derleyebilirsiniz: stackoverflow.com/a/24847953/6309
VonC

1
Eğer xterm (.bashrc ile) ile bir renk istemi istiyorsanız, PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$'her şey dal da dahil olmak üzere farklı bir renktir.
still_dreaming_1

5
Gönderdiğim PS1 artık Linux Mint 17.3 Cinnamon 64- PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '
bit'de

1
Güncel usta olan github.com/git/git/blob/master/contrib/completion/git-prompt.sh - Ben durumda biz cevap bu bağlantı veren gerektiğini düşünüyorum bir gelecekte bulunursa istismar? Ayrıca: $ ve "PS1 satırımda kaçmak zorunda kaldım, ama bu muhtemelen karmaşıklığı nedeniyle.
ArchimedesMP

57

Aşağıdaki adımları izleyin: (Linux)

Dosyayı düzenleyin ~/.bashrc, sonuna aşağıdaki satırları girin (Mac'te dosya olur ~/.bash_profile)

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

Şimdi yeni terminal penceresini başlatın ve git-repo'ya girmeyi deneyin. Geçerli şube, istemle birlikte gösterilir.

4 Daha Fazla Bilgi - MAC / Linux


OSX'te ~ / .bashrc yerine ~ / .bash_profile dosyasını değiştirmenin gerekli olduğunu düşünmüyorum.
bergercookie


1
Renk için yukarıdaki gitse "git-dal" ı "git -c color.ui = her zaman dal" olarak değiştirmeyi düşünün. Git dalının geçerli dalı vurgulamak için kullandığı renkle aynı renktedir.
awatts

Sizden esinlenildi, ancak çalışma dizinimin mavi vurgulamalı tam yol (\ w) olmasını seviyorum. Örnek: gist.github.com/rmharrison/1885ef6bbb0226eb7b42e2135d5eeca2
rmharrison

MAC I $ (parse_git_branch) önce kaçmasını engelleyecektir zorunda için böylece işe bu almak için: PS1="\u@\h \W\[\033[32m\]$(parse_git_branch)\[\033[00m\] $ ". Ben PS1 önünde 'ihracat' kullanmama rağmen.
Chris

37

1- Bash tamamlamanız yoksa ...:sudo apt-get install bash-completion

2- .bashrc dosyanızı düzenleyin ve kontrol edin (veya ekleyin):

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

3- ... bilgi isteminizden önce: export PS1='$(__git_ps1) \w\$ '
( __git_ps1 git şubenizi gösterecektir)

4- yap source .bashrc

DÜZENLE :

İlave değerler: Tekerleği Yeniden Keşfetmeyin


Bu bir homestead / vagrant makine kullanarak benim için çalışıyor tek yolu gibi görünüyor
Iannazzi


"Tekerleği Yeniden Keşfetme" bağlantısı ne yazık ki bozuk.
Taylor R

@TaylorR Bağlantıyı geri yükledim.
VonC

23

Git durumunu görüntülemek için bilgi istemini şu şekilde yapılandırdım:

Git-komut dosyası al:

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

Ve .bashrc dosyanıza aşağıdaki kodu ekleyerek isteminizi özelleştirin:

# Load Git functions
source ~/.git-prompt.sh

# Syntactic sugar for ANSI escape sequences
txtblk='\e[0;30m' # Black - Regular
txtred='\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
bldred='\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
undred='\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
bakred='\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\u@\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"

Daha fazla bilgi edinmek isterseniz, tüm nokta dosyalarını buradan alabilirsiniz: https://github.com/jamming/dotfiles


Şimdiye kadarki en iyi cevap.
Basil Musa

@Hesam PROMPT_BEFOREOrtam değişkenini değiştirebilir ve $txtwht\wbunu ezbere bilmiyorum kaldırabilirim , ama sanırım hile yapıyor
jaguililla


Bu semboller dalın durumuna benzer, yani: $saklanmış değişikliklerin olduğu =anlamına gelir ve en son taahhüdün uzaktan takip edilen şubeye itildiği anlamına gelir
jaguililla


3

İlk önce, Bash Profilinizi ana dizininizde açın. Varsayılan düzenleyicinizi kullanarak bash_profile dosyanızı açmanın ve düzenlemenin en kolay yolu .

Örneğin, bu kodu kullanarak VS Kodu kullanarak açın: kod .bash_profile.

Ardından aşağıdaki kodları Bash'inize yapıştırın.

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

export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "

İşlev

parse_git_branch ()

şube adını getirecek ve daha sonra PS1 aracılığıyla terminalinizde gösterebilirsiniz.

Buraya,

\ u = Kullanıcı adı

@ = Statik Metin

\ h = Bilgisayar Adı

\ w = Geçerli Dizin

$ = Statik Metin

Daha fazla özelleştirme için bu değişkenleri değiştirebilir veya kaldırabilirsiniz.


Git'i terminalde ilk kez veya konfigürasyondan hemen sonra kullanırsanız, bazen şube adını göremezsiniz.

Bu sorunu yaşarsanız endişelenmeyin. Bu durumda, sadece bir örnek havuz hazırlayın ve bazı değişikliklerden sonra bunu kaydedin. Commit komutu bir kez çalıştırıldığında, terminal oradan git dalını bulur.


Ekran Görüntüsü: Git Branch in Terminal


2
vim ~/.bash

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

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $"

En son değişiklikleri yansıtmak için aşağıdaki komutu çalıştırın

source ~/.bashrc

Çıktı:-

chandrakant@NDL41104 ~/Chandrakant/CodeBase/LaravelApp (development) $

0

Eğer kullanırsanız balıklar kabuk onun oldukça yalındır. balık çok sayıda güzellik ile gelen interaktif bir kabuktur. Bunu kullanarak kurabilirsiniz apt-get.

sudo apt-get install fish

daha sonra komut istemi ayarını

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

şimdi http://localhost:8001/ bilgi istemi sekmesini açın ve klasik + git seçeneğini belirleyin

resim açıklamasını buraya girin

Şimdi istemi kullan düğmesine tıklayın ve hazırsınız.


0
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]$(parse_git_branch)\n\$ '

Eww, gerçekten orada çıplak terminal kaçar koymayın; tputaklı başında biri gibi kullanın .
Toby Speight

0

Ubuntu terminalinde GIT repo şubenizin adını göstermek için aşağıdaki adımları izleyin:

Adım 1: Terminali açın ve aşağıdaki komutu kullanarak .bashrc dosyasını düzenleyin.

vi .bashrc

Adım 2: .bashrc dosyasının sonuna aşağıdaki satırı ekleyin:

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

export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "

Aşama 3: kaynak .bashrc kök (home) dizininde yaparak:

/ RootFolder: ~ $ source .bashrc

Adım 4: Terminali yeniden başlatın ve açın ve cmd'yi kontrol edin. GIt repo dizin yolunuza gidin ve işiniz bitti. :)


0
root:~/project#  -> root:~/project(dev)# 

~ / .bashrc öğenizin sonuna aşağıdaki kodu ekleyin

force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt


-1

Bir bin klasörüne gider python küçük bir komut dosyası denedim .... 'gitprompt' dosya

#!/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 "-"

Yürütülebilir hale getirin

Sonra bash istemini buna göre ayarlayın:

\u:\w--[$(gitprompt)] \$ 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.