गिट मैनुअल: टीम के साथ शांतिपूर्ण कैसे रहें

गड़बड़ टीम का चित्रण | स्रोत: Spongebob Squarepants

गिट मुश्किल है, पंगा लेना आसान है। ऐसी कई चीजें हैं जो आपको पता होनी चाहिए कि टीम के साथ प्रभावी ढंग से गिट का उपयोग कैसे करें। सौभाग्य से आप यहाँ हैं, मैं आपको टीम में काम करने में मदद करने के लिए आपको मैनुअल दिखाने वाला हूँ।

गिट क्या है?

सॉफ्टवेयर विकास के दौरान स्रोत कोड में परिवर्तन पर नज़र रखने के लिए Git एक स्वतंत्र और खुला स्रोत वितरित संस्करण नियंत्रण प्रणाली (DVCS) है। Git को गति और दक्षता के साथ छोटे से लेकर बहुत बड़े प्रोजेक्ट तक सब कुछ संभालने के लिए डिज़ाइन किया गया है।

बेसिक कमांड्स

मैं आपको अपनी टीम में योगदान देने में मदद करने के लिए कुछ बुनियादी आदेश दिखाऊंगा।

गिट इनिट

यदि आप एक नया स्थानीय भंडार बनाना चाहते हैं, तो आप निष्पादित कर सकते हैं:

गिट इनिट

फिर आपके पास एक ताज़ा और एकदम नया भंडार है। वहां से आप अपने नए रिपॉजिटरी में अपना कोड काम करना शुरू कर सकते हैं।

गिट क्लोन

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

गिट क्लोन 

गिट शाखा

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

गिट शाखा

अपनी रिपॉजिटरी में सभी शाखाओं को सूचीबद्ध करें। यह गिट शाखा - सूची का पर्याय है।

गिट शाखा 

नामक एक नई शाखा बनाएँ । यह नई शाखा की जाँच नहीं करता है।

git शाखा -d 

निर्दिष्ट शाखा को हटा दें। यह एक "सुरक्षित" ऑपरेशन है जिसमें गिट ने आपको शाखा को हटाने से रोका है अगर इसमें कोई बदलाव नहीं हुआ है।

गिट शाखा -D 

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

git शाखा -m 

वर्तमान शाखा का नाम बदलें ।

गिट शाखा-ए

सभी दूरस्थ शाखाओं की सूची बनाएं।

गिट चेकआउट

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

शाखाओं को स्विच करना एक सीधा ऑपरेशन है। निम्नलिखित को निष्पादित करना HEAD के सिरे को इंगित करेगा ।

गिट चेकआउट 

एक टीम के साथ सहयोग करते समय दूरस्थ रिपॉजिटरी का उपयोग करना आम है। इन रिपॉजिटरी को होस्ट और साझा किया जा सकता है या वे किसी अन्य सहयोगी की स्थानीय प्रति हो सकती हैं। प्रत्येक दूरस्थ रिपॉजिटरी में शाखाओं का अपना सेट शामिल होगा। किसी दूरस्थ शाखा की जांच करने के लिए आपको पहले शाखा की सामग्रियों को लाना होगा।

git fetch - लंबा

Git के आधुनिक संस्करणों में, आप फिर स्थानीय शाखा की तरह दूरस्थ शाखा की जांच कर सकते हैं।

गिट चेकआउट 

इसके अतिरिक्त, आप एक नई स्थानीय शाखा की जांच कर सकते हैं और इसे अंतिम प्रतिबद्ध के लिए दूरस्थ शाखाओं में रीसेट कर सकते हैं।

git checkout -b git रीसेट - भार उत्पत्ति /

दूरदराज के

