"Git रिमोट ऐड ..." और "git पुश ओरिजनल मास्टर" क्या है?


288

काफी बार, गिट और रेल जादू की तरह दिखता है ... जैसे कि रेल 3 ट्यूटोरियल पुस्तक के पहले अध्याय में , यह जीआईसी के बारे में बात करता है:

git remote add origin git@github.com:peter/first_app.git
git push origin master

और यह बहुत ज्यादा कहता है कि "यह सिर्फ काम करता है" बिना यह कहे कि वे क्या हैं और ब्रांचिंग के बारे में बात करना शुरू कर देते हैं। नेट शो पर खोज करना, git remote addजो "संक्षिप्त नाम" जोड़ना है, जैसे कि origin, और यह किसी भी नाम के साथ हो सकता है, जो URL के लिए उपनाम की तरह है। और originसामान्य रास्ता है जहाँ दूरस्थ रेपो इंगित करता है। ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes के तहत "रिमोट रिपोजिटरी जोड़ना")

तो URL क्यों है, git://git@github.com/peter/first_app.gitलेकिन दूसरे सिंटैक्स में नहीं है - यह क्या सिंटैक्स है? इसे क्यों समाप्त करना चाहिए .git? मैं .gitअंत में उपयोग नहीं करने की कोशिश की और यह भी काम करता है। यदि नहीं .git, तो और क्या हो सकता है? gitमें git@github.comGit सर्वर पर एक उपयोगकर्ता खाते हो रहा है?

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

कभी-कभी यह स्पष्टीकरण के बिना बहुत सारे जादू की तरह लगता है ... और कभी-कभी इसका उपयोग करने वाला व्यक्ति इतना आत्मविश्वास होता है और जब पूछा जाता है कि, यह क्यों नहीं समझा सकता है, और "वह जिस तरह से है" जैसी किसी चीज के साथ प्रतिक्रिया करता है। कभी-कभी बहुत व्यावहारिक और व्यावहारिक। व्यावहारिक होना बुरा नहीं है, लेकिन शायद इस बात के लिए व्यावहारिक नहीं है कि क्या चल रहा है।

जवाबों:


344

gitUNIX की तरह है। उपयोगकर्ता के अनुकूल लेकिन अपने दोस्तों के बारे में picky। यह शेल पाइपलाइन के रूप में शक्तिशाली और उपयोगकर्ता के अनुकूल है।

यह कहा जा रहा है, एक बार जब आप इसके प्रतिमानों और अवधारणाओं को समझ लेते हैं, तो इसमें समान स्पष्टता होती है कि मैं UNIX कमांड लाइन टूल्स से उम्मीद करता हूं। ऑनलाइन उपलब्ध कई अच्छे git ट्यूटोरियल्स में से किसी एक को पढ़ने के लिए आपको कुछ समय निकालने पर विचार करना चाहिए। प्रो गिट बुक शुरू करने के लिए एक अच्छी जगह है।

अपने पहले प्रश्न का उत्तर देने के लिए।

  1. क्या है git remote add ...

    जैसा कि आप शायद जानते हैं, gitएक वितरित संस्करण नियंत्रण प्रणाली है। ज्यादातर ऑपरेशन स्थानीय स्तर पर किए जाते हैं। बाहरी दुनिया के साथ संवाद करने के लिए, gitजो कहा जाता है उसका उपयोग करता है remotes। ये आपकी स्थानीय डिस्क पर एक के अलावा अन्य रिपॉजिटरी हैं जिन्हें आप pushअपने परिवर्तनों में बदल सकते हैं (ताकि अन्य लोग उन्हें देख सकें) या pull(ताकि आप अन्य परिवर्तन प्राप्त कर सकें)। कमांड git remote add origin git@github.com:peter/first_app.gitएक नया रिमोट बनाता है जिसे कहा जाता originहै git@github.com:peter/first_app.git। एक बार जब आप ऐसा करते हैं, तो आपके पुश कमांड्स में, आप originपूरे URL को टाइप करने के बजाय पुश कर सकते हैं ।

  2. क्या है git push origin master

    यह एक आदेश है जो कहता है कि "स्थानीय शाखा का नाम masterरिमोट के नाम से करें origin।" एक बार यह निष्पादित हो जाने पर, आपके द्वारा मूल के साथ सिंक्रनाइज़ किए गए सभी सामान को दूरस्थ रिपॉजिटरी में भेज दिया जाएगा और अन्य लोग उन्हें वहां देख पाएंगे।

