2009-03-01 3 views
10

किसी को भी एक Git पाइपलाइन (निश्चित रूप से चीनी मिट्टी के बरतन नहीं) पता है कि क्या की अर्थ है:प्रोग्रामेटिक Git स्थिति

  • वहाँ के बाद से पिछले प्रतिबद्ध रेपो में संपादन कर रहे हैं, और
  • स्थानीय प्रमुख से आगे है, चाहे उत्पत्ति/HEAD

मैं इस प्रोग्रामेटिक रूप से निर्धारित करने के लिए देख रहा हूं, इसलिए चीनी मिट्टी के बरतन और विभिन्न sed-fu के साथ इसे हल करने की इच्छा नहीं है।

उत्तर

9

अद्यतन: mentioned below रूप toupeira करके, आप git status की --porcelain विकल्प का उपयोग कर सकते हैं (क्योंकि 6f15787, सितंबर 2009, Git 1.7.0 प्रतिबद्ध)।

मैं अपने जवाब में बताया गया "What does the term porcelain mean in Git?" कि:

शायद --porcelain का अर्थ यहां

हालांकि "चीनी मिट्टी के बरतन लिपियों के उपभोग के लिए उपयुक्त उत्पादन का उत्पादन" है, कि नहीं होगा आगे/पीछे की जानकारी दिखाएं: "What to add to “git status --porcelain” to make it behave like “git status”?" देखें: इसके लिए, आपको अभी भी अन्य आदेशों का उपयोग करने की आवश्यकता होगी: "How to know if git repository has changes that have not been synchronized with server?"

देखें

प्रारंभिक जवाब मार्च 2009

चीनी मिट्टी के बरतन आदेश में, एक:

$ git diff HEAD 

आप के बाद से परिवर्तन कर देता है पिछले प्रतिबद्ध (तुम क्या करने से किया जाएगा यदि आप चलाने "Git प्रतिबद्ध-एक") ।

पाइपलाइन आदेश में एक संभावित बराबर होगा:

$ git ls-files -m 

सभी संशोधित (कार्यशील निर्देशिका या इंडेक्स) लिस्टिंग के लिए फ़ाइलें


आप किसी और की भंडार क्लोनिंग करके अपने भंडार बनाते हैं, तो रिमोट "मास्टर" शाखा को "मूल" नाम की एक स्थानीय शाखा में कॉपी किया गया है। आपको अपनी "मास्टर" शाखा मिलती है जो रिमोट रिपोजिटरी से बंधी नहीं है।

हमेशा एक वर्तमान सिर होता है, जिसे हेड के नाम से जाना जाता है। (यह वास्तव में एक प्रतीकात्मक कड़ी, .git/HEAD, जैसे refs/सिर/मास्टर एक फाइल करने के लिए है।)

रन "Git स्थिति" और उत्पादन का विश्लेषण: अतः में

# On branch master 
# Your branch is ahead of 'origin/master' by 11 commits. 
# 

अधिक जानकारी सवाल "Why is Git telling me “Your branch is ahead of ‘origin/master’ by 11 commits.” and how do I get it to stop?"

पाइपलाइन आदेश में

संभव बराबर: सभी लिस्टिंग के लिए

* git-for-each-ref 

करता है, लेकिन साथ ही उत्पादन का विश्लेषण करने की आवश्यकता है ...

फिर, git ls-files could be used to produced the same result than a git status

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \ 
        --others \ 
        --modified \ 
        -t 
+0

यह बढ़िया है। बहुत बहुत धन्यवाद। –

+5

"git ls-files - exclude-standard ..." थोड़ा सा सरल होगा। –

2

git status अब पटकथा प्रयोजनों के लिए एक --porcelain तर्क (और साथ ही एक विकल्प -z मशीन पार्सिंग के लिए), इस git ls-files जो सूची में उसे शामिल फ़ाइलें प्रदर्शित नहीं करता है करने के लिए पसंद किया जाता है है।

+0

से ['porporain'] के लिए प्रलेखन (https://www.kernel.org/pub/software/scm/git/docs/git-status.html): "आउटपुट को एक आसान-टू- स्क्रिप्ट के लिए पार्स प्रारूप। यह लघु आउटपुट के समान है, लेकिन गिट संस्करणों में स्थिर रहेगा और उपयोगकर्ता कॉन्फ़िगरेशन के बावजूद। " –

+0

हालांकि, '--porcelain' ध्वज जोड़ा गया था, इसके बारे में रिलीज नोट्स से यह स्पष्ट नहीं है। –

+0

मुझे यह मिला! मैंने 'गिट लॉग --grep "--porcelain" --डेट-ऑर्डर' के साथ गिट लॉग की खोज की, और वे दिखाते हैं कि ध्वज प्रतिबद्ध में जोड़ा गया था ['6f15787181a163e158c6fee1d79085b97692ac2f'] (https://github.com/git/ गिट/प्रतिबद्ध/6f15787181a163e158c6fee1d79085b97692ac2f) 5 सितंबर, 200 9 को। संयोग से, 'गिट टैग - 6f15787 शामिल है। सॉर्ट-वी | कम 'से पता चलता है कि यह वास्तव में स्थिर संस्करण में v1.7.0 तक जारी नहीं किया गया था, जो [12 फरवरी, 2010] (https://github.com/git/git/commit/e923eaeb901ff056421b9007adcbbce271caa7b6) पर था। –