Git-diff और git लॉग को नई और हटाई गई फ़ाइलों की उपेक्षा कैसे करें?


155

कभी-कभी कुछ नई, हटाई गई और / या पुनर्नामित फ़ाइलों के साथ कुछ परिवर्तित फ़ाइलें होती हैं। जब मैं कर रहा हूं git diffया git-logमैं उन्हें छोड़ना चाहता हूं, तो मैं संशोधनों को बेहतर बना सकता हूं।

वास्तव में, उनकी सामग्री के बिना नई और हटाई गई फ़ाइलों के नामों को सूचीबद्ध करना सबसे अच्छा होगा। "पुराने" का नाम बदलकर "नया" करने के लिए मैं वैकल्पिक रूप से "पुराने" और "नए" के बीच अंतर प्राप्त करना चाहूंगा।

जवाबों:


217

--diff-filterविकल्प दोनों के साथ काम करता diffहै और लॉग।

मैं --diff-filter=Mएक बहुत का उपयोग करता हूं जो केवल सामग्री संशोधनों के लिए आउटपुट को अलग करता है।

नाम बदलता है और प्रतियां का पता लगाने और diff उत्पादन में इन का उपयोग करने के लिए, आप उपयोग कर सकते -Mहैं और -Cक्रमश: एक साथ साथ Rऔर Cविकल्प के लिए --diff-filter


3
जब इसके साथ प्रयोग किया जाता git logहै तो यह पूरी तरह से कमिट को अनदेखा कर देगा जो केवल फाइलों को जोड़ते हैं और / या हटाते हैं।
qxx

7
क्या वास्तव में केवल एक प्रकार के डेटा को बाहर करने का एक तरीका है? कुछ इस तरह--diff-filter=!D
कामिल डेज़िडिक

24
@Kamil हाँ, वहाँ है। प्रलेखन से उद्धरण:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
लैम्ब्डाक्रूजर

62
  • आधिकारिक दस्तावेज:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

केवल उन्हीं फ़ाइलों का चयन करें जिन्हें जोड़ा गया है (A), कोपीड (C), हटाए गए (D), संशोधित (M), नामांकित (R), उनके प्रकार (यानी नियमित फ़ाइल, सिमलिंक, सबमॉड्यूल,…) बदले हुए (T) अनमरजेड (U) हैं, अज्ञात (X) हैं, या उनकी जोड़ी टूटी हुई है (B)। फ़िल्टर वर्णों के किसी भी संयोजन (कोई नहीं सहित) का उपयोग किया जा सकता है।

जब संयोजन में * (सभी-या-कोई नहीं) जोड़ा जाता है, तो सभी रास्तों का चयन किया जाता है यदि कोई फ़ाइल है जो तुलना में अन्य मानदंडों से मेल खाती है; यदि कोई ऐसी फ़ाइल नहीं है जो अन्य मानदंडों से मेल खाती है, तो कुछ भी चयनित नहीं है।

इसके अलावा, इन ऊपरी मामलों के पत्रों को बहिष्कृत करने के लिए नीचे डाला जा सकता है। जैसे --diff-filter = विज्ञापन जोड़े गए और हटाए गए रास्तों को शामिल नहीं करता है।

उदाहरण: केवल शो की गई, बदली गई, संशोधित फ़ाइलें हटाई गई फ़ाइलों को बाहर करें:

git diff --diff-filter=ACM

2
रास्तों को शामिल करने के लिए पथों और पूंजी पत्र विकल्पों को बाहर करने के लिए लोअरकेस अक्षर विकल्पों का उपयोग करने के बारे में अच्छा ध्यान दें।
स्टुअम

-3

अद्यतन: स्वीकार किए जाते हैं जवाब चार्ल्स बेली द्वारा सही एक है; वांछित कार्यक्षमता पहले से ही गिट में निर्मित है।

मैं इस उत्तर को यहां छोड़ दूंगा क्योंकि यह उन चीजों के लिए विचार प्रदान कर सकता है जो कि गिट में निर्मित नहीं हैं।


git diffउनकी तुलना करके नई और हटाई गई फ़ाइलें दिखाता है /dev/null। कुछ लिखना बहुत मुश्किल नहीं होना चाहिए (मैं खुद पर्ल का उपयोग करूँगा) जो /dev/nullअगले लाइनों तक अगले लाइनों को खोजता और फ़िल्टर करता है। तब git diff ... | the-filter

नामांकित फाइलें एक अलग मामला है; मैं (अभी तक) उस के लिए एक अच्छा जवाब नहीं है।


यह ठीक है, लेकिन इस तरह से मैं पेजर (कम) का उपयोग करने की संभावना को ढीला कर दूंगा, अगर जरूरत पड़ेगी तो मैं नहीं?
Maaartinus

@maaartinus: मुझे ऐसा लगता है; मैंने ऐसा नहीं सोचा था। (व्यक्तिगत रूप से, मैंने अपना कैट पेजर "कैट" पर सेट किया और ... | lessस्पष्ट रूप से उपयोग किया ।) आप less's -Eया -Fविकल्प को देख सकते हैं (हालांकि मेरे सिस्टम पर यह मुझे आउटपुट देखने नहीं देता है)।
कीथ थॉम्पसन

ठीक है, यह ठीक है, लेकिन दूसरे उत्तर को देखें।
Maaartinus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.