केवल यह कहें कि आप अपनी टीम के प्रोजेक्ट को अपने ऑनलाइन रिपॉजिटरी में क्लोन करना चाहते हैं। GitHub या GitLab पर अपनी खुद की रिपॉजिटरी बनाने के बाद, आप अपने टीम प्रोजेक्ट के स्थानीय रिपॉजिटरी को अपने ऑनलाइन रिपॉजिटरी में धकेलना चाहते हैं। आपके पास अपने कनेक्शन की जांच करने के लिए आप इन आदेशों का उपयोग कर सकते हैं:

दूरदराज के

आपके पास अन्य रिपॉजिटरी के लिए दूरस्थ कनेक्शन की सूची बनाएं।

git रिमोट -v

उपरोक्त कमांड के समान, लेकिन प्रत्येक कनेक्शन का URL शामिल करें।

अब आप इन आदेशों का उपयोग करके अपने स्थानीय भंडार को अपने ऑनलाइन भंडार से जोड़ना चाहते हैं:

git रिमोट ऐड 

एक दूरस्थ रिपॉजिटरी में एक नया कनेक्शन बनाएं। रिमोट जोड़ने के बाद, आप उपयोग कर पाएंगे के लिए एक सुविधाजनक शॉर्टकट के रूप में अन्य Git कमांड में।

git सुदूर rm 

रिमोट रिपॉजिटरी नामक कनेक्शन को हटा दें ।

दूरस्थ नाम बदलें 

से दूरस्थ कनेक्शन का नाम बदलें सेवा ।

पकड़ खींचो

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

पकड़ खींचो

वर्तमान शाखा की निर्दिष्ट रिमोट कॉपी प्राप्त करें और तुरंत इसे स्थानीय कॉपी में मर्ज करें। यह गिट भ्रूण के समान है इसके बाद git मर्ज का मूल / ।

git खींचना -नो-कमिट करना

डिफ़ॉल्ट मंगलाचरण के समान, दूरस्थ सामग्री प्राप्त करता है लेकिन एक नया मर्ज कमिट नहीं बनाता है।

गिट पुल - क्रेबसे

पिछले पुल के रूप में समान, स्थानीय एक के साथ दूरस्थ शाखा को एकीकृत करने के लिए git मर्ज का उपयोग करने के बजाय git रिबास का उपयोग करें।

गिट पुल --verbose

एक पुल के दौरान वर्बोज़ आउटपुट देता है जो डाउनलोड की जा रही सामग्री और मर्ज विवरण प्रदर्शित करता है।

जोर का धक्का

आपके द्वारा अपने स्थानीय रिपॉजिटरी में बदलाव करने के बाद कोई फर्क नहीं पड़ता कि फाइलों पर कितना कम प्रभाव पड़ता है। ऑनलाइन रिपॉजिटरी में स्थानीय रिपॉजिटरी में आपके परिवर्तनों को "पुश" करने के लिए गिट पुश का उपयोग करें। Git पुश का उपयोग करके ऑनलाइन रिपॉजिटरी में धकेलने का मेरा डिफ़ॉल्ट तरीका है लेकिन git पुश कमांड में कई विकल्प हैं:

जोर का धक्का

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

git पुश --फोर्स

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

गिट पुश - लंबा

अपनी सभी स्थानीय शाखाओं को निर्दिष्ट रिमोट पर पुश करें।

git push --tags

जब आप किसी शाखा को धक्का देते हैं या --all विकल्प का उपयोग करते हैं तो टैग स्वचालित रूप से धकेल नहीं दिया जाता है। --Tags ध्वज दूरस्थ रिपॉजिटरी में आपके सभी स्थानीय टैग भेजता है।

git मर्ज

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

विलय से पहले | स्रोत: एटलसियन

यदि वे कोड को आपके काम के समान लाइनों में नहीं बदलते हैं, तो आप मर्ज कमांड का उपयोग करके अपनी शाखा को बिना किसी संघर्ष के प्राप्त कर सकते हैं

git चेकआउट मास्टर git मर्ज git शाखा -d
मर्ज होने के बाद | स्रोत: एटलसियन

अपनी शाखा को विलय करने के बाद सबसे अच्छा अभ्यास इसे सुरक्षित-हटाना है।