अब ट्रांसपोर्ट के बारे में (अर्थात क्या git://) का मतलब है। दूरस्थ रिपॉजिटरी URL कई प्रकार ( file://, https://आदि) के हो सकते हैं। Git बस अनुमतियों और सामान की देखभाल के लिए परिवहन द्वारा प्रदान किए गए प्रमाणीकरण तंत्र पर निर्भर करता है। इसका मतलब यह है कि file://URL के लिए, यह UNIX फ़ाइल अनुमतियाँ होगी, आदि इस git://योजना को git को अपने स्वयं के आंतरिक परिवहन प्रोटोकॉल का उपयोग करने के लिए कह रहा है, जो चारों ओर git परिवर्तनों को भेजने के लिए अनुकूलित है। सटीक URL के लिए, यह वह तरीका है जिस तरह से github ने अपना gitसर्वर स्थापित किया है।

अब वाचालता। आपके द्वारा लिखी गई कमांड सामान्य है। यह कुछ इस तरह बताना संभव है जैसे " masterयहाँ पर बुलाई गई शाखा शाखा का स्थानीय दर्पण है जिसे fooरिमोट कहा जाता है bar"। गिट स्पीक में, इसका मतलब है कि master ट्रैक्स bar/foo । जब आप पहली बार क्लोन करते हैं, तो आपको स्थानीय शाखा masterऔर originमूल पर मास्टर को ट्रैक करने के लिए सेट के साथ रिमोट (जहां आप से क्लोन किया जाता है) नामक एक शाखा मिलेगी । एक बार यह सेट हो जाने के बाद, आप बस कह सकते हैं git pushऔर यह कर देगा। यदि आपको इसकी आवश्यकता है, तो लंबी कमांड उपलब्ध है (उदाहरण के git pushलिए आधिकारिक सार्वजनिक रिपो git push review masterको धक्का दे सकता है और इसे एक अलग रिमोट पर पुश करने के लिए उपयोग किया जा सकता है जो आपकी टीम कोड की समीक्षा करने के लिए उपयोग करती है)। आप अपनी शाखा को ट्रैकिंग शाखा का उपयोग करके सेट कर सकते हैं--set-upstreamgit branchकमांड का विकल्प ।

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


8
आप यह बताता है कि परिवहन के बारे में अपने पैराग्राफ में एक नोट जोड़ने के लिए चाहते हो सकता है git@github.com:peter/first_app.gitहै scpGit में ssh यूआरएल के लिए शैली वाक्य रचना। एक अन्य बिंदु यह है कि डिफ़ॉल्ट रूप से, अपस्ट्रीम कॉन्फ़िगरेशन तब तकmaster व्यवहार को प्रभावित नहीं करता है git push जब तक कि आपने (या बाद के संस्करणों में) push.defaultसेट नहीं किया है - मैंने भ्रम के इस स्रोत के बारे में एक ब्लॉग पोस्ट किया था: longair.net/blog/2011 / ०२ / २… /…trackingupstream
मार्क लॉन्गेयर

1
उस टिप्पणी के लिए एक छोटा सा सुधार - push.defaultअपस्ट्रीम कॉन्फ़िगरेशन के बिना जब आप उपयोग करते हैं तो डिफ़ॉल्ट रिमोट को खोजने के लिए उपयोग किया जाएगा git push, लेकिन रीफ़ की मैपिंग को प्रभावित नहीं करेगा।
मार्क लोंगेयर

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

3
एप्रोपोस ब्लैक बॉक्सन बनाम अंदर बाहर। Git पहली चीज है जिसका मैंने सामना किया है जो वास्तव में "इंटरफ़ेस" के बजाय अंदर से सीखना आसान था । यह सही तरीका है या नहीं यह बहस का मुद्दा है। मैं सिर्फ इतना कह रहा हूं कि जब बात आती है तो अंदर से ज्यादा प्रभावी होती है।
नौफाल इब्राहिम

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

41

अद्यतन: ध्यान दें कि वर्तमान में स्वीकृत उत्तर के व्यवहार के बारे में एक आम गलतफहमी है git push, जो एक टिप्पणी के बावजूद इसे ठीक नहीं किया गया है।

आपका क्या है इसका सारांश - एक रिपॉजिटरी के URL के लिए एक उपनाम की तरह - सही है।

तो URL जीआईटी क्यों नहीं करता है: //git@github.com/peter/first_app.it लेकिन दूसरे सिंटैक्स में - क्या वाक्यविन्यास है? इसे क्यों समाप्त करना चाहिए। मैं अंत में .it का उपयोग नहीं करने की कोशिश की और यह भी काम करता है। यदि नहीं ।संगीत नहीं तो और क्या हो सकता है? शुरुआत में git, git सर्वर पर एक उपयोगकर्ता खाता प्रतीत होता है?

आपके द्वारा उल्लेखित दो URL यह दर्शाते हैं कि दो अलग-अलग परिवहन प्रोटोकॉल का उपयोग किया जाना चाहिए। इसके साथ शुरुआत git://git प्रोटोकॉल के लिए है, जो आमतौर पर केवल-रिपॉजिटरी तक केवल पढ़ने के लिए उपयोग किया जाता है। अन्य एक, git@github.com:peter/first_app.gitएसएसएच पर एक रिपॉजिटरी तक पहुंच निर्दिष्ट करने के विभिन्न तरीकों में से एक है - यह प्रलेखन में वर्णित "एसपीपी-शैली सिंटैक्स" है । यह कि स्‍कैप-शैली के सिंटैक्स में उपयोगकर्ता नाम gitइस तरह से है कि GitHub उपयोगकर्ताओं की पहचान करने से संबंधित है - अनिवार्य रूप से उस उपयोगकर्ता नाम को अनदेखा किया जाता है, और उपयोगकर्ता की पहचान SSH की-जोड़ी के आधार पर की जाती है जिसे वे प्रमाणित करते थे।

की वर्बोसिटी के लिए git push origin master, आपने देखा है कि पहले पुश के बाद, आप बस कर सकते हैं git push। यह मुश्किल-से-याद करने की एक श्रृंखला के कारण है, लेकिन आम तौर पर सहायक चूक है :)

  • यदि कोई रिमोट निर्दिष्ट नहीं है, तो वर्तमान शाखा ( remote.master.urlआपके मामले में) के लिए कॉन्फ़िगर किया गया रिमोट उपयोग किया जाता है। यदि वह सेट नहीं है, तो originइसका उपयोग किया जाता है।
  • यदि कोई "refspec" (जैसे master, master:my-experimentइत्यादि) निर्दिष्ट नहीं है, तो हर स्थानीय शाखा को पुश करने के लिए डिफॉल्ट करें, जिसका रिमोट पर एक शाखा के समान नाम है। यदि आपके पास masterअपनी रिपॉजिटरी और रिमोट के बीच आम तौर पर एक शाखा है , तो यह आपके masterरिमोट को पुश करने के समान होगी master

