जटिल गिट शाखा के नाम ने सभी गिट आदेशों को तोड़ दिया


338

मैं masterनिम्नलिखित कमांड से एक शाखा बनाने की कोशिश कर रहा था ,

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

जब गिट ने अचानक जवाब देना बंद कर दिया। मुझे लगता है कि ()किसी भी तरह से दोषियों को दोषी ठहराया जाता है। अब, जब भी मैं कोई Git कमांड चलाने की कोशिश करता हूं, मुझे वही त्रुटि मिलती है:

git:176: command not found: _of_ProductSearchQuery

gitहर बार बढ़ने के बाद संख्या के साथ मैं एक कमांड टाइप करता हूं।

क्या कोई समझा सकता है कि क्या हुआ? और मैं वापस सामान्य कैसे हो सकता हूं? मैं उस शाखा को हटाना चाहता हूं, लेकिन मैं यह कैसे कर सकता हूं?


8
मुझे लगता है कि यह आपके zsh वातावरण से संबंधित है क्योंकि मैं बिना किसी दुष्परिणाम (lubuntu 13.10) के साथ अपने बैश शेल में शाखा बनाने में सक्षम था, लेकिन जब मैं अपने पूरी तरह से वेनिला zsh पर स्विच करता हूं, तो मैं त्रुटि देख रहा हूं
Jonathan.Brink

27
भविष्य में, संदिग्ध लगने वाले सामान को उद्धृत करें। git branch "SSLOC-201_Implement___str__()_of_ProductSearchQuery"ठीक काम करता है।
Qix - मोनासा

11
@Qix समस्याग्रस्त पात्रों से पूरी तरह बचने के लिए बेहतर है।
jub0bs 16

3
@ जॉब्स निश्चित रूप से, हालांकि मैंने देखा है कि कुछ कंपनियां इस तरह के अजीब शाखा नामों को लागू करती हैं।
Qix - मोनासा 16

1
@DwightSpencer आपका लिंक बैश के लिए विशिष्ट है, लेकिन यह प्रश्न ज़श-विशिष्ट है। समस्या वास्तव में बैश में नहीं होती है।
jub0bs

जवाबों:


617

मुसीबत

क्या कोई समझा सकता है कि क्या हुआ? [...] मुझे उस शाखा को हटाने में सक्षम होना अच्छा लगेगा, लेकिन Git मेरे लिए काम नहीं करेगा।

चलाकर

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

zsh में, आपने कोई शाखा नहीं बनाई । इसके बजाय, आप गलती से तीन परिभाषित खोल कार्यों , कहा जाता है git, branchऔर SSLOC-201_Implement___str__, जो उनके मानकों (यदि हो तो) और जिसका शरीर है पर ध्यान न दें _of_ProductSearchQuery। आप अपने लिए जांच सकते हैं कि वास्तव में क्या हुआ है, बिल्ट ज़श कमांड को आमंत्रित करके functions, जो सभी मौजूदा शेल कार्यों को सूचीबद्ध करता है:

$ functions                                                     
SSLOC-201_Implement___str__ () {
    _of_ProductSearchQuery
}
branch () {
    _of_ProductSearchQuery
}
git () {
    _of_ProductSearchQuery
}

दुर्भाग्य से, हालांकि अन्य दो शेल फ़ंक्शंस समस्याग्रस्त नहीं हैं, शेल फ़ंक्शन जिसे "गिट" कहा जाता है, अब बोना फ़ाइड git कमांड को छाया करता है !

$ which git
git () {
    _of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)

इसलिए, आपको बाद में त्रुटि मिलेगी

command not found: _of_ProductSearchQuery

जब भी आप एक Git कमांड चलाने का प्रयास करते हैं, उदाहरण git logके लिए git status, आदि (निश्चित रूप से, कि कोई भी कमांड _of_ProductSearchQueryमौजूद नहीं है)।

पक्षीय लेख

[...] मुझे समान त्रुटि मिली:

git:176: command not found: _of_ProductSearchQuery

( gitहर बार जब मैं एक कमांड टाइप करता हूं तो संख्या बढ़ने के साथ )

यह संख्या बस के मान से मेल खाती है HISTCMD, एक पर्यावरण चर जो धारण करता है

[t] वह इतिहास की घटना संख्या को एक संवादात्मक खोल में रखता है, दूसरे शब्दों में उस आदेश के लिए घटना संख्या जो $HISTCMDपढ़ने के कारण होती है।

देखें zsh पुस्तिका अधिक जानकारी के लिए।

समाधान

और मैं वापस सामान्य कैसे हो सकता हूं?

बस समस्याग्रस्त शेल फ़ंक्शन को हटाएं (और आपके द्वारा किए गए अन्य दो दुर्घटना के समय,):

unset -f git
unset -f branch SSLOC-201_Implement___str__

तब सब कुछ ठीक होना चाहिए।

क्या होगा अगर unsetछाया भी है ?!

अच्छा सवाल ! मैं आपको Wumpus W. Wumbley की उत्कृष्ट टिप्पणी के लिए नीचे उल्लेख करता हूं ।


शाखा-नामकरण युक्तियाँ

किसी भी विशेष शेल वर्ण से बचें

हाँ, जैसा कि टिप्पणियों में बताया गया है, कोष्ठक गिट शाखा के नामों में मान्य वर्ण हैं; आपको बस नाम को उचित रूप से उद्धृत करने की आवश्यकता है, जैसे

$ git branch 'foo()bar'
$ git branch
  foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'

हालाँकि, कमांड-लाइन तर्कों के रूप में उपयोग किए जाने पर हर बार ऐसे नामों को उद्धृत करने की आवश्यकता होती है, जो आपको संदर्भ नामों में कोष्ठक को आगे बढ़ाने के लिए मनाते हैं। आम तौर पर, आपको इस तरह के आश्चर्य को रोकने के लिए, गोले में एक विशेष अर्थ रखने वाले पात्रों से (जितना संभव हो) बचना चाहिए।

सरल शाखा नामों का उपयोग करें

आपको वैसे भी अपनी शाखा का नाम छोटा और मीठा रखना चाहिए। जैसे लंबे विवरण

SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery

शाखा संदेशों में नहीं, प्रतिबद्ध संदेशों में हैं।


4
उस थ्रेड स्टेट्स में कुछ भी अवैध नहीं है। Git को यह ठीक लग रहा था। Switched to a new branch 'abcd-()-foo'
Qix - मोनिका ने 12

1
अछा लगता है; निश्चित रूप से उनका उपयोग करने के लिए एक महान विचार नहीं है, लेकिन वे तकनीकी रूप से अमान्य नहीं हैं ।
Qix - मोनासा ने 7

12
क्या होता है अगर कोई भी unsetशेल फ़ंक्शन बनाकर छाया बनाता है? (क्या यह संभव है?)
माटेयो उमिली 15

2
@codroipo हा! ये एक अच्छा बिंदु है। हां, यह संभव है, और उस स्थिति में, आप शायद पुनः आरंभ करने से बेहतर हैं zsh
15

45
आप उपयोग कर सकते हैं builtin unset। यदि builtinऔर unsetफिर दोनों को कार्यों से छाया हुआ है, तो unfunction। अगर वह भी चला गया, unhash -f। यदि वे चारों चले गए हैं, तो शेल को पुनरारंभ करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.