2011-09-03 25 views
8

मैं गिट का उपयोग कर रहा हूं, मैंने .bashrc में निम्न पंक्ति को बदल दिया है, वर्तमान में चेकआउट शाखा को तुरंत दिखाने के लिए, pwd एक गिट रेपो है। ऑपरेटिंग सिस्टम मैं उपयोग कर रहा हूँ है: उबंटू 32 बिटयह जांचने के लिए कि क्या गिट स्थापित है .bashrc

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

मैं सुरक्षा प्रॉम्प्ट में Git रेपो की वर्तमान शाखा प्रदर्शित करने के लिए इस लाइन का उपयोग कर रहा हूँ, के बजाय, ऊपर लाइन।

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

समस्या है जब मैं यह मित्रों को दे, शैल निर्देशिका के बीच नेविगेट जबकि, त्रुटि __git_ps1: command not found देता है, बदलते निर्देशिकाओं पर Git शाखा के लिए स्क्रिप्ट चेकों के रूप में है। मैं कैसे जांचूं कि गिट स्थापित है या नहीं और शाखा जांच केवल तभी किया जाए जब गिट स्थापित हो?

संपादित करें: ayckoster ने सुझाव दिया है, मैं कोड की निम्न लाइनों के साथ 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 

अब, हर मैं टर्मिनल मैं git --version स्क्रीन करने के लिए outputted मिल खोलने के लिए, जबकि Git स्थापित किया गया है, और मैं निम्नलिखित त्रुटि है, जबकि टर्मिनल खोलने Git स्थापित हो जब नहीं:

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

मैं इस कैसे साफ़ करूं? धन्यवाद।

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

इस कोड मैं अंत में के साथ आया था, अपने सुरक्षा प्रॉम्प्ट

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

ध्यान दें कि '__git_ps1' समारोह हमेशा उपलब्ध नहीं है। - उदाहरण के लिए मैक पर यह मेरे गिट 2.3.2 पर उपलब्ध नहीं है। हालांकि यह यहां उपलब्ध है: https://github.com/git/git/blob/8976500cbbb13270398d3b3e07a17b8cc7bff43f/contrib/completion/git-prompt.sh –

उत्तर

19

git --version 

निष्पादित करने के लिए दिया गया मान $? आप मान सकते हैं Git या स्थापित नहीं है पर निर्भर करता है की कोशिश करो। अगर आपको 0 मिलता है तो सब ठीक है अन्यथा गिट स्थापित नहीं है। आप test भी कर सकते हैं।

यह मानता है कि सब कुछ ठीक से सेटअप है और गिट आपके $ पाथ में है और गिट कमांड का नाम बदल नहीं है।

इस

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

आप शायद हर बार अपनी स्क्रीन पर 'git --version' के आउटपुट को नहीं चाहते हैं। इसके अलावा मैं सशर्त में चेक करने का सुझाव दूंगा; 'अगर गिट --वर्जन 2> और 1>/dev/null; फिर ' – tripleee

+0

संकेत के लिए धन्यवाद। यह निर्भर करता है कि उसे केवल एक बार जानकारी चाहिए। मैंने अपने शुरुआती स्निपेट में अपना सुझाव जोड़ा। यदि आप केवल एक बार इसका उपयोग करते हैं तो चर को छोड़ना समझ में आता है। – ayckoster

4

में वर्तमान git branch प्रदर्शित करने के लिए which का उपयोग कर करना चाहिए अपने .bashrc में इस कोड का उपयोग करने में संकोच न है मदद। अगर यह कुछ भी नहीं देता है -> गिट स्थापित नहीं है।

+3

'कौन सा बुरा है; जैसा कि अन्य उत्तरों में सुझाए गए अनुसार बैश के अंतर्निर्मित का उपयोग करें। – tripleee

+0

मैंने अनुमान लगाया कि यह चारों ओर सबसे अच्छा तरीका नहीं था, लेकिन यह केवल एकमात्र ऐसा था जिसे मैं सोच सकता था ;-) –

+1

@tiplee: इस तथ्य से अलग कौन सा बुराई है कि यह एक प्रक्रिया उत्पन्न करता है? 'हैश' में निर्मित बैश का उपयोग सीमा है कि यह केवल तभी काम करता है जब 'गिट' को कमांड के रूप में बुलाया गया हो, इसलिए ऐसा मामला हो सकता है जहां गिट स्थापित किया गया हो लेकिन' हैश 'कमांड कुछ भी नहीं लौटाता है। http://www.gnu.org/s/bash/manual/bash.html –

2

की तरह इसका इस्तेमाल मैं hash का उपयोग करना चाहिये, क्योंकि यह एक में निर्मित इसलिए कोई एक नई प्रक्रिया बनाने की आवश्यकता है। यह आदेश भी कैश करता है।

hash git && commands 
+1

जो भी आप नीचे आते हैं, क्या आप समझा सकते हैं? –

+1

अंतर्निहित बैश का उपयोग करने की अच्छी अनुशंसा, लेकिन पूर्ण प्रकटीकरण में यह ध्यान दिया जाना चाहिए कि गिट स्थापित करना संभव है लेकिन हैश तालिका में नहीं है (हालांकि शायद यह दुर्लभ चीज है ताकि असीमित हो)। मुझे भी दिलचस्पी होगी कि आपको डाउनवोट क्यों मिला। –

0

आप सशर्त Git के अस्तित्व के आधार पर अपने बैश शीघ्र बदलने के लिए निम्नलिखित इस्तेमाल कर सकते हैं:

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

लिनक्स ट्यूटोरियल ब्लॉग प्रविष्टि "Tutorial: Conditions in bash scripting (if statements)", अगर स्थिति उपलब्ध विभिन्न चलता ऐसे -a के रूप में जांच करने के लिए एक फ़ाइल के अस्तित्व के लिए।

समस्या जो मैं इस समाधान के साथ देखता हूं वह यह है कि यह उपरोक्त उदाहरण में git (यानी /usr/local/bin/ या /usr/local/ के स्थान पर निर्भर है)। यह कोई समस्या नहीं हो सकती है क्योंकि उबंटू पर गिट /usr/local/ में पाया जाता है जब एपीटी-गेट के माध्यम से गिट स्थापित किया जाता है।

आप Git की स्थापित स्थान पर निर्भर नहीं होना चाहते हैं, तो आप आदेश प्रतिस्थापन का उपयोग which आदेश के परिणाम को देखने के लिए कर सकता है।

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

हालांकि, which का उपयोग कर के रूप में "" बुराई अन्य answerers द्वारा समझा जाता है। (। हालांकि, मैं उन्हें अपने तर्क दिए बिना बजाय सिर्फ घोषणा के इस तरह के बयानों के लिए उनके तर्क बाहर fleshing में रुचि होगी)

2

उपयोग 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

यह मेरे लिए काम किया :

GIT_VERSION = "$ (गिट --वर्जन)" यदि ["$ GIT_VERSION"! = "कमांड नहीं मिला"]; तो गूंज "Git पहले से ही" बाकी स्थापित गूंज "Git याद आ रही है" फाई

संबंधित मुद्दे