आउटपुट को पार्स करना 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
तो संभवतः सबसे अच्छी शर्त है।