क्या विशिष्ट रिटर्न त्रुटि कोड की वापसी है?


86

विलय की त्रुटियों की तरह, या त्रुटियों को पुन: उत्पन्न करें। क्या इसमें एक अद्वितीय त्रुटि कोड है?

जवाबों:


56

मैंने असफल होने के लिए एक परीक्षा निर्धारित की। मेरे पास बस यही है:

$ git merge newbranch
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

$ echo $?
1

0अपेक्षा के अनुसार सही तरीके से विलय होने पर रिटर्न मिलता है।


2
परेशानी यह है कि, git merge(१..org.४ के लिए डॉक्स। kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html ) केवल एक स्थान पर रिटर्न स्टेटस का उल्लेख करते हैं (यदि आप उपयोग करते हैं -) -ff-only "और यह फास्ट-फ़ॉरवर्ड कमिट नहीं कर सकता, यह नॉन-ज़ीरो लौटाता है - यह स्पष्ट रूप से यह नहीं कहता है कि यदि यह सभी काम करता है या यदि कोई मर्ज संघर्ष था, तो वापस आ जाता है।
मैट कर्टिस

9
@Matt: सफलता के लिए शून्य लौटाने और गैर-शून्य (आमतौर पर 1) अन्यथा के बारे में गिट कमांड बहुत, बहुत अच्छे हैं। आप हमेशा के साथ सुरक्षित रूप से एक साथ चेन कमांड कर सकते हैं &&; इस प्रकार उनके परीक्षण कार्यान्वित होते हैं।
कैस्केबेल

17
संगत और समझदार निकास कोड वापस करने के लिए Git अच्छा नहीं है। उदाहरण के लिए, बिना किसी बदलाव के साथ कमिट करना, कोड 1 से बाहर निकल जाएगा, लेकिन बिल्ली, यह त्रुटि नहीं है।
pfalcon

3
बेसिन / मर्ज.c के स्रोत कोड में एक टिप्पणी से: "बैकएंड 1 से बाहर निकलता है जब संघर्ष को हल करने के लिए छोड़ दिया जाता है, 2 के साथ जब यह दिए गए मर्ज को बिल्कुल भी नहीं संभालता है।"
माइक

क्या git rebaseऐसा ही व्यवहार है?
osexp2003

60

संक्षेप में, नहीं। आप त्रुटियों के लिए निकास कोड 1 और सफलता के लिए 0 देखने जा रहे हैं।

स्रोत की त्वरित पकड़ से, कुछ विशिष्ट 127 और 128 उनके विशिष्ट उद्देश्यों के लिए अपेक्षित हैं (कमांड नहीं मिली, पहले से रिपोर्ट की गई त्रुटियां), और कुछ स्थानों पर कुछ असामान्य कोड, लेकिन मिल त्रुटियों के चलाने के लिए, यह है सभी exit(1)


3
यह आपकी प्रतिबद्ध हुक डिबगिंग के लिए अतिरिक्त कष्टप्रद है। अगर आपके असफल हुक कोड के बजाय हमेशा 1 वापस करने जा रहा है, तो आपके गिट हुक में एक निकास कोड होने की बात भी व्हाट्सएप करें।
नोविस सी

* निक्स एप्लिकेशन पूर्ण सफलता के लिए 0 की स्थिति लौटाते हैं। अन्य स्थिति कोड एप्लिकेशन द्वारा निर्धारित किए जाते हैं। 255 अन्य कोड हैं जिनका अर्थ ऐप पर निर्भर करता है। manविवरण के लिए उनके पृष्ठ देखें।
shawnhcorey

3
@shawnhcorey समस्या यह है कि git अपने nonzero त्रुटि कोड का दस्तावेज़ नहीं देता है।
इयान केम्प

13

git statusनॉन-गिट रेपो पर चल रहा है 128, 1 नहीं, जो जल्दी से यह निर्धारित करने में सहायक है कि क्या कोई गिट रेपो मौजूद है या नहीं।


6

त्रुटि 128, गिट से कोई त्रुटि संदेश के साथ, "अनपेक्षित समस्या" के लिए कैच-ऑल हो सकता है।

मैं इसे उन ऑपरेशनों पर प्राप्त कर रहा था, git checkout -- myfileजिन्हें एक अलग उपयोगकर्ता द्वारा .git (जैसे " " संशोधित फ़ाइल को वापस करने के लिए) को संशोधित करने की आवश्यकता थी । (मेरे मामले में " chmod -R og+w .git" इसे तय किया; स्वाभाविक रूप से, ऐसा न करें जब तक कि आप अपने मामले के लिए सुरक्षा निहितार्थ नहीं समझते!)


6

git push --delete origin a_remote_tag_name

यदि टैग git संस्करण का उपयोग नहीं करता है तो यह 256 रिटर्न देता है 1.8.3.1

यह अच्छा होगा कि प्रत्येक कमांड द्वारा लौटाए गए विशिष्ट रिटर्न कोड की समेकित सूची हो और वे क्या संकेत दें। यह रिटर्न कोड अर्थ बदलने से रोकने में भी मदद कर सकता है (जो स्वचालन स्क्रिप्ट पर भरोसा कर सकता है)।


2

Git 2.24 (Q4 2019) यह बताता है कि gitकमांड्स कोड कैसे लौटाते हैं।

देखें प्रतिबद्ध 50094ca , c1a6f21 प्रतिबद्ध , 854b5cb प्रतिबद्ध , प्रतिबद्ध dd2b6b6 , प्रतिबद्ध 6bd26f5 , c6ec6da प्रतिबद्ध , f2e2fa8 प्रतिबद्ध , प्रतिबद्ध 460609c , प्रतिबद्ध 92014b6 , प्रतिबद्ध 0ab74e9 , प्रतिबद्ध cb46c40 , प्रतिबद्ध b562a54 (27 अगस्त 2019), और प्रतिबद्ध fe49814 (20 अगस्त 2019) डेंटन लियूDenton-L द्वारा ( )
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 1c6fc94 , 30 सितं, 2019)

t4014: git कमांड के रिटर्न कोड खोना बंद करें

वर्तमान में, दो तरीके हैं जहां गिट कमांड के रिटर्न कोड खो जाते हैं।

पहला तरीका तब है जब एक कमांड एक पाइप के अपस्ट्रीम में है। एक पाइप में, अंतिम कमांड के केवल रिटर्न कोड का उपयोग किया जाता है। इस प्रकार, अन्य सभी आदेशों में उनके रिटर्न कोड नकाबपोश होंगे।
रीराइट पाइप ताकि ऊपर की ओर कोई Git कमांड न हो।

दूसरा तरीका यह है कि जब कोई कमांड नॉन-असाइनमेंट सबस्क्रिप्शन में हो
रिटर्न कोड आसपास के कमांड के पक्ष में खो जाएगा।
इसके उदाहरण ऐसे देखें कि Git किसी फ़ाइल में आउटपुट को आदेशित करता है और आस-पास के कमांड केवल गैर- Git कमांड के साथ सब-कॉल को कॉल करता है।

इसलिए लिखने के बजाय:

git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"

प्रकार:

git cat-file commit rebuild-1 >actual &&
    grep "^Side .* with .* backslash-n" actual
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.