Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

गिट डिफ:ए हाउ-टू गाइड

गिट डिफ कमांड दो कमिट में फाइलों के बीच या आपके वर्तमान रिपॉजिटरी और पिछले कमिट के बीच के अंतर को दिखाता है। यह कमांड बदली हुई फाइलों के लिए हेडर और मेटाडेटा द्वारा दर्शाए गए परिवर्तनों को प्रदर्शित करता है।

जब आप गिट संस्करण नियंत्रण प्रणाली के साथ काम कर रहे हों, तो आप अपने भंडार में डेटा की तुलना किसी अन्य डेटा स्रोत से करना चाह सकते हैं। उदाहरण के लिए, आप दो अलग-अलग कमिट की एक-दूसरे से या दो फाइलों की तुलना करना चाह सकते हैं।

यही वह जगह है जहां डिफ फ़ंक्शन आता है। डिफिंग एक ऐसा फ़ंक्शन है जो दो इनपुट स्वीकार करता है और उन डेटा स्रोतों के बीच मौजूद परिवर्तनों को प्रस्तुत करता है। डिफ फंक्शन को शाखाओं, फाइलों और कमिट्स पर निष्पादित किया जा सकता है।

यह ट्यूटोरियल उदाहरणों के साथ, Git के साथ अंतर करने की मूल बातें और git diff कमांड का उपयोग करने के तरीके पर चर्चा करेगा। इस ट्यूटोरियल को पढ़ने के अंत तक, आप git diff कमांड का उपयोग करने के विशेषज्ञ होंगे।

गिट डिफ कमांड

git diff कमांड दो कमिट में या एक कमिट और आपके वर्तमान रिपॉजिटरी के बीच फाइलों के बीच के अंतर को प्रदर्शित करता है। आप देख सकते हैं कि किसी फ़ाइल में कौन सा टेक्स्ट जोड़ा, उसमें से निकाला और बदला गया है।

यहाँ git diff कमांड का सिंटैक्स दिया गया है:

<पूर्व>गिट अंतर

डिफ़ॉल्ट रूप से, git diff कमांड आपके रिपॉजिटरी में कोई भी असामान्य परिवर्तन प्रदर्शित करता है।

हम अपनी मूल फ़ाइल से हटाई गई पंक्तियों के साथ-साथ अपनी मूल फ़ाइल में जोड़ी गई या बदली गई किसी भी पंक्ति को देख सकते हैं। अक्सर, Git diff का उपयोग Git रिपॉजिटरी में शाखाओं की तुलना करने के लिए किया जाता है।

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

प्रतिबद्धताओं के बीच गिट डिफ

आप रेफरी के नाम को निर्दिष्ट करके दो गिट कमिट्स के बीच फाइलों की तुलना कर सकते हैं जो उन कमिट्स को संदर्भित करता है जिन्हें आप तुलना करना चाहते हैं। एक रेफरी एक प्रतिबद्ध आईडी या हेड हो सकता है, जो वर्तमान शाखा को संदर्भित करता है।

गिट डिफ <प्रतिबद्ध1> <प्रतिबद्ध2> 

आइए हमारे Git रिपॉजिटरी में दो कमिट्स की तुलना करें।

ऐसा करने के लिए, आपको सबसे पहले उन कमिट्स की आईडी को पुनः प्राप्त करना होगा जिनकी फाइलों की आप तुलना करना चाहते हैं। आप इस कार्य को git log –pretty=oneline कमांड का उपयोग करके पूरा कर सकते हैं, जो रेपो में सभी कमिट्स का संक्षिप्त सारांश देता है:

गिट लॉग --pretty=oneline

यह कमांड वापस आती है:

5141ea9c41cdc7152408bfcab54a910f34441855 (हेड ->; मास्टर) करतब:अपडेट README.md749055ee99df2aa6f5adc4cbe4bfc708395f1c2e डॉक्स:README.md बनाएं

अब, मान लीजिए कि हम इन दो कमिट्स की तुलना करना चाहते हैं। हम इस कमांड का उपयोग करके ऐसा कर सकते हैं:

गिट डिफ 5141ea9c41cdc7152408bfcab54a910f34441855 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e

उपरोक्त कमांड हमारे दो कमिट में एक अलग ऑपरेशन करेगा।

