Git के अलग आउटपुट में "@@ -1 -1 @@" का क्या अर्थ है?


103

मैं लौटी जानकारी से डेटा एकत्र कर रहा हूं

git diff <commitId>..<commitId>

और मैं भाग गया @@ -1 +1 @@

मैं यह नहीं जान सकता कि वह मुझे क्या बता रहा है। मैंने Google पर कुछ खोजा है लेकिन कोई फायदा नहीं हुआ।


क्या आप बता सकते हैं कि इस तरह के हेडर में क्या फ़ाइल परिणाम है?
14

@kworr एक मूर्खतापूर्ण प्रश्न की तरह है, एकीकृत प्रारूप में किसी भी प्रकार के रेंज हेडर हैं।
युवल एडम

@YuvalAdam: वास्तव में अलग-अलग एकीकृत प्रारूप में अधिक फ़ील्ड होते हैं जिन्हें [- +] <स्थिति>, <लाइनों> की तरह भरा जाना चाहिए और यहां हमें कोई भी परिवर्तन प्रदर्शित नहीं होते हैं, लेकिन यह परिवर्तन फ़ाइल की पहली पंक्ति को स्पर्श करते हैं।
कॉवोर

जवाबों:


69

यह एक एकीकृत अलग हंक पहचानकर्ता है। यह जीएनयू डिफुटिल्स द्वारा प्रलेखित है।

एकीकृत आउटपुट प्रारूप दो-लाइन हेडर से शुरू होता है, जो इस तरह दिखता है:

--- फाइल से फाइल-मॉडिफिकेशन-टाइम 
+++ से फाइल टू फाइल-मॉडिफिकेशन-टाइम

समय टिकट 2002-02-21 23:30:39.942229878 -0800दिनांक, समय के साथ भिन्नात्मक सेकंड और समय क्षेत्र को इंगित करता है। भिन्नात्मक सेकंड मेजबानों पर छोड़ दिए जाते हैं जो भिन्नात्मक समय टिकटों का समर्थन नहीं करते हैं।

आप शीर्ष लेख की सामग्री को --label=labelविकल्प के साथ बदल सकते हैं ; देखें वैकल्पिक नाम देखें ।

इसके बाद एक या एक से अधिक मतभेदों को देखें; प्रत्येक हंक एक क्षेत्र दिखाता है जहाँ फाइलें भिन्न होती हैं। एकीकृत प्रारूप हंक इस तरह दिखते हैं:

@@ फ़ाइल-लाइन-संख्या-से-फ़ाइल-पंक्ति-संख्या @@
  पंक्ति-से-फ़ाइल 
 -रेखा-से-फ़ाइल-फ़ाइल ...

यदि एक हंक में सिर्फ एक लाइन होती है, तो केवल इसकी स्टार्ट लाइन संख्या दिखाई देती है। अन्यथा इसके लाइन नंबर जैसे दिखते हैं । खाली हंक को उस लाइन पर शुरू करने के लिए माना जाता है जो हंक का अनुसरण करती है।start,count

यदि एक हंक और उसके संदर्भ में दो या अधिक लाइनें हैं, तो इसकी लाइन संख्याएं दिखती हैं । अन्यथा केवल इसकी अंतिम पंक्ति संख्या प्रकट होती है। खाली हंक को उस लाइन पर समाप्त माना जाता है जो हंक से पहले होती है।start,count

दोनों फ़ाइलों के लिए आम लाइनें एक अंतरिक्ष चरित्र के साथ शुरू होती हैं। दो फ़ाइलों के बीच वास्तव में भिन्न होने वाली रेखाओं में बाएं प्रिंट कॉलम में निम्न संकेतक वर्णों में से एक है:

  • +
    पहली फ़ाइल के लिए यहां एक लाइन जोड़ी गई थी।
  • -
    पहली फाइल से यहां एक लाइन हटा दी गई थी।

68

सरल उदाहरण विश्लेषण

प्रारूप मूल रूप से diff -uएकीकृत रूप में समान है ।

