एक साथ हिट और टैग पुश


387

मैं इस कारण से अवगत हूं कि git push --tagsसादे पुराने के लिए एक अलग ऑपरेशन है git push। पुशिंग टैग एक सचेत विकल्प होना चाहिए क्योंकि आप गलती से किसी को धक्का नहीं देना चाहते हैं। कोई बात नहीं। लेकिन क्या दोनों को एक साथ आगे बढ़ाने का एक तरीका है? (इसके अलावा git push && git push --tags)


4
आपकी समस्या क्या है git push && git push --tags?
फ़ज

21
विशेष रूप से कुछ भी नहीं, यह सिर्फ धीमा है क्योंकि कनेक्शन को दो बार स्थापित किया जाना है।
विल रॉबर्टसन

16
नीचे मेरा अद्यतन उत्तर देखें: --follow-tagsgit 1.8.3 के बाद से एक नया विकल्प है
VonC

24
इनको अलग से न करने का एक और कारण है, एक ही प्रतिबद्ध के लिए दो CI बिल्ड को ट्रिगर करने से बचना, जब आपके पास उस तरह का ऑटोमेशन हो।
एलेक्स आर।

यह भी --tagsहल्के और एनोटेट टैग स्रोत के
कार्लसेबल

जवाबों:


554

मई 2015 को अपडेट करें

के रूप में Git 2.4.1 , आप कर सकते हैं

git config --global push.followTags true

यदि डिफ़ॉल्ट रूप से सत्य सक्षम करने के लिए सेट --follow- टैग विकल्प।
--No- फॉलो-टैग निर्दिष्ट करके आप पुश के समय इस कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं।

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

--follow-tags केवल एनोटेट टैग पुश करता है

git tag -a -m "I'm an annotation" <tagname>

इसे धकेला जाएगा (जैसा कि विरोध किया गया है git tag <tagname>, एक हल्का टैग, जिसे धक्का नहीं दिया जाएगा, जैसा कि मैंने यहां बताया है )

अप्रैल 2013 को अपडेट करें

चूंकि Git 1.8.3 (अप्रैल 22d, 2013) , आप अब 2 आदेशों करने के लिए शाखाओं पुश करने के लिए, और उसके बाद टैग पुश करने के लिए है :

नया " --follow-tags" विकल्प बताता है " git push" प्रासंगिक एनोटेट टैग को पुश करने के लिए जब शाखाओं को बाहर धकेल दिया जाता है

अब आप कोशिश कर सकते हैं, जब नए काम करता है:

git push --follow-tags

हालांकि, सभी स्थानीय टैगों को धक्का नहीं देगा , केवल उन कमिट द्वारा संदर्भित किया जाता है, जिनके साथ धक्का दिया जाता है git push

Git 2.4.1+ (Q2 2015) विकल्प को प्रस्तुत करेगा push.followTags: "" कैसे बनाएं " git push" एक शाखा के भीतर टैग शामिल करें? "।

मूल उत्तर, सितंबर 2010

परमाणु विकल्प होगा git push --mirror, जो सभी रिफ को नीचे धकेल देगा refs/

आप अपनी वर्तमान शाखा के साथ सिर्फ एक टैग को भी धकेल सकते हैं:

git push origin : v1.0.0 

आप --tagsविकल्प को एक refspec के साथ जोड़ सकते हैं जैसे:

git push origin --tags :

(जब से --tagsइसका मतलब है: सभी refs के तहत refs/tagsधकेल दिया जाता है, refspecs के अलावा स्पष्ट रूप से कमांड लाइन पर सूचीबद्ध है )


आपके पास यह प्रविष्टि " पुशिंग ब्रांच और टैग्स के साथ सिंगल" गिट पुश "इनवोकेशन " है

एक आसान टिप सिर्फ Zoltán Füzesi द्वारा Git मेलिंग सूची में पोस्ट की गई थी:

मैं .git/configइसे हल करने के लिए उपयोग करता हूं :

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

इन पंक्तियों के साथ जोड़ा git push origin आपकी सभी शाखाएं और टैग अपलोड हो जाएंगे। यदि आप उनमें से कुछ को ही अपलोड करना चाहते हैं, तो आप उन्हें गणना कर सकते हैं।

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

$ git push && git push --tags

खबरदार , जैसा कि अज़ीम किशोर ने टिप्पणी की थी

push = +refs/heads/*अपनी सभी शाखाओं को बलपूर्वक आगे बढ़ाएगा

यह मुझे अभी, इसलिए FYI करें।


रेने शेहीब ने इस दिलचस्प टिप्पणी को जोड़ा :

--follow-tagsपैरामीटर के तहत केवल टैग के रूप में भ्रामक है .git/refs/tagsमाना जाता है।
यदि git gcचलाया जाता है, तो टैग को से स्थानांतरित कर दिया जाता .git/refs/tagsहै .git/packed-refs। बाद git push --follow-tags ...में उम्मीद के मुताबिक काम नहीं करता है।


3
आपके द्वारा लिंक की जाने वाली पोस्ट पर एक टिप्पणी यह ​​इंगित करती है कि push = +refs/heads/*लाइन बल आपकी सभी शाखाओं को -pushes करता है । यह मुझे अभी, इसलिए FYI करें।
असीम किशोर

2
पुन :: --follow-tagsझंडा 1.8 git में जोड़ा, क्या मैं अपनी git स्थापना को कॉन्फ़िगर करने के लिए डिफ़ॉल्ट कर सकता हूँ?
ट्रेवर बर्नहैम

1
@TrevorBurnham नहीं, केवल का मूल्य push.default( git-scm.com/docs/git-config ) धक्का पर डिफ़ॉल्ट कार्यों को निर्धारित कर सकते हैं ( nothing, matching, upstream, simpleके रूप में stackoverflow.com/a/10002469/6309 )। आपको --follow-tagस्पष्ट रूप से जोड़ने की आवश्यकता है ।
VonC

1
@VonC यदि मैं टैग को बल देना चाहता हूं तो क्या होगा? git push --follow-tags -fमेरे लिए काम नहीं किया।
मोरियत

1
--follow-tagsपैरामीटर के तहत केवल टैग के रूप में भ्रामक है .git/refs/tagsमाना जाता है। यदि git gcचलाया जाता है, तो टैग को से स्थानांतरित कर दिया जाता .git/refs/tagsहै .git/packed-refs। बाद git push --follow-tags ...में उम्मीद के मुताबिक काम नहीं करता है।
रेने शीशी

4

शायद यह किसी की मदद करता है:

 1. git commit -a -m "msg"  
 2. git tag 0.1.0                // creates a new tag locally     
 3. git push origin tag 0.1.0    // pushes the tag & the code in the remote repo          

मैंने git-2.21.0.windows.1 के साथ आपके समाधान की कोशिश की और पाया कि 3 केवल टैग को धक्का देते हैं
डस्टिन सन

यह मेरे अंत में ठीक काम कर रहा है। आप सभी 3 कमांड को सही क्रम में आज़मा रहे हैं और रिमोट रेपो सेट है (git रिमोट -v)?
राजेश गुप्ता

मैंने चरण 1 में "git कमिट -m" msg "का उपयोग किया था और कोई -a पैरामीटर नहीं था। यह हो सकता है। फॉलोअप के लिए धन्यवाद!
डस्टिन सन


0

जीआईटी जीयूआई

Git GUI में एक PUSH बटन है - दण्ड को क्षमा करें, और जो डायलॉग बॉक्स खुलता है उसमें टैग के लिए एक चेकबॉक्स है।

मैंने कमांड लाइन से बिना टैग के एक शाखा को धक्का दिया, और फिर शाखा का उपयोग करके फिर से धक्का देने की कोशिश की --follow-tags ऊपर दिए विकल्प । विकल्प को एनोटेट टैग के रूप में वर्णित किया गया है। मेरे टैग सरल टैग थे।

मैंने कुछ तय किया, (ताकि सहकर्मी तय कर सकें चेरी कर सकते हैं,) के साथ कमिट को टैग किया है, तो सॉफ्टवेयर संस्करण संख्या को बदल दिया है और मेरे द्वारा बनाई गई रिलीज़ को टैग किया है (ताकि सहकर्मी उस रिलीज़ को क्लोन कर सकें)।

Git ने कहा कि सब कुछ अप-टू-डेट था। यह टैग नहीं भेजा! शायद क्योंकि टैग एनोटेट नहीं थे। शायद इसलिए कि शाखा में कुछ नया नहीं था।

जब मैंने Git GUI के साथ एक समान धक्का दिया, तो टैग भेजे गए।

Git GUI के साथ भेजा गया टैग

कुछ समय के लिए, मैं अपने बदलावों को Git GUI के साथ अपने कमांड में डालने जा रहा हूँ, कमांड लाइन के साथ नहीं और --follow-tags

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