एक अन्य मामले में यदि उनका कोड आपके कोड के समान लाइनों में है और कोड अलग हैं, तो आप मर्ज-संघर्ष का सामना करेंगे। आपको अपनी शाखा को फिर से मर्ज करने से पहले संघर्ष को हल करना होगा।

git rebase

विलय के विकल्प के रूप में, आप निम्न आदेशों का उपयोग करके मास्टर शाखा में सुविधा शाखा को पुन: उपयोग कर सकते हैं:

git चेकआउट फीचर git rebase मास्टर

यह मास्टर शाखा के सिरे पर शुरू करने के लिए पूरी सुविधा शाखा को स्थानांतरित करता है, प्रभावी रूप से मास्टर में सभी नए कमिटों को शामिल करता है। लेकिन, मर्ज कमिटमेंट का उपयोग करने के बजाय, मूल शाखा में प्रत्येक कमिट के लिए एकदम नया कमिट बनाकर प्रोजेक्ट हिस्ट्री को री-राइट करता है।

हालांकि मर्ज इस तरह से सुविधा शाखा में एक नया मर्ज कमिट बनाते हैं:

सुविधा शाखा में मास्टर मर्ज | स्रोत: एटलसियन

Rebase फीचर ब्रांच के सभी कमेंट्स को लेटेस्ट मास्टर ब्रांच कमिटमेंट के लिए ले जा रहा है, क्योंकि यह बिल्कुल नया है

सुविधा शाखा को रिबेस मास्टर | स्रोत: एटलसियन

रिबासिंग का प्रमुख लाभ यह है कि आपको एक बहुत क्लीनर प्रोजेक्ट इतिहास मिलता है। सबसे पहले, यह git मर्ज द्वारा आवश्यक अनावश्यक मर्ज को समाप्त करता है। दूसरा, जैसा कि आप ऊपर दिए गए आरेख में देख सकते हैं, रिबासिंग भी पूरी तरह से रैखिक परियोजना के इतिहास का परिणाम है - आप किसी भी कांटे के बिना परियोजना की शुरुआत में सभी तरह की सुविधा के टिप का पालन कर सकते हैं।

git रिवर्ट

एक नई कमिट बनाकर कमेटियों को वापस लाना। यह परिवर्तनों को पूर्ववत करने का एक सुरक्षित तरीका है, क्योंकि इसमें प्रतिबद्ध इतिहास को फिर से लिखने का कोई मौका नहीं है। कई मामलों में, यदि आपकी सुविधा में अंतिम उत्पाद (मास्टर शाखा) में बग शामिल है, तो आपको तुरंत एक हॉटफ़िक्स करने की आवश्यकता है। आप इस स्थिति में git रिवर्ट का उपयोग कर सकते हैं।

उदाहरण के लिए, निम्न कमांड अंतिम प्रतिबद्ध करने के लिए 2 में निहित परिवर्तनों का पता लगाएगा, उन परिवर्तनों को पूर्ववत करने के लिए एक नई प्रतिबद्ध बनाएँ, और मौजूदा परियोजना पर नई प्रतिबद्ध से निपटें।

git चेकआउट हॉटफ़िट git रिवर्ट HEAD ~ 2

यह निम्नलिखित के रूप में कल्पना की जा सकती है:

रिवर्ट होने से पहले | स्रोत: एटलसियनके बाद वापस | स्रोत: एटलसियन

Git रिवर्ट कमांड एक आगे बढ़ने वाला पूर्ववत ऑपरेशन है जो पूर्ववत किए गए परिवर्तनों की एक सुरक्षित विधि प्रदान करता है। कमिटमेंट हिस्ट्री में डिलीट या अनाथ करने के बजाय, एक रिवर्ट एक नई कमिट बनाएगा जो निर्दिष्ट बदलावों को उलट देता है। Git revert काम खोने के संबंध में git रीसेट करने के लिए एक सुरक्षित विकल्प है।

