बैश कमांड प्रॉम्प्ट पर गिट शाखा जोड़ना


161

मैंने सफलता के बिना bash प्रॉम्प्ट पर वर्तमान में (चेक-आउट) पर काम कर रही git शाखा को जोड़ने की कोशिश की .. ( अपने वर्तमान पथ को बनाए रखते हुए जो सक्रिय निर्देशिका / फ़ाइल बरकरार दिखाता है) मेरे पास मेरे घर पर एक .bashrc फ़ाइल है। लेकिन मैंने कई लोगों को .profile फ़ाइल का उल्लेख करते हुए भी देखा।


3
मुझे लगता है कि यह यूनिक्स / लिनक्स एक्सचेंज में बेहतर होगा।
कोल बुस्बी

मैंने 10 अलग-अलग कैसे-टोस की तरह कोशिश की है, उनमें से कुछ ने काम किया लेकिन मुझे गिट ब्रांच मिल गई और मैंने पहले जो वर्किंग डायरेक्टरी / पाथ खो दिया ..
जार्ज कटसनोस

Git 1.9.3+ शाखा को प्रदर्शित करने का एक दिलचस्प तरीका लाता है: नीचे मेरा जवाब देखें
VONC

1
@cole बसबी स्पष्ट रूप से नहीं।
जॉर्ज काटसनोस

1
@GeorgeKatsanos चार साल यकीन है कि मुझे दिखाया: पी
कोल Busby

जवाबों:


161

git 1.9.3 या बाद का: उपयोग करें __git_ps1

Git नामक एक शेल स्क्रिप्ट प्रदान करता है git-prompt.sh, जिसमें एक फ़ंक्शन शामिल होता है __git_ps1जो

PS1 प्रॉम्प्ट को जोड़ने के लिए टेक्स्ट को प्रिंट करता है (शाखा का नाम भी शामिल है)

इसका सबसे बुनियादी उपयोग है:

$ __git_ps1
(master)

यह एक वैकल्पिक प्रारूप स्ट्रिंग भी लेता है:

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

इसे कैसे प्राप्त करें

सबसे पहले, फ़ाइल को कहीं (जैसे ~/.git-prompt.sh) पर कॉपी करें ।

विकल्प 1: अपने फाइल सिस्टम पर मौजूदा कॉपी का उपयोग करें। उदाहरण (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

विकल्प 2: स्क्रिप्ट को GitHub से खींचें ।

इसके बाद, निम्न पंक्ति को अपने में जोड़ें .bashrc/.zshrc:

source ~/.git-prompt.sh

अंत में, अपने PS1फोन __git_ps1को कमांड-प्रतिस्थापन के रूप में बदलें :

दे घुमा के:

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

Zsh:

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

git <1.9.3

लेकिन ध्यान दें कि केवल 1.9.3 (मई 2014) या बाद में आपको उस शाखा का नाम सुरक्षित रूप से प्रदर्शित करने की अनुमति देता है (!)

रिचर्ड हैनसेन द्वारा प्रतिबद्ध 8976500 देखें ( richardhansen) :

Bash और zsh दोनों PS1 का मान पैरामीटर विस्तार , कमांड प्रतिस्थापन , और अंकगणितीय विस्तार के अधीन हैं ।

PS1दो- या तीन-तर्क मोड में चलने पर कच्चे, गैर-शाखा वाले शाखा नाम को शामिल करने के बजाय, शाखा नाम रखने वाले PS1चर का संदर्भ देने के लिए निर्माण करें।

क्योंकि गोले पुनरावृत्ति का विस्तार नहीं करते हैं, यह विशेष रूप से तैयार की गई शाखा नामों जैसे कि मनमाने कोड निष्पादन से बचता है

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

क्या कुटिल दिमाग एक शाखा का नाम होगा? ;) ( एक माँ के रूप में xkcd में )

और ज्यादा उदाहरण

still_dreaming_1 टिप्पणियों में रिपोर्ट :

यदि आप xterm(मेरे में .bashrc) के साथ एक रंग संकेत चाहते हैं तो यह बहुत अच्छा लगता है :

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)\$ ' 

सब कुछ एक अलग रंग है, जिसमें शाखा भी शामिल है।

लिनक्स मिंट में 17.3 दालचीनी 64-बिट:

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

3
जब आप वास्तव में गिट रेपो में होते हैं, तो आप वर्तमान git शाखा में प्रॉम्प्ट कैसे सेट कर सकते हैं। इसलिए यदि आप एक सामान्य निर्देशिका में हैं तो यह सामान्य संकेत दिखाता है।
जुबैर आलम

