git - Translate parse_git_branch function to zsh from bash (for prompt) -


मैं बैश में इस फ़ंक्शन का उपयोग कर रहा हूं

  function parse_git_branch {git_status = "$ (git स्थिति 2 & gt; / dev / null) "पैटर्न =" ^ # शाखा पर ([^ $ $ {IFS}] *) "अगर [[! $ {Git_status}} = ~ "कार्य निर्देशिका साफ़ करें"]]; तब स्थिति = "*" फा # # अगर कोई दो जोड़ता है तो अगर आप अधिक विशिष्ट प्राप्त करना चाहते हैं तो [[$ {git_status} = ~ $ {pattern}]]; तो शाखा = $ {BASH_REMATCH [1]} गूंज "($ {branch} $ {state})" fi}  

लेकिन मैं zsh का उपयोग करने के लिए निर्धारित है हालांकि मैं इसे पूरी तरह से एक खोल स्क्रिप्ट के रूप में (यहां तक ​​कि शेबांग के बिना) का उपयोग कर सकता हूं। Zshrc त्रुटि इस लाइन पर पार्स त्रुटि है अगर [[! $ {Git_status}} ...

इसे खोलने के लिए मुझे क्या करने की आवश्यकता है?

संपादित करें: " वास्तविक त्रुटि "मुझे मिल रहा है " पार्स त्रुटि के पास} और यह अजीब डबल }} के साथ लाइन को संदर्भित करता है, जो कि बाश पर काम करता है।

< P> संपादित करें: बस मज़े के लिए अंतिम कोड है:

  parse_git_branch () {git_status = "$ (git स्थिति 2 & gt; / dev / null)" पैटर्न = "^ # शाखा पर ([^ [: अंतरिक्ष:]] *)" यदि [[$ $ {git_status} = ~ "कार्य निर्देशिका को साफ़ करें"]]; तब स्थिति = "*" फ़िल अगर [[$ {git_status} = ~ $ {पैटर्न}]]; फिर शाखा = $ {मैच [1]} गूंज "($ {branch} $ {state})" फाई} सेट करें PROMPT_SUBST PROMPT = '$ PR_GREEN% n $ $ PR_GREEN% मी% यू $ PR_NO_COLOR: $ PR_BLUE% 2c $ PR_NO_COLOR% (!! $।) 'RPROMPT =' $ PR_GREEN $ (parse_git_branch) $ PR_NO_COLOR ' 

आपके धैर्य के लिए सभी के लिए धन्यवाद और सहायता।

संपादित करें: सबसे अच्छे उत्तर ने हमें सबकुछ किया है: git स्थिति porcelai है N (UI) अच्छा स्क्रिप्टिंग जीआईटी नलसाजी के खिलाफ है यहाँ अंतिम कार्य है:

  # नीचे क्रिस के नवीनतम संस्करण प्रोम्प्ट = '$ PR_GREEN% n $ $ PR_GREEN% m% u $ PR_NO_COLOR: $ PR_BLUE% 2c $ PR_NO_COLOR% (! $।) 'RPROMPT =' $ PR_GREEN $ (parse_git_branch) $ PR_NO_COLOR ' 

ध्यान दें कि केवल प्रॉम्प्ट zsh- विशिष्ट है बैश में यह आपका त्वरित प्लस "\ $ (parse_git_branch)" हो जाएगा।

यह धीमा हो सकता है (जीआईटी के लिए और कॉल, लेकिन यह एक अनुभवजन्य प्रश्न है), लेकिन यह ' टीआईटी में बदलावों से टूटा हुआ है (वे नलसाजी नहीं बदलते हैं)। और यह कि अच्छी स्क्रिप्ट को आगे बढ़ने के लिए बहुत महत्वपूर्ण है।

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

चीनी मिट्टी के बरतन इंटरफेस , यह "दशा" या "ज़िशिस्म्स" के बिना भी किया जा सकता है (अर्थात = ~ मिलान ऑपरेटर):

  parse_git_branch () {in_wd = "$ (git Rev-parse -is-inside-work-tree 2 & gt; / dev / null) "|| वापसी परीक्षण "$ in_wd" = सच || रिटर्न स्टेट = '' जीआईटी अपडेट-इंडेक्स - रिफ्रेश -क & gt; / dev / null # diff- इंडेक्स के साथ झूठी सकारात्मकता से बचें अगर git rev-parse -verify HEAD & gt; / dev / null 2 ​​& gt; & amp; 1; तो git diff-index HEAD --quiet 2 & gt; / dev / null || राज्य = '*' अन्य राज्य = '#' फाई (डी = "$ (git rev-parse -show-cdup)" & amp; amp; सीडी "$ d" और amp; amp; और परीक्षण- z "$ (git ls -फ़ाइलें - अन्य - - निकासी-मानक।) ") & Gt; / dev / null 2 ​​& gt; और 1 || राज्य = "$ {state} +" शाखा = "$ (git प्रतीकात्मक-रेफरी सिर 2> gt; / dev / null)" परीक्षण- z "$ शाखा" & amp; amp; शाखा = '& lt; अलग-HEAD & gt;' प्रॉम्प्ट में आउटपुट को जोड़ना अभी भी विशिष्ट है (यानी एस्केप या  $   

को प्रतिध्वनित करें "$ {branch # refs / heads}}" कोड> ( bash और zsh दोनों के लिए) और PROMPT_SUBST ( zsh के लिए)) सेट करें।


Comments