Refspec का उपयोग करके आप Git टैग को शाखा में कैसे धकेलेंगे?


216

मैं जोर जबरदस्ती करना चाहता हूं, उदाहरण के लिए, मेरा टैग 1.0.0मेरी दूरस्थ masterशाखा को।

अब मैं निम्नलिखित कर रहा हूं:

git push production +1.0.0:master

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

मैं क्या गलत कर रहा हूं?

अपडेट # 1

जब मैं अपने सर्वर में SSH करता हूं, जहां मेरी Git रिपॉजिटरी होती है और निष्पादित होती है git branch -l, तो मैं masterशाखा को सूचीबद्ध नहीं देखता ।

अद्यतन # 2

git tag -lदूरस्थ गिट रिपॉजिटरी के अंदर से चलने के बाद , मुझे लगता है कि masterसूचीबद्ध है, जिसका अर्थ है कि जब मैं निम्नलिखित भाग गया:

git push production 1.0.0:master

इसने वास्तव में टैग को आगे बढ़ाया और एक नई शाखा के बजाय एक टैग बनायाmaster

मैं मूल रूप से दूरस्थ गिट रिपॉजिटरी की शाखा में टैग की सामग्री को आगे बढ़ाना चाहता हूं ।1.0.0master


क्या आप स्पष्ट कर सकते हैं कि "काम नहीं करने" का क्या मतलब है? क्या Git एक विशिष्ट त्रुटि देता है, या क्या इसका कोई बुरा प्रभाव पड़ता है?
vcsjones 1

मुझे माफ कर दो। हां, इसलिए मूल रूप से जब मैं एसएसएच को अपने सर्वर में, गिट रिपॉजिटरी में, और शाखाओं को सूचीबद्ध करने के लिए गिट ब्रांच -l चलाता हूं, तो मैं केवल अपनी दूसरी शाखा देखता हूं। हालांकि, git पुश उत्पादन +1.0.0: मास्टर ने पुश किया, जब मैंने फिर से पुश किया तो सब कुछ अप-टू-डेट कहता है , लेकिन मुझे दूरस्थ सर्वर पर मास्टर शाखा दिखाई नहीं देती है।
माइकल वैन रूइजेन

5
आपको स्वीकृत उत्तर को बदलना चाहिए। दूसरा उत्तर जितना स्वीकार किया गया है, उससे बहुत सरल है।
पेड्रो रोलो

देरी से जवाब देने के लिए माफी। मैं सहमत हूं और अब स्वीकार किए गए उत्तर को बदल दिया है।
माइकल वैन रूइजेन

1
@MichaelvanRooijen मुझे समझ नहीं आ रहा है कि आपने जो चुना जवाब वास्तव में इस समस्या का हल है। यह एक टैग के साथ एक शाखा को अधिलेखित नहीं करता है, यह सिर्फ आपके टैग को रिमोट में धकेलता है।

जवाबों:


61

यह शायद विफल हो रहा है क्योंकि 1.0.0एक एनोटेट टैग है। शायद आपने निम्न त्रुटि संदेश देखा:

त्रुटि: शाखा रेफरी / प्रमुख / मास्टर को गैर-प्रतिबद्ध वस्तु लिखने की कोशिश करना

एनोटेटेड टैग्स का अपना अलग प्रकार का ऑब्जेक्ट होता है जो टैग की गई कमिट ऑब्जेक्ट को इंगित करता है। शाखाएँ वस्तुओं को टैग करने के लिए उपयोगी रूप से इंगित नहीं कर सकती हैं, केवल वस्तुओं को कमिट कर सकती हैं। आपको ऑब्जेक्ट को कमिट करने और इसके बजाय पुश करने के लिए एनोटेट टैग को "छील" करने की आवश्यकता है।

git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand

एक और वाक्यविन्यास है जो इस मामले में भी काम करेगा, लेकिन इसका मतलब थोड़ा अलग है अगर टैग ऑब्जेक्ट एक कमिट (या एक टैग ऑब्जेक्ट की ओर इशारा करता है जो किसी अन्य चीज़ की ओर इशारा करता है (एक टैग ऑब्जेक्ट जो एक को इंगित करता है ...) एक कमिट) ।

