गिट में पुल और क्लोन के बीच अंतर क्या है?


237

(बाद mkdir repoऔर cd repo) करने में क्या अंतर है :

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

तथा

git clone git://github.com/cmcculloh/repo.git

मेरा मतलब है, जाहिर है कि एक छोटी है, लेकिन इसके अलावा वे मूल रूप से एक ही काम कर रहे हैं?

जवाबों:


122

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

क्लोन एक नई बनाई गई निर्देशिका में एक रिपॉजिटरी बनाता है, क्लोन रिपॉजिटरी में प्रत्येक शाखा के लिए रिमोट-ट्रैकिंग शाखाएं बनाता है (गिट शाखा -r का उपयोग करके दिखाई देता है), और एक प्रारंभिक शाखा बनाता है और चेक करता है जो क्लोन रिपॉजिटरी की वर्तमान सक्रिय शाखा से निकाली गई है।


10
git fetch --all अतिरिक्त दूरस्थ ट्रैकिंग शाखाएँ स्थापित करता है, इसलिए मूल रूप से वे समान हैं।
18cc में cmcculloh

251

git cloneयह है कि आपको काम करने के लिए मौजूदा भंडार की एक स्थानीय प्रतिलिपि कैसे मिलती है। यह आम तौर पर किसी दिए गए भंडार के लिए केवल एक बार उपयोग किया जाता है, जब तक कि आप इसके आसपास की कई कार्यशील प्रतियां नहीं रखना चाहते। (या अपने स्थानीय को गड़बड़ करने के बाद एक साफ प्रतिलिपि प्राप्त करना चाहते हैं ...)

git pull(या git fetch+ git merge) आप यह कैसे अपडेट करते हैं कि रिमोट रिपॉजिटरी से नए के साथ स्थानीय कॉपी मिलती है। यदि आप दूसरों के साथ सहयोग कर रहे हैं, तो यह एक कमांड है जिसे आप अक्सर चलाएंगे।

जैसा कि आपका पहला उदाहरण दिखाता है, git cloneअन्य git कमांड के वर्गीकरण के साथ अनुकरण करना संभव है , लेकिन यह वास्तव में ऐसा नहीं git pullहै जो "मूल रूप से एक ही चीज" git clone(या इसके विपरीत) कर रहा है।


4
क्या विशेष रूप से यह है कि git क्लोन कर रहा है जो "git पुल" को शामिल करने वाले आदेशों के अनुक्रम से पूरा नहीं हुआ है?
cmcculloh

21
@cmcculloh: कुछ भी नहीं - आप जिस क्रम का वर्णन करते हैं वह प्रभावी रूप से "गिट क्लोन" करता है। मुद्दा यह है कि "गिट पुल" का उपयोग विभिन्न चीजों को करने के लिए किया जाता है जो आपने वहां किया था - इस बात का उल्लेख नहीं करने के लिए कि "गिट पुल" वास्तव में "गिट लाने" का संयोजन है; गिट विलय <वर्तमान शाखा> <मूल / वर्तमान शाखा> "। IOW, आप क्लोन के बिना रह सकते हैं और खींच सकते हैं यदि आप वास्तव में चाहते थे। इसके अलावा, आप उन रिपॉजिटरी से अलग कर सकते हैं जिन्हें आपने क्लोन किया था। मैं 'क्लोन' के बारे में सोचना पसंद करता हूं, "मुझे उस रेपो की एक स्थानीय प्रतिलिपि बनाएं" और "पुल" के रूप में "मुझे कुछ निर्दिष्ट रिमोट से अपडेट प्राप्त करें।"
ईबेनेट

120

आम भाषा में हम कह सकते हैं:

  • क्लोन : दूरस्थ रिपॉजिटरी की एक कार्यशील प्रति प्राप्त करें।
  • खींचो : मैं इस पर काम कर रहा हूं, कृपया मुझे वे नए बदलाव लाएं जो दूसरों द्वारा अपडेट किए जा सकते हैं।

3
मुझे लगता है कि आपकी खींचने की परिभाषा क्लोन के
henrywright

10
आप उस चीज़ पर कैसे काम कर सकते हैं जिसे आपने क्लोन नहीं किया है?
ज्योति प्रकाश

मुझे समझ नहीं आ रहा है कि आपका क्या मतलब है?
henrywright

@henrywright आशा, Ebneter का उत्तर आपके प्रश्न को संबोधित करेगा
Mrk

41

git clone इसका मतलब है कि आप अपने सिस्टम में रिपॉजिटरी की एक प्रति बना रहे हैं।

git fork इसका मतलब है कि आप अपने गिथब खाते में भंडार की नकल कर रहे हैं।

git pull इसका मतलब है कि आप अंतिम संशोधित भंडार ला रहे हैं।

git push इसका मतलब है कि आप इसे संशोधित करने के बाद भंडार को वापस कर रहे हैं।

आम आदमी के कार्यकाल में:

git cloneडाउनलोड कर रहा है और git pullताज़ा कर रहा है।


9

क्लोन : दूरस्थ सर्वर रिपॉजिटरी को अपने स्थानीय मशीन पर कॉपी करना।

पुल : नए परिवर्तन प्राप्त करें जो आपके स्थानीय मशीन में जोड़े गए हैं।

यही अंतर है।

क्लोन का उपयोग आमतौर पर रिमोट रेपो कॉपी प्राप्त करने के लिए किया जाता है।

यदि आप टीमों में काम कर रहे हैं तो अन्य टीम साथियों को जोड़े गए कोड को देखने के लिए खींच का उपयोग किया जाता है।


5

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

गिट पुल मूल रूप से एक (क्लोन (डाउनलोड) + मर्ज) ऑपरेशन है और ज्यादातर जब आप टीम वर्क के रूप में काम कर रहे होते हैं। दूसरे शब्दों में, जब आप उस परियोजना में हाल के बदलाव चाहते हैं, तो आप खींच सकते हैं।


3

मिस क्लोन: मुझे स्थानीय की एक नई प्रति मिलती है।

श्री पुल: मेरे पास पहले से ही स्थानीय स्तर पर है, मैं अभी इसे अपडेट करता हूं।


मिस क्लोन: मैं वही कर सकता हूं जो आप करते हैं! तुम सिर्फ मेरे सबसेट हो।

श्री पुल: डिट्टो!


मिस क्लोन: नहीं, आप नहीं बनाते हैं। मैं यह करता हूं:

  1. खाली नंगे भंडार का निर्माण करें
  2. दूरस्थ ट्रैकिंग शाखाएँ आबाद करें
  3. तर्क के बिना git लाने के लिए चलाएँ

आप केवल # 3 करते हैं, और फिर आप विलय करते हैं, जिसे मुझे करने की आवश्यकता नहीं है (मेरा ताज़ा है)।

मिस्टर पुल: स्मार्टी पैंट, कोई बड़ी बात नहीं, मैं पहले "गिट इनिट" करूंगा! फिर हम वही हैं। इसके अलावा मेरे पास मौजूदा रेपो पर अतिरिक्त 'मर्ज' क्षमता है! जो मुझे Git में सबसे अधिक इस्तेमाल किया जाने वाला कमांड बनाता है;)


Git रचनाकारों: अपने घोड़ों श्री पुल पकड़ो, अगर --bare या --mirror का उपयोग क्लोन या init के साथ किया जाता है, तो आपका मर्ज नहीं होगा। यह केवल पढ़ने के लिए रहता है।


अधूरा जवाब।
साइनकोनाटा

2

हम्म, जब मैं खींचता हूं तो दूरस्थ शाखा "4.2" को देखने के लिए क्या याद आ रहा है, जैसा कि मैंने क्लोन करते समय किया है? कुछ स्पष्ट रूप से समान नहीं है।

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

बनाम

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

मैंने यह भी नोट किया, और मुझे संदेह है कि समय के साथ गिट डिफॉल्ट में बदलाव मुद्दा है। मेरे पास 1.9.5.msysgit on windows और 2.3.2-applegit-55 एक मैक पर है।
ऐनीएजाइल

2

git क्लोन URL ---> पूरा प्रोजेक्ट या रिपॉजिटरी एक अलग निर्देशिका के रूप में डाउनलोड किया जाएगा। और न केवल परिवर्तन git पुल URL ---> लाने + मर्ज -> यह केवल उन परिवर्तनों को प्राप्त करेगा जो किए गए हैं और संपूर्ण परियोजना नहीं है


1

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

और पढ़ें: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#ulling


1
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
इकाड

0

क्लोन -: यह आपके स्थानीय मशीन में आपके दूरस्थ रिपोजिटरी प्रोजेक्ट की बिल्कुल डुप्लिकेट कॉपी बनाएगा।

पुल -: मान लीजिए कि दो या दो से अधिक लोग एक ही रिपॉजिटरी को साझा कर रहे हैं। (मान लीजिए कि एक अन्य व्यक्ति का नाम स्याम है) (एक रिपॉजिटरी एक जगह है जहां आपका प्रोजेक्ट गितुब में मौजूद है) इसलिए यदि सियाम अपने स्थानीय में उसी परियोजना में कुछ बदलाव करता है और इसे दूरस्थ रिपॉजिटरी में धकेल देता है तो जो भी बदलाव होगा, उन परिवर्तनों को Syam करेगा। अपने स्थानीय में प्रतिबिंबित न करें। तो अपने स्थानीय में उन नए परिवर्तनों को प्रतिबिंबित करने के लिए आपको गिट पुल का उपयोग करना होगा। कुल मिलाकर हम परियोजना को अद्यतन करने के लिए गिट पुल का उपयोग करते हैं।

इसलिए मूल रूप से हम केवल एक बार गिट पुल का उपयोग करते हैं जबकि हम कई बार गिट पुल का उपयोग करते हैं।

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