उदाहरण के लिए:

diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')

यहां हमने 2, 3, 14 और 15. लाइनों को हटा दिया। आउटपुट:

@@ -1,6 +1,4 @@
 01
-02
-03
 04
 05
 06
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@ माध्यम:

  • -1,6इसका मतलब है कि पहली फ़ाइल का यह टुकड़ा लाइन 1 से शुरू होता है और कुल 6 लाइनों को दिखाता है। इसलिए यह 1 से 6 लाइनों को दर्शाता है।

    1
    2
    3
    4
    5
    6
    

    -"पुराने" का अर्थ है, जैसा कि हम आमतौर पर इसे लागू करते हैं diff -u old new

  • +1,4इसका मतलब है कि दूसरी फ़ाइल का यह टुकड़ा लाइन 1 से शुरू होता है और कुल 4 लाइनें दिखाता है। इसलिए यह 1 से 4 लाइनों को दर्शाता है।

    + का अर्थ है "नया"।

    हमारे पास 6 के बजाय केवल 4 लाइनें हैं क्योंकि 2 लाइनें हटा दी गई थीं! नया हंक बस है:

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@ दूसरे हंक के लिए अनुरूप है:

  • पुरानी फ़ाइल पर, हमारे पास 6 लाइनें हैं, जो पुरानी फ़ाइल की लाइन 11 से शुरू होती है:

    11
    12
    13
    14
    15
    16
    
  • नई फ़ाइल पर, हमारे पास 4 लाइनें हैं, जो नई फ़ाइल के लाइन 9 पर शुरू होती है:

    11
    12
    13
    16
    

    ध्यान दें कि लाइन 11नई फ़ाइल की 9 वीं पंक्ति है क्योंकि हमने पहले से ही 2 लाइनों को हटा दिया है: 2 और 3।

हंक हेडर

आपके git संस्करण और कॉन्फ़िगरेशन के आधार पर, आप पंक्ति के आगे एक कोड रेखा भी प्राप्त कर सकते हैं @@, जैसे func1() {:

@@ -4,7 +4,6 @@ func1() {

यह भी -pसादे ध्वज के साथ प्राप्त किया जा सकता है diff

उदाहरण: पुरानी फ़ाइल:

func1() {
    1;
    2;
    3;
    4;
    5;
    6;
    7;
    8;
    9;
}

यदि हम लाइन हटाते हैं 6, तो अंतर दिखाता है:

@@ -4,7 +4,6 @@ func1() {
     3;
     4;
     5;
-    6;
     7;
     8;
     9;

ध्यान दें कि यह के लिए सही लाइन नहीं है func1: यह लाइनों को छोड़ दिया 1और 2

यह कमाल की विशेषता अक्सर यह बताती है कि प्रत्येक हंक किस फंक्शन या क्लास से संबंधित है, जो अंतर की व्याख्या करने के लिए बहुत उपयोगी है।

हेडर का चयन करने के लिए एल्गोरिथ्म कैसे काम करता है बिल्कुल इस पर चर्चा की गई है: गिट भिन्न के हंक हेडर में अंश कहां से आता है?


आह, इसलिए मैं @@ -1,6 +1,4 @@"लाइन 1 पर शुरू, पुरानी लाइन की गिनती 6 थी, लेकिन नई लाइन की गिनती 4 है" के रूप में पढ़ा जाएगा
बादल

1
@ क्लॉड यूप यह है कि :-)
सिरो सेंटिल्ली 冠状 病 that's that's 法轮功

6

यह वर्तमान हंक श्रेणी की जानकारी है जो यह बताती है कि कौन सी लाइन संख्या इस हंक शुरू और समाप्त होती है।

गहराई से स्पष्टीकरण के लिए http://en.wikipedia.org/wiki/Diff#Unified_format पढ़ें ।


धन्यवाद। सहायता की गई। जब कोई अनुगामी अल्पविराम और s नहीं होता है, तो यह 1 से चूक जाता है।
SSEMember
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.