जीआईटी की मार

git stash अस्थायी रूप से आपके काम की प्रतिलिपि में आपके द्वारा किए गए परिवर्तनों (या स्टैम्स) को बदल देता है ताकि आप कुछ और काम कर सकें, और फिर वापस आकर उन्हें बाद में फिर से लागू कर सकें। यदि आपको संदर्भ को जल्दी से स्विच करने और किसी अन्य चीज़ पर काम करने की आवश्यकता है, तो स्टैशिंग करना आसान है, लेकिन आप एक कोड परिवर्तन के माध्यम से मध्य मार्ग में हैं और प्रतिबद्ध होने के लिए तैयार नहीं हैं।

Git stash कमांड आपके अनक्माइज्ड बदलाव (दोनों चरणबद्ध और अस्थिर) लेता है, बाद में उपयोग के लिए उन्हें बचाता है, और फिर उन्हें आपकी वर्किंग कॉपी से बदल देता है। उदाहरण के लिए:

$ git स्थिति शाखा मास्टर में परिवर्तन के लिए प्रतिबद्ध: नई फ़ाइल: style.css कमिट के लिए मंचन नहीं किया गया: संशोधित: index.html $ git stash कार्य निर्देशिका और मास्टर पर अनुक्रमणिका स्थिति WIP सहेजा गया: 5002d47 हमारा नया होम चैट अब 5002d47 पर है हमारे नए होमपेज $ git स्थिति शाखा मास्टर को प्रतिबद्ध करने के लिए कुछ भी नहीं है, काम कर रहे पेड़ को साफ करें

इस बिंदु पर आप परिवर्तन करने के लिए स्वतंत्र हैं, नए कमिट बनाते हैं, शाखाएँ बदलते हैं, और कोई अन्य Git ऑपरेशन करते हैं; फिर वापस आकर जब आप तैयार हों तो अपना स्टाॅस फिर से लगायें। ध्यान दें कि स्टाट आपके गिट रिपॉजिटरी के लिए स्थानीय है; जब आप पुश करते हैं, तो स्टाफ़ को सर्वर में स्थानांतरित नहीं किया जाता है।

आप पहले से हटाए गए परिवर्तन को पॉप स्टैश पॉप के साथ बदल सकते हैं:

$ git स्थिति शाखा मास्टर को प्रतिबद्ध करने के लिए कुछ भी नहीं, कार्यशील पेड़ की सफाई $ git stash pop on शाखा मास्टर परिवर्तन के लिए प्रतिबद्ध है:
 नई फ़ाइल: style.css
बदलाव के लिए प्रतिबद्ध नहीं हैं:
 संशोधित: index.html
गिराया गया refs / stash @ {0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)

आपके स्लैश को रोकना आपके स्टैश से परिवर्तनों को हटा देता है और उन्हें आपकी कार्यशील प्रतिलिपि पर पुन: लागू करता है।

वैकल्पिक रूप से, आप अपनी वर्किंग कॉपी में बदलावों को फिर से लागू कर सकते हैं और उन्हें अपने स्टाट में git stash लागू करके रख सकते हैं:

$ git stash लागू होने के लिए शाखा मास्टर परिवर्तन पर प्रतिबद्ध है:
 नई फ़ाइल: style.css
बदलाव के लिए प्रतिबद्ध नहीं हैं:
 संशोधित: index.html

यदि आप एक से अधिक शाखाओं में एक ही स्टैक्ड परिवर्तन लागू करना चाहते हैं तो यह उपयोगी है।

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

समापन

मुझे उम्मीद है कि इस लेख ने आपको गिट को समझने और परियोजनाओं में अपनी टीमवर्क में सुधार करने के लिए और अधिक ज्ञान दिया। मिलते हैं अगले लेख में! पढ़ने के लिए धन्यवाद!

अतिरिक्त संसाधन

  • एटलसियन | गिट ट्यूटोरियल