व्यक्तिगत रूप से, चूंकि मेरे पास कई विषय शाखाएं हैं (और अक्सर कई उपाय) मैं हमेशा फॉर्म का उपयोग करता हूं:

git push origin master

... अन्य शाखाओं को गलती से धकेलने से बचने के लिए।


अन्य उत्तरों में से एक पर आपकी टिप्पणी के जवाब में, यह मेरे लिए ऐसा लगता है जैसे कि ऊपर-नीचे तरीके से गिट के बारे में बहुत प्रभावी ढंग से सीख रहे हैं - आपने पाया है कि चूक काम करती है, और आपका प्रश्न इस बारे में क्यों पूछ रहा है;) अधिक गंभीर हो सकता हैएसवीएन के रूप में अनिवार्य रूप से इस्तेमाल किया जा सकता है, लेकिन रीमोट और शाखाओं के बारे में थोड़ा जानने का मतलब है कि आप इसे और अधिक लचीले ढंग से उपयोग कर सकते हैं और यह वास्तव में आपके बेहतर काम करने के तरीके को बदल सकता है। एक सेमेस्टर कोर्स के बारे में आपकी टिप्पणी ने मुझे कुछ सोचने के लिए प्रेरित किया। स्कॉट चाकोन ने पॉडकास्ट साक्षात्कार में कहा - छात्रों को कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग में सभी प्रकार के बुनियादी उपकरणों के बारे में पढ़ाया जाता है, लेकिन बहुत कम संस्करण नियंत्रण। डिस्ट्रीब्यूटेड वर्जन कंट्रोल सिस्टम जैसे git और Mercurial अब इतने महत्वपूर्ण हैं, और इतने लचीले हैं, कि लोगों को अच्छी ग्राउंडिंग देने के लिए उन पर टीचिंग कोर्स करना सही रहेगा।

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

  • गिट के लिए प्राथमिक प्रलेखन नए लोगों के लिए पार्स करना बहुत कठिन है। (हालांकि मैं तर्क दूंगा कि यदि आप लगभग किसी भी git प्रश्न के लिए Google, सहायक ट्यूटोरियल सामग्री (या स्टैक ओवरफ्लो उत्तर :)) आजकल उठा रहे हैं।)
  • जीआईटी में कुछ अजीब व्यवहार हैं जो अब बदलना मुश्किल है क्योंकि कई लिपियां उन पर भरोसा कर सकती हैं, लेकिन लोगों को भ्रमित कर रही हैं।

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