1
@ still_dreaming_1 आप बहुत आसानी से अपग्रेड या संकलन कर सकते हैं हालांकि: stackoverflow.com/a/24847953/6309
VONC

1
यह बहुत अच्छा काम करता है यदि आप एक रंग को xterm (in .bashrc) के साथ रंग संकेत चाहते हैं: 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)\$'सब कुछ शाखा सहित एक अलग रंग है।
still_dreaming_1

5
कि PS1 मैंने लिनक्स मिंट 17.3 दालचीनी 64-बिट में मेरे लिए सही ढंग से प्रदर्शित नहीं किया, लेकिन यह करता है:PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '
still_dreaming_1

1
वर्तमान मास्टर github.com/git/git/blob/master/contrib/completion/git-prompt.sh पर है - मुझे लगता है कि हमें उस उत्तर से लिंक करना चाहिए, यदि भविष्य में कोई शोषण पाया जाता है? इसके अलावा: मुझे अपनी PS1 लाइन में $ और "बचना था, लेकिन शायद इसकी जटिलता के कारण।
ArchimedesMP

57

नीचे दिए गए चरणों का पालन करें: (लिनक्स)

फ़ाइल को संपादित करें ~/.bashrc, इसके अंत में निम्न पंक्तियों को दर्ज करने के लिए (मैक के मामले में, फ़ाइल होगी ~/.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\] $ "

अब, नई टर्मिनल विंडो शुरू करें, और किसी भी गिट-रेपो में प्रवेश करने का प्रयास करें। वर्तमान शाखा को शीघ्र दिखाया जाएगा।

4 अधिक जानकारी - मैक / लिनक्स


मुझे नहीं लगता कि OSX पर ~ / .bashrc के बजाय ~ / .bash_profile को बदलना आवश्यक है।
बेर्गेकोकी


1
रंग के लिए "git शाखा" को "git -c color.ui = हमेशा शाखा" के रूप में ऊपर parse_git_branch में बदलने पर विचार करें। इसमें वही रंग है जो गिट शाखा वर्तमान शाखा को उजागर करने के लिए उपयोग करती है।
जागृति

आपके द्वारा प्रेरित है, लेकिन मैं अपनी कार्यशील निर्देशिका को ब्लू हाइलाइटिंग के साथ पूर्ण पथ (\ w) होना पसंद करता हूं। उदाहरण: gist.github.com/rmharrison/1885ef6bbb0226eb7b42e2135d5eeca2
rmharrison

मैक के लिए मुझे $ (parse_git_branch) से पहले पलायन को खत्म करना था ताकि यह काम कर सके PS1="\u@\h \W\[\033[32m\]$(parse_git_branch)\[\033[00m\] $ "। हालाँकि मैं PS1 के सामने 'निर्यात' का उपयोग नहीं कर रहा हूँ।
क्रिस

37

1- अगर आपके पास बैश-पूर्ति नहीं है ...:sudo apt-get install bash-completion

2- अपनी .bashrc फ़ाइल को संपादित करें और जांचें (या जोड़ें):

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

3- export PS1='$(__git_ps1) \w\$ '
( आपकी प्रॉम्प्ट लाइन से पहले: ( __git_ps1 आपकी git शाखा दिखाएगा)

4- करते हैं source .bashrc

संपादित करें:

इसके अलावा रीडिंग: व्हील को फिर से शुरू न करें


यह एकमात्र तरीका है जो मेरे लिए एक होमस्टेड / योनि मशीन का उपयोग करने के लिए काम करता है
Iannazzi

Ubuntu में ठीक काम करता है 16.04
Frug

"डोंट रिनवेंट द व्हील" लिंक दुखद रूप से टूटा हुआ है।
टेलर आर

@TaylorR मैंने लिंक को पुनर्स्थापित कर दिया है।
वॉन

23

यहां बताया गया है कि मैंने Git स्टेटस प्रदर्शित करने के लिए प्रॉम्प्ट कैसे कॉन्फ़िगर किया है:

गिट-प्रॉम्प्ट स्क्रिप्ट प्राप्त करें:

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

और अपने .bashrc फ़ाइल में निम्न कोड जोड़कर अपने प्रॉम्प्ट को कस्टमाइज़ करें:

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

यदि आप अधिक जानकारी प्राप्त करना चाहते हैं, तो आप यहां सभी डॉटफाइल्स प्राप्त कर सकते हैं: https://github.com/jamming/dotfiles


अब तक का सबसे अच्छा जवाब।
तुलसी मूसा

@ हेसम आप PROMPT_BEFOREपर्यावरण चर को बदल सकते हैं और $txtwht\wमैं इसे दिल से नहीं जानता, लेकिन मुझे लगता है कि यह चाल करता है
जगुएल

1
यह मेरे मैक पर काम करता है लेकिन शाखा का नाम दिखाता है जैसे (मास्टर * $% =)
अजाक 6

वे प्रतीक शाखा की स्थिति से मिलते-जुलते हैं: $इसका मतलब है कि इसमें परिवर्तन हुए हैं, और =इसका मतलब है कि नवीनतम प्रतिबद्ध को दूरस्थ ट्रैक की गई शाखा में धकेल दिया गया था
जगुइला


3

सबसे पहले, अपने घर की निर्देशिका में अपना बैश प्रोफ़ाइल खोलें। अपने डिफ़ॉल्ट संपादक का उपयोग करके अपने bash_profile को खोलने और संपादित करने का सबसे आसान तरीका ।

उदाहरण के लिए, मैं इस कमांड का उपयोग करके वीएस कोड का उपयोग करके इसे खोलता हूं: कोड .bash_profile।

फिर बस निम्नलिखित कोड को अपने बैश में पेस्ट करें।

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\] $ "

