अद्यतन : ओपी डैनियल स्टटज़बाक टिप्पणियों में बताते हैं कि इस साधारण आदेश git diff-indexने उनके लिए काम किया:
git update-index --refresh
git diff-index --quiet HEAD --
( nornagon ने टिप्पणियों में उल्लेख किया है कि, अगर ऐसी फाइलें हैं जिन्हें छुआ गया है, लेकिन जिनकी सामग्री सूचकांक में समान है, तो आपको git update-index --refreshपहले चलाने की आवश्यकता होगी git diff-index, अन्यथा diff-indexगलत रिपोर्ट देगी कि पेड़ गंदा है)
तब आप देख सकते हैं कि " कैसे जांच करें कि क्या कोई कमांड सफल हुई? "
git diff-index --quiet HEAD -- || echo "untracked"; // do something about it
नोट: जैसा कि एंथोनी सॉटिले ने टिप्पणी की है
git diff-index HEAD ...ऐसी शाखा पर विफल हो जाएगा, जिसमें कोई कमिट नहीं है (जैसे कि एक नया इनिशियलाइज़ रिपॉजिटरी)।
एक वर्कअराउंड मैंने पाया हैgit diff-index $(git write-tree) ...
और टिप्पणियों मेंharidsv इंगित करता है कि एक नई फ़ाइल पर इसे एक अंतर के रूप में नहीं पता चलता है।
लगता है कि सुरक्षित दृष्टिकोण पहले फ़ाइल युक्ति पर चलाया जाता है और फिर यह देखने के लिए उपयोग किया जाता है कि कुछ भी चलने से पहले अनुक्रमणिका में जोड़ा गया है या नहीं ।git diff-files
git addgit diff-indexgit commit
git add ${file_args} && \
git diff-index --cached --quiet HEAD || git commit -m '${commit_msg}'
और टिप्पणियों में 6502 रिपोर्ट:
एक समस्या जिसका मुझे सामना करना पड़ा, वह git diff-indexयह बताएगी कि वास्तव में मतभेद हैं जब फ़ाइलों के टाइमस्टैम्प के अलावा कोई नहीं होता है। एक बार
चलाने git diffसे समस्या हल हो जाती है (आश्चर्यजनक रूप से पर्याप्त है, git diffवास्तव में सैंडबॉक्स की सामग्री को बदल देता है, जिसका अर्थ है यहां .git/index)
ये टाइमस्टैम्प समस्याएँ तब भी हो सकती हैं यदि git docker में चल रही हो ।
मूल उत्तर:
"प्रोग्रामेटिकली" का अर्थ है कभी भी चीनी मिट्टी के बरतन आदेशों पर भरोसा न करें ।
हमेशा प्लंबिंग कमांड पर भरोसा करें ।
विकल्पों के लिए " Git के साथ एक गंदे सूचकांक या अनटैक की गई फ़ाइलों की जाँच " भी देखें (जैसे git status --porcelain)
आप नए " require_clean_work_treeफ़ंक्शन " से प्रेरणा ले सकते हैं जिसे हम बोलते हैं ;) (अक्टूबर 2010 की शुरुआत में)
require_clean_work_tree () {
# Update the index
git update-index -q --ignore-submodules --refresh
err=0
# Disallow unstaged changes in the working tree
if ! git diff-files --quiet --ignore-submodules --
then
echo >&2 "cannot $1: you have unstaged changes."
git diff-files --name-status -r --ignore-submodules -- >&2
err=1
fi
# Disallow uncommitted changes in the index
if ! git diff-index --cached --quiet HEAD --ignore-submodules --
then
echo >&2 "cannot $1: your index contains uncommitted changes."
git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2
err=1
fi
if [ $err = 1 ]
then
echo >&2 "Please commit or stash them."
exit 1
fi
}