@ नौफ़ल इब्राहिम: मैं आपकी सभी बातों पर सहमत हूं। मैं git वाले पर "मैपिंग" एसवीएन अवधारणाओं को सुझाने की कोशिश नहीं कर रहा था, क्योंकि मुझे पता है कि भयानक भ्रम का कारण बन सकता है - ऊपर-नीचे से गिट को पढ़ाने के बेहतर तरीके हैं, हालांकि।
मार्क लोंगेयर

9

रिमोट रेपो जोड़ने के लिए सिंटैक्स पर एक नज़र है।

git remote add origin <url_of_remote repository>

उदाहरण:

git remote add origin git@github.com:peter/first_app.git

आइए हम आज्ञा को भंग करें:

git रिमोट यह आपके git रिपॉजिटरी की मेजबानी के लिए अपने केंद्रीय सर्वर को प्रबंधित करने के लिए उपयोग किया जाता है।

हो सकता है कि आप अपने केंद्रीय भंडार सामान के लिए जीथब का उपयोग कर रहे हों । मैं आपको एक उदाहरण दूंगा और git रिमोट ऐड ओरिजिन कमांड को समझाऊंगा

मान लीजिए कि मैं git रिपॉजिटरी के लिए केंद्रीय सर्वर के लिए GitHub और BitBucket के साथ काम कर रहा हूं और मेरी पहली ऐप परियोजना के लिए दोनों वेबसाइटों पर रिपॉजिटरी बनाई है ।

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

गिटहब के लिए

git remote add gh_origin https://github.com/user/first-app-git.git

और बिटबकेट के लिए

git remote add bb_origin https://user@bitbucket.org/user/first-app-git.git

