2010-08-09 22 views
6

का उपयोग कर सीधे एक गिट टैग में क्लोन करने में असमर्थ मैं थोड़ा परेशान हूं कि मैं सीधे गिट क्लोन कमांड से टैग को चेकआउट करने में असमर्थ क्यों हूं। मैं क्या करने की कोशिश है:-b <tagname>

git clone -b mytag <url>/foo.git 

त्रुटि मैं मिलता है:

warning: Remote branch mytag not found in upstream origin, using HEAD instead 

टैग मौजूद है और जैसे

cd foo && git checkout mytag 

... अच्छी तरह से काम करता है।

यदि कोई भी इस बारे में कुछ प्रकाश साझा कर सकता है कि टैग में सीधे क्लोन करना असंभव क्यों है, तो मैं इसकी सराहना करता हूं। धन्यवाद।

+0

तो, आपके सवाल यह है: क्यों वह काम नहीं करता? या सबसे अच्छा कामकाज क्या है? – mb14

+0

मुझे लगता है कि अब दोनों प्रश्नों को समझाया गया है, हालांकि मुझे असंगतता थोड़ा उलझन में मिलती है। मैं इसे तब तक रखूंगा जब तक कि कुछ अन्य दृष्टिकोण न हों, तो मैं इसे बंद कर दूंगा। स्पष्टीकरण @ mb14, @simplyharsh, @VonC के लिए धन्यवाद! – grm

उत्तर

4

शायद आपको वास्तव में git archive का उपयोग करने के लिए git rev-parse कुछ भी टैरबॉल खींचने के लिए उपयोग करना है। आप विकल्प का उपयोग कुछ रिमोट स्रोत से संग्रह को खींचने के लिए <url>/foo.git मान पर कर सकते हैं जो आप क्लोन पर जा रहे हैं। सिद्धांत रूप में, यह बहुत तेज होगा क्योंकि आप हथियाने वाले सभी कामकाजी पेड़ हैं और पूरे भंडार नहीं हैं।

यहाँ उदाहरण "मेरे लिए काम करता है" एक है:

% git archive --prefix foo/ --remote <url>/foo.git my-tag | tar -xf - 
+0

मैं निश्चित रूप से उसमें देख लूंगा। क्लोनिंग का ऊपरी भाग शायद इसके लायक नहीं है। धन्यवाद। – grm

0

क्या आप गिट चेकआउट mytag के बाद detached head में हैं?

यह संभव है कि mytag के "refs/heads/" नामस्थान (ब्रश हेड के लिए) में नहीं है, लेकिन फिर भी एक वैध प्रतिबद्धता का संदर्भ है।

इससे git clone में चेतावनी की व्याख्या होगी, जबकि git checkout ठीक है।

+0

हां, मैं एक अलग सिर में हूं। मुझे यकीन नहीं है कि मैं इस मामले में गिट चेकआउट और गिट क्लोन के बीच अंतर को समझता हूं। एक एनोटेटेड टैग मदद करेगा? – grm

+0

@grm: नहीं इससे कोई फर्क नहीं पड़ता। गिट क्लोन-बी शाखा के लिए है। कोई भी अन्य रेफस्पेक एक 'गिट चेकआउट' के बावजूद पहुंच योग्य हो सकता है, लेकिन आप एक डिटेक्टेड हेड (अर्थात् आपको शाखा बनाने की आवश्यकता होगी) – VonC

0

-b एक शाखा को जांचने के लिए एक टैग नहीं है। यही कारण है कि यह दूरस्थ ब्रैंच नहीं मिला है ;-)

+0

खैर, गिट-चेकआउट भी इसे एक शाखा कहता है, लेकिन टैग पर काम करता है इसलिए मुझे लगता है सवाल मान्य है। – grm

+0

@grm मैं यह नहीं कह रहा कि प्रश्न अमान्य है, लेकिन सिर्फ सवाल का जवाब दे रहा है। हो सकता है कि उन्होंने इसे चेकआउट के लिए लागू किया है लेकिन क्लोन के लिए नहीं। टैग पर बीटीडब्ल्यू गिट चेकआउट-बी एक नई शाखा बनाते हैं, मुझे वास्तव में आश्चर्य नहीं हुआ है कि आप रिपो क्लोनिंग खत्म करने से पहले एक नई शाखा नहीं बना सकते हैं। – mb14

+0

AFAIK: किसी भी उदाहरण में कोई नई शाखा नहीं है। यह सिर्फ एक संदर्भ है। – grm

1

सीधे टैग में क्लोनिंग, मुझे इरादे से बुद्धिमान करता है।

लेकिन आप जिस कमांड का उपयोग कर रहे हैं, वास्तव में रिपोजिटरी की शाखा क्लोन करने के लिए उपयोग किया जाता है। तो आप वास्तव में भंडार से शाखा नाम mytag चेकआउट करने के लिए कह रहे हैं। mytag शाखा आपके रिमोट रिपोजिटरी में स्पष्ट रूप से नहीं है।

और मुझे नहीं लगता कि एक नए टैग में क्लोन करने का कोई सीधा तरीका है। आपको क्लोन करना होगा और फिर git fetch --tags $URL का उपयोग करके टैग को लागू करना होगा या रिमोट रिपॉजिटरी के टैग लाएंगे। प्रतिक्रिया पर

संपादित करें:

खैर, टैग से तैनाती एक आम उपयोग शैली है। कोड को आम तौर पर एक बार एक बड़े राज्य में टैग किया जाता है। एक बार जब आप रिमोट रिपोजिटरी से टैग क्लोन और लाएंगे तो आप mytag चेकआउट कर सकते हैं।

git checkout mytag 

या यहाँ तक कि

git checkout -b mytagbranch mytag 

और तैनाती जारी है।

+0

मैं सीधे टैग सिस्टम से तैनाती कर रहा हूं । – grm

संबंधित मुद्दे

 संबंधित मुद्दे