2011-05-19 11 views
14

git diff में कुछ विकल्प, उदाहरण के लिए --name-status, फ़ाइल नाम के बगल में स्थिति पत्र का आउटपुट कारण बनता है। वे हैं:गिट "जोड़ी टूटा हुआ" और "अज्ञात" स्थितियों का क्या अर्थ है, और वे कब होते हैं?

ए, सी, डी, एम, आर, टी, यू, एक्स, बी

... और वे मतलब

जोड़ा गया (ए), कॉपी किया गया (सी), हटाए गए (डी), संशोधित (एम), नामांकित (आर), प्रकार (यानी नियमित फ़ाइल, सिम्लिंक, सबमिशन, ...) बदल गया (टी), अनमर्ज (यू), अज्ञात (एक्स), या टूटा हुआ जोड़ा (बी)।

प्रश्न: कैसे X और B स्थितियों व्याख्या की जानी चाहिए, और जो हालात उनकी उपस्थिति के लिए नेतृत्व? क्या आप git-diff के आउटपुट में दिखाई देने वाली ऐसी स्थितियों के लिए कदमों की एक श्रृंखला प्रदान कर सकते हैं, और संभावित रूप से उन्हें ठीक करने के तरीके?

उत्तर

12

B "टूटे जोड़ी" स्थिति कभी नहीं --name-status उत्पादन में सीधे दिखाई देता है, यह विकल्प --diff-filter लिए एक तर्क के रूप ही उपयोगी है जब भी विकल्प -B (--break-rewrites) का उपयोग कर। फ़िल्टर के रूप में इसका उपयोग उन फ़ाइलों को चुनता है जिनमें कम से कम उनकी सामग्री का एक निश्चित प्रतिशत हटा दिया गया है या बदला गया है।

यह "ब्रेकिंग" --name-status के साथ बहुत उपयोगी नहीं है क्योंकि "ब्रेकिंग" के बिंदु से अधिकतर बदलाव होता है कि अंतर टेक्स्ट कैसे उत्पन्न होता है: यह जोड़ने के बजाय भिन्नता से संदर्भ रेखाओं (अपरिवर्तित रेखाएं) को हटा देता है और लाइनों को हटा दें जो कि "यादृच्छिक" सामान्य घटनाओं के आसपास की आवश्यकता होगी, अलग-अलग एल्गोरिदम खोजने के लिए हुआ था।

git init broken-pairs 
cd broken-pairs 
nums() { seq "$1" "$2" 2>/dev/null || jot $(($2 - $1 + 1)) "$1"; } 
nums 0 99 > a 
nums 100 199 > b 
git add a b 
git commit -ma=0-99,b=100-199 
nums 200 299 > a 
{ nums 100 149; nums 350 399; } > b 
git diff --name-status --diff-filter=B    # selects nothing 
git diff --name-status --diff-filter=B -B   #   M100 a 
git diff --name-status --diff-filter=B -B/50  #   M100 a M050 b 

X "अज्ञात" स्थिति वास्तव में नहीं दिखना चाहिए। यदि ऐसा प्रतीत होता है, तो इसका अर्थ यह है कि एक पथनाम जो न तो अनमोल, जोड़ा गया, हटाया गया है, संशोधित है या इसका प्रकार बदल गया है (प्रभावी रूप से अपरिवर्तित) अप्रत्याशित रूप से आंतरिक diff मशीनरी के मूल में बना दिया गया है; त्रुटि feeding unmodified <pathname> to diffcore भी उत्पन्न की जाएगी।

ऐसा लगता है कि यह ऑपरेशन के कुछ पुराने तरीके से छोड़ा गया है।

+0

सटीक और संपूर्ण उत्तर के लिए धन्यवाद! –

+0

'गिट रिबेस' ऑपरेशन के दौरान संघर्ष में फ़ाइलों का पता लगाने के लिए 'यू' स्थिति का उपयोग किया जा सकता है। उदाहरण के लिए, मेरे पास एक उपनाम 'गिट टकराव' है जो विवाद विवादों वाली फ़ाइलों की पहचान करने में सहायता के लिए 'diff --name-only --diff-filter = U' चलाता है। – larsks

संबंधित मुद्दे