मैंने दो चर का उपयोग किया है (जहाँ तक मेरे लिए उन्हें चर कहना आसान है) gh_origin (gh FOR GITHUB) और bb_origin (bb for BITBUCKET) बस आपको यह समझाने के लिए कि हम जो कुछ भी चाहते हैं उसे मूल रूप से कह सकते हैं।

अब कुछ बदलाव करने के बाद मुझे इन सभी परिवर्तनों को केंद्रीय रिपॉजिटरी में भेजना (धक्का देना) होगा ताकि अन्य उपयोगकर्ता इन परिवर्तनों को देख सकें। इसलिए मैं फोन करता हूं

गिटहब को धक्का

git push gh_origin master

बिटकॉइन को पुश करना

git push bb_origin master

gh_origin का मूल्य मान है https://github.com/user/first-app-git.git और bb_origin https का मान रख रहा है : //user@bitbucket.org/user/first-app-it.it

यह दो चर मेरे जीवन को आसान बना रहे हैं

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

ज्यादातर बार आप कुछ भी नहीं देखते हैं केवल उत्पत्ति के अलावा कुछ भी देखते हैं , उदाहरण के लिए आप केवल एक केंद्रीय भंडार जैसे कि गितुब या बिटबकेट से निपटेंगे।


5
  1. .gitभंडार नाम के अंत में सिर्फ एक सम्मेलन है। आमतौर पर, जीआईटी सर्वरों पर रिपॉजिटरी का नाम निर्देशिकाओं में रखा जाता है project.git। गिट क्लाइंट और प्रोटोकॉल project.gitकेवल projectनिर्दिष्ट होने पर परीक्षण के लिए इस सम्मेलन का सम्मान करते हैं ।

  2. git://git@github.com/peter/first_app.gitमान्य git url नहीं है। git रिपॉजिटरी को यहां निर्दिष्ट विभिन्न url योजनाओं के माध्यम से पहचाना और एक्सेस किया जा सकता हैgit@github.com:peter/first_app.git है sshयूआरएल उस पृष्ठ पर उल्लेख किया है।

  3. gitलचीला है। यह आपको किसी भी भंडार के लगभग किसी भी शाखा के खिलाफ अपनी स्थानीय शाखा को ट्रैक करने की अनुमति देता है। जबकि master(आपकी स्थानीय डिफ़ॉल्ट शाखा) ट्रैकिंग origin/master(दूरस्थ डिफ़ॉल्ट शाखा) एक लोकप्रिय स्थिति है, यह सार्वभौमिक नहीं है। कई बार आप ऐसा नहीं करना चाहते होंगे। यही कारण है कि पहली git pushइतनी क्रिया है। यह बताता है कि स्थानीय masterशाखा के साथ क्या करना है जब आप एक git pullया एक करते हैं git push

  4. डिफ़ॉल्ट git pushऔर git pullवर्तमान शाखा के रिमोट के साथ काम करना है। यह मूल स्वामी की तुलना में बेहतर डिफ़ॉल्ट है। जिस तरह से गिट पुश यह निर्धारित करता है यहां बताया गया है

git काफी सुंदर और समझदार है, लेकिन वहाँ से गुजरने के लिए सीखने की अवस्था है।


1
जैसा कि मैंने दूसरे उत्तर पर टिप्पणी की थी, git के डिफ़ॉल्ट कॉन्फ़िगरेशन में, git pushसेट अप करने के git branch/checkout --trackलिए कौन से दूरस्थ रेफरी को पुश करने के लिए निर्धारित कॉन्फ़िगरेशन चर का उपयोग नहीं करता है। आप सही कह रहे हैं कि गिट पुल इन का उपयोग करता है, हालांकि।
मार्क लोंगेयर

0

Git रिमोट ऐड मूल:

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

Git हब के रिमोट url का उपयोग करके अपने कोड को git रिपॉजिटरी में पुश करता है।

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