git push production +1.0.0^{}:master

इन टैग छीलने वाक्यविन्यासों को निर्दिष्ट संशोधनों के तहत git-Rev-parse (1) में वर्णित किया गया है ।


1
इससे समस्या हल हो गई! हालांकि मास्टर ब्रांच को पहले से मौजूद होना चाहिए। हालांकि यह मेरे अंत में एक मुद्दा नहीं है। आपकी सहायता के लिए धन्यवाद!
माइकल वैन रूइजेन

2
@ मिचेल: आह। हां, यदि मास्टर मौजूद नहीं है (एक शाखा या एक टैग के रूप में), तो एक शाखा के बजाय मास्टरgit push rep +tag:master नाम का एक टैग बनाएगा । (फिर, जब मास्टर एक शाखा या एक टैग के रूप में मौजूद नहीं होता है) "त्रुटि के साथ विफल हो जाएगा: अयोग्य गंतव्य को धक्का देने में असमर्थ"। वह कमांड जो आप चाहते थे (किसी भी मास्टर ब्रांच / टैग मौजूद होने से पहले ) है ( यह नामस्थान है जिसके तहत शाखाएं संग्रहीत हैं)। git push rep +tag~0:mastergit push rep +tag~0:refs/heads/masterrefs/heads/
क्रिस जॉन्सन

महान! वह मुझे आश्चर्यजनक रूप से अच्छी तरह से आउट करने में मदद करेगा। बहुत ही सुविधाजनक! उस जानकारी को पोस्ट करने के लिए बहुत बहुत धन्यवाद।
माइकल वैन रूइजेन

4
@ ब्रैड: ~{commit}वाक्य-विन्यास शाब्दिक है (अर्थात हमेशा उन नौ वर्णों का); शब्द commitयहाँ प्लेसहोल्डर नहीं है।
क्रिस जॉन्सन

1
आह अच्छा! क्षमा करें, मैं सोच रहा था कि आप विशेष रूप से प्रतिबद्ध हैं, अब अधिक समझ में आता है।
ब्रैड

469
git push --tags production

4
यदि टैग पहले से ही रिमोट पर मौजूद है, तो आपको पहले रिमोट टैग को हटाना होगा git push production :1.0.0
सम्मान .कोड

1
अगर किसी भी अवसर पर आपके पास एक ही नाम की शाखा होगी: '1.0.0' तो यह धक्का इतना बेहतर उपयोग विफल हो जाएगा: git push production :refs/tags/1.0.0केवल टैग हटाने के लिए
व्लादिमीर

1
@ Nerian: मुझे लगता है कि यह सिर्फ टैग्स को धक्का देता है
bstpierre

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

1
क्या यह सवाल नहीं है कि एक टैग को कैसे आगे बढ़ाया जाए ? यह आदेश एक पूरी बहुत कुछ करता है।
क्रिस मार्टिन

61

मैं इस तरह का टैग बनाता हूं और फिर मैं इसे GitHub में धकेल देता हूं:

git tag -a v1.1 -m "Version 1.1 is waiting for review"
git push --tags

Counting objects: 1, done.
Writing objects: 100% (1/1), 180 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1

4
यह आपके सभी टैग
दाविद डॉर्जड

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

10

एक टैग को आगे बढ़ाने के लिए: git push <reponame> <tagname>

उदाहरण के लिए, git push production 1.0.0। टैग शाखाओं के लिए बाध्य नहीं हैं, वे कमिट करने के लिए बाध्य हैं।

जब आप मास्टर शाखा में टैग की सामग्री रखना चाहते हैं, तो स्थानीय रूप से अपनी मशीन पर ऐसा करें। मुझे लगता है कि आप अपने स्थानीय मास्टर शाखा में विकसित करना जारी रखेंगे। तो बस एक git push origin masterपर्याप्त होना चाहिए।


5
ध्यान दें कि यह वास्तव में एक टैग के साथ एक शाखा को ओवरराइट करने के बारे में मूल पोस्टर की समस्या को हल नहीं करेगा, यह सिर्फ शाखाओं को प्रभावित किए बिना, आपके टैग को रिमोट से धक्का देगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.