शाखाओं के बीच गिट डिफ

Diff कमांड का उपयोग करके दो Git शाखाओं की तुलना करने के लिए, उन दो शाखाओं को निर्दिष्ट करें जिनकी आप तर्क के रूप में तुलना करना चाहते हैं। आपको प्रत्येक शाखा के नाम के बीच दो बिंदुओं का उपयोग करने की आवश्यकता है। ये बिंदु इंगित करते हैं कि आप प्रत्येक शाखा में नवीनतम प्रतिबद्धता पढ़ना चाहते हैं और उनकी तुलना करना चाहते हैं:

गिट डिफ <ब्रांच1>..<ब्रांच2>

मान लीजिए कि हम "मास्टर" शाखा की तुलना हमारे भंडार में "dev-v0.9" नामक शाखा से करना चाहते हैं। हम इस आदेश का उपयोग करके ऐसा कर सकते हैं:

गिट डिफ मास्टर देव-v0.9

जब यह आदेश निष्पादित किया जाता है, तो हमारे कोडबेस में "मास्टर" और "dev-v0.9" शाखाओं के बीच एक अंतर चलाया जाएगा।

इसी तरह, आप दो अलग-अलग शाखाओं में विशिष्ट फाइलों की तुलना कर सकते हैं। ऐसा करने के लिए, आप ऊपर के समान सिंटैक्स का उपयोग कर सकते हैं और इसके अतिरिक्त उस फ़ाइल को निर्दिष्ट कर सकते हैं जिसकी आप तुलना करना चाहते हैं।

मान लीजिए कि हम अपनी "मास्टर" और "dev-v0.9" शाखाओं में फ़ाइल README.md की तुलना करना चाहते हैं। हम इस कोड का उपयोग करके ऐसा कर सकते हैं:

git diff मास्टर dev-v0.9 ./README.md

यह फ़ाइल की तुलना करेगा README.md (जो हमारी वर्तमान निर्देशिका में है, जिसे "./" सिंटैक्स द्वारा दर्शाया गया है) "मास्टर" और "dev-v0.9" शाखाओं में।

गिट डिफ कमांड उदाहरण

मान लीजिए कि हमने एक खाली रिपॉजिटरी को इनिशियलाइज़ किया है, और हम अपने रिपॉजिटरी को एक README.md फ़ाइल के साथ शुरू करना चाहते हैं। हमने अपने भंडार में एक README.md फ़ाइल बनाई है जिसमें निम्नलिखित वाक्य है:

यह गिट डिफ फीचर का एक उदाहरण है।

फ़ाइलें और कमिट तैयार करें

हम git कमिट कमांड का उपयोग करके इस फाइल के साथ एक कमिट बनाने जा रहे हैं:

गिट कमिट

यह हमें उन परिवर्तनों को सहेजने की अनुमति देता है जो हमने अपने भंडार में किए हैं। git कमांड वापस आती है:

[मास्टर (रूट-प्रतिबद्ध) 749055e] दस्तावेज़:README.md1 फ़ाइल बदलें, 1 प्रविष्टि (+) बनाएँ मोड 100644 README.md

अगर हम इस स्तर पर git diff कमांड चलाते हैं, तो कुछ नहीं होगा। ऐसा इसलिए है क्योंकि हमारी रिपॉजिटरी को इनिशियलाइज़ कर दिया गया है, और हमारे रिपॉजिटरी में किसी भी फाइल के बीच कोई बदलाव नहीं हुआ है। अब जब हमारे पास एक मूल भंडार है, तो हम अपने रेपो में फाइलों की सामग्री को बदल सकते हैं। यह हमें git diff कमांड को क्रिया में देखने की अनुमति देगा।

मान लीजिए कि हम वाक्य जोड़ना चाहते हैं "हमने अभी इस लाइन को अपनी फाइल में जोड़ा है।" README.md फ़ाइल में। हम इस आदेश का उपयोग करके ऐसा कर सकते हैं:

echo "हमने अभी इस लाइन को अपनी फाइल में जोड़ा है।">> README.md

उपरोक्त आदेश हमारे वाक्य को README.md फ़ाइल में जोड़ता है।

इसका मतलब है कि अब हमारी प्रारंभिक README.md फ़ाइल और हमारे रिपॉजिटरी में मौजूद README.md फ़ाइल के बीच अंतर है।

git diff कमांड को निष्पादित करके, हम इन दो फाइलों के बीच अंतर देख सकते हैं। डिफ़ॉल्ट रूप से, git diff कमांड नवीनतम कमिट और रिपॉजिटरी की वर्तमान स्थिति के बीच सभी फाइलों के लिए एक अंतर उत्पन्न करता है।

कमिट्स के बीच Git डिफ रन करें

जब हम कमांड चलाते हैं, तो निम्न प्रतिक्रिया दी जाती है:

diff --git a/README.md b/README.mdindex f808522..f08e544 100644--- a/README.md+++ b/README.md@@ -1 +1,2 @@+हमने अभी जोड़ा है यह लाइन हमारी फाइल के लिए।

यह गिट डिफ फीचर का एक उदाहरण है।

यह git diff कमांड का एक विशिष्ट परिणाम है। हमारा परिणाम दिखाता है कि हमारी फ़ाइल में एक संयुक्त अंतर प्रारूप में क्या जोड़ा या हटाया गया है।

git diff कमांड हमारे पिछले कमिट और हमारे वर्तमान रिपॉजिटरी के बीच सभी फाइलों में सभी परिवर्तनों की एक सूची देता है।

यदि आप रिपॉजिटरी में किसी विशिष्ट फ़ाइल में किए गए परिवर्तनों को पुनः प्राप्त करना चाहते हैं, तो आप उस फ़ाइल को तीसरे पैरामीटर के रूप में निर्दिष्ट कर सकते हैं। मान लीजिए हम केवल README.md फ़ाइल में किए गए परिवर्तनों को देखना चाहते हैं।

इस उदाहरण में, हमने केवल README.md फ़ाइल को बदला है, इसलिए वैसे भी केवल वही परिवर्तन दिखाए जाएंगे। लेकिन अगर हम बड़े रेपो के साथ काम कर रहे थे, तो हम केवल एक फाइल में बदलावों की तुलना करना चाहेंगे। ऐसा करने के लिए, हम इस कमांड का उपयोग कर सकते हैं:

git diff README.md

यह कमांड हमें README.md फ़ाइल के हमारे वर्तमान संस्करण की तुलना हमारे रिपॉजिटरी के लिए प्रतिबद्ध अंतिम संस्करण से करने की अनुमति देता है।

गिट डिफ ब्रेकडाउन

Git diffs में कई घटक होते हैं जिनका उपयोग हम रिपॉजिटरी में फ़ाइल के बीच परिवर्तनों का विश्लेषण करने के लिए कर सकते हैं। आइए उन्हें हमारे पिछले उदाहरण के संदर्भ में तोड़ दें।

इनपुट फ़ाइलें

हमारे अंतर का पहला घटक है इनपुट फ़ाइलें . अंतर का यह हिस्सा हमें बताता है कि अंतर में किन फाइलों की तुलना की जा रही है।

हम अपने कोड के वर्तमान संस्करण में README.md फ़ाइल की तुलना हमारे कोड के अंतिम संस्करण में README.md फ़ाइल से कर रहे हैं। यह हमारे कोड की पहली पंक्ति में कहा गया है:

diff --git a/README.md b/README.md

मेटाडेटा

इसके बाद, हमारे अंतर में मेटाडेटा . है हमारे गिट भंडार के लिए। यह मेटाडेटा आपके द्वारा फ़ाइल में किए गए परिवर्तनों को ट्रैक करने के लिए Git द्वारा उपयोग किए गए ऑब्जेक्ट संस्करण लेबल प्रदर्शित करता है।

यह जानकारी शायद ही कभी diff कमांड के अधिकांश मामलों में उपयोग की जाती है। हमारे उपरोक्त उदाहरण में, मेटाडेटा इस तरह दिखता है:

इंडेक्स f808522..f08e544 100644

मार्कर बदलें

Git diff आउटपुट का अगला भाग चेंज मार्कर . है . ये फ़ाइल पैटर्न मार्कर हमें बताते हैं कि हमारी फ़ाइलों में किस प्रकार के परिवर्तन किए गए हैं। हमारे उपरोक्त उदाहरण के लिए परिवर्तन चिह्नक हैं:

--- a/README.md+++ b/README.md

ये चिह्नक हमें बताते हैं कि a/README.md से परिवर्तन किए गए हैं (ऋण चिह्नों द्वारा निरूपित), जो b/README.md (धन चिह्नों द्वारा दर्शाए गए) में दिखाई देते हैं।

कोड परिवर्तन

अंत में, हमारा अंतर हमारे कोड में किए गए परिवर्तनों . की एक सूची देता है . एक पूर्ण फ़ाइल तुलना के विपरीत, अंतर केवल एक फ़ाइल के उन अनुभागों को दिखाता है जिन्हें बदल दिया गया है। हमारे उदाहरण में, हमने अपनी फ़ाइल में एक पंक्ति जोड़ी है, जो निम्न परिणाम लौटाती है:

@@ -1 +1,2 @@ यह Git diff फीचर का एक उदाहरण है।+हमने इस लाइन को अपनी फाइल में अभी जोड़ा है।

पहली पंक्ति हमारी फ़ाइल में किए गए परिवर्तनों का सारांश है। यह हमें बताता है कि हमने दूसरी लाइन (2) से शुरू होकर अपनी फाइल (+1) में कोड की एक लाइन जोड़ दी है।

फिर, हमें किए गए परिवर्तनों की एक सूची दिखाई जाती है। जैसा कि आप देख सकते हैं, क्योंकि हमने लाइन "हमने अभी इस लाइन को अपनी फाइल में जोड़ा है।", वह लाइन हमारे डिफ में दिखाई देती है। धन चिह्न हमें बताता है कि हमने उस पंक्ति को फ़ाइल में जोड़ दिया है।

निष्कर्ष

गिट में डिफिंग एक उपयोगी कार्य है जो आपको दो फाइलों, शाखाओं की तुलना करने की अनुमति देता है, या एक गिट भंडार में काम करता है। यह आपको यह देखने की अनुमति देता है कि आपके भंडार में एक निश्चित बिंदु के बाद से क्या परिवर्तन किए गए हैं।

इस ट्यूटोरियल ने गिट के साथ अंतर करने की मूल बातें और एक अलग ऑपरेशन करने के लिए गिट डिफ कमांड का उपयोग कैसे करें, इस पर चर्चा की। अब आप एक विशेषज्ञ की तरह git diff कमांड का उपयोग शुरू करने के लिए आवश्यक ज्ञान से लैस हैं!

Git पर अधिक सीखने के संसाधनों के लिए, हमारा How to Learn Git गाइड देखें।


  1. गिट चेरी पिक:एक चरण-दर-चरण मार्गदर्शिका

    शुरुआती डेवलपर्स के रूप में, हम केवल दोहराव के माध्यम से गिट सीखते हैं। हम जल्दी से सीखते हैं कि git pull, git push, और git हर तरह से क्या करते हैं। जैसे-जैसे हम बड़ी परियोजनाओं पर काम करने और टीमों के साथ सहयोग करने के लिए संक्रमण करते हैं, हम अधिक उन्नत git कमांड सीखना शुरू करते हैं जो हमारे कोडबे

  1. Git Add करने के लिए चरण-दर-चरण मार्गदर्शिका

    गिट ऐड कमांड स्टेजिंग एरिया में फाइल या फोल्डर जोड़ता है। स्टेजिंग क्षेत्र में फ़ाइलें वे हैं जिन्हें आप अपनी अगली प्रतिबद्धता में जोड़ना चाहते हैं। गिट ऐड आपके भंडार या फाइलों को संशोधित या अन्यथा प्रभावित नहीं करता है। गिट संस्करण नियंत्रण प्रणाली में एक साधारण बचत सुविधा नहीं है। गिट कमिटिंग न

  1. SQL तालिका बनाएँ:कैसे-कैसे मार्गदर्शन करें

    SQL CREATE TABLE स्टेटमेंट डेटाबेस में एक टेबल जोड़ता है। इस कथन का उपयोग करके, आप नई तालिका में कॉलम के नाम और प्रत्येक कॉलम द्वारा संग्रहीत डेटा के प्रकार निर्दिष्ट कर सकते हैं। आप तालिका में डेटा का प्रतिनिधित्व करने के तरीके से संबंधित किन्हीं बाधाओं को भी बता सकते हैं। किसी डेटाबेस में क्वेरी