कार्यक्रम

parse_git_branch ()

शाखा नाम प्राप्त करेंगे और फिर PS1 के माध्यम से आप इसे अपने टर्मिनल में दिखा सकते हैं।

यहाँ,

\ u = उपयोगकर्ता नाम

@ = स्टेटिक टेक्स्ट

\ h = कंप्यूटर का नाम

\ w = वर्तमान निर्देशिका

$ = स्थिर पाठ

अधिक अनुकूलन के लिए आप इन चरों को बदल सकते हैं या हटा सकते हैं।


यदि आप पहली बार टर्मिनल में या कॉन्फ़िगरेशन के तुरंत बाद Git का उपयोग करते हैं, तो शायद कभी-कभी आप शाखा का नाम नहीं देख सकते हैं।

यदि आपको यह समस्या है, तो चिंता न करें। उस मामले में, बस एक नमूना रिपॉजिटरी बनाएं और कुछ परिवर्तनों के बाद इसे प्रतिबद्ध करें। जब कमिट कमांड एक बार अमल करेगा, तब से टर्मिनल को गिट ब्रांच मिल जाएगी।


स्क्रीनशॉट: 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\] $"

नवीनतम परिवर्तनों को प्रतिबिंबित करने के लिए निम्नलिखित कमांड चलाएं

source ~/.bashrc

आउटपुट: -

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

0

यदि आप मछली के खोल का उपयोग करते हैं तो यह बहुत सीधा है। मछली एक संवादात्मक खोल है जो बहुत सारे उपहारों के साथ आता है। आप इसका उपयोग करके स्थापित कर सकते हैं apt-get

sudo apt-get install fish

तब आप प्रॉम्प्ट सेटिंग का उपयोग करके बदल सकते हैं

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

अब http://localhost:8001/ प्रॉम्प्ट टैब खोलने के लिए और क्लासिक + गिट विकल्प चुनें

यहां छवि विवरण दर्ज करें

अब यूज़ प्रॉम्प्ट बटन पर क्लिक करें और आप सेट हो गए हैं।


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

ईडब्ल्यूवी, वास्तव में नग्न टर्मिनल को वहां से नहीं निकालता है; tputकिसी भी समझदार व्यक्ति की तरह उपयोग करें ।
टोबे स्पाइट

0

Ubuntu टर्मिनल में अपने GIT रेपो की शाखा का नाम दिखाने के लिए नीचे दिए गए चरणों का पालन करें:

Step1: टर्मिनल खोलें और निम्नलिखित कमांड का उपयोग करके .bashrc संपादित करें।

vi .bashrc

चरण 2: .bashrc फ़ाइल के अंत में निम्न पंक्ति जोड़ें:

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\] $ "

step3: source .bashrc रूट (होम) निर्देशिका में कर:

/ Rootfolder: ~ $ source .bashrc

Step4: पुनरारंभ करें और टर्मिनल खोलें और cmd की जाँच करें। अपने GIt रेपो निर्देशिका पथ पर नेविगेट करें और आप कर रहे हैं। :)


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

अपने ~ / .bashrc के अंत में निम्नलिखित कोड जोड़ें

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

0

यहां एक सरल स्वच्छ संस्करण है जिसका मैं उपयोग करता हूं: लिंक

यहां छवि विवरण दर्ज करें


-1

मैंने अजगर में एक छोटी स्क्रिप्ट की कोशिश की है जो एक बिन फ़ोल्डर में जाती है .... 'gitprompt' फ़ाइल

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

इसे निष्पादन योग्य और सामान बनाएं

फिर बैश प्रॉम्प्ट को तदनुसार समायोजित करें:

\u:\w--[$(gitprompt)] \$ 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.