आउटपुट को पार्स करना git statusएक बुरा विचार है क्योंकि आउटपुट का उद्देश्य मानव पठनीय है, मशीन-पठनीय नहीं। इस बात की कोई गारंटी नहीं है कि उत्पादन Git के भविष्य के संस्करणों में या अलग-अलग कॉन्फ़िगर किए गए वातावरणों में समान रहेगा।
UVVs की टिप्पणी सही रास्ते पर है, लेकिन दुर्भाग्य से बदले हुए कोड में git statusपरिवर्तन नहीं होने पर वापसी नहीं होती है। हालांकि, यह --porcelainविकल्प प्रदान करता है, जो आउटपुट को git status --porcelainस्क्रिप्ट के लिए एक आसान-से-पार्स स्वरूप में स्वरूपित करने का कारण बनता है , और गिट संस्करणों में और उपयोगकर्ता कॉन्फ़िगरेशन की परवाह किए बिना स्थिर रहेगा।
हम git status --porcelainएक संकेतक के रूप में खाली आउटपुट का उपयोग कर सकते हैं कि इसमें कोई बदलाव नहीं होना चाहिए:
if [ -z "$(git status --porcelain)" ]; then
# Working directory clean
else
# Uncommitted changes
fi
यदि हम कार्यशील निर्देशिका में अनियोजित फ़ाइलों के बारे में परवाह नहीं करते हैं, तो हम --untracked-files=noउन विकल्पों की उपेक्षा करने के विकल्प का उपयोग कर सकते हैं :
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
# Working directory clean excluding untracked files
else
# Uncommitted changes in tracked files
fi
उन स्थितियों के खिलाफ इसे और अधिक मजबूत बनाने के लिए जो वास्तव मेंgit status उत्पादन के बिना विफल होने का कारण बनती हैं stdout, हम चेक को परिष्कृत कर सकते हैं:
if output=$(git status --porcelain) && [ -z "$output" ]; then
# Working directory clean
else
# Uncommitted changes
fi
यह भी ध्यान देने योग्य है कि, हालांकि git statusअर्थिंग एग्जिट कोड नहीं देता है जब वर्किंग डायरेक्टरी अस्वच्छ होती है, git diffतो --exit-codeविकल्प प्रदान करता है , जो इसे डिफरेंट यूटिलिटी के समान व्यवहार करता है , यानी 1मतभेद होने पर स्टेटस से बाहर निकलता है और 0जब कोई नहीं मिला।
इसका उपयोग करके, हम इसके साथ अस्थिर परिवर्तनों की जांच कर सकते हैं:
git diff --exit-code
और मंचन किया गया, लेकिन इसके साथ परिवर्तन नहीं किए गए:
git diff --cached --exit-code
यद्यपि git diffउपयुक्त तर्कों के माध्यम से सबमॉडल्स में अनट्रैक फाइल्स पर रिपोर्ट की जा सकती है --ignore-submodules, दुर्भाग्य से ऐसा लगता है कि वास्तविक वर्किंग डायरेक्टरी में अनट्रैक फाइल्स पर रिपोर्ट करने का कोई तरीका नहीं है। यदि कार्यशील निर्देशिका में अनट्रैक की गई फाइलें प्रासंगिक हैं, git status --porcelainतो संभवतः सबसे अच्छी शर्त है।