git - एक गिट रिमोट टैग कैसे हटाएं?




git-tag (13)

आप एक गिट टैग को कैसे हटाते हैं जिसे पहले से ही धक्का दिया गया है?


हजारों दूरस्थ टैग के लिए 100x तेज विधि तक

11,000 से अधिक टैग हटाने की आवश्यकता के दौरान इन उत्तरों को पढ़ने के बाद, मैंने इन विधियों को भरोसा किया या xargs बहुत लंबे समय तक ले गए, जब तक कि आपके पास जलने के लिए घंटों न हो।

संघर्ष, मुझे दो बहुत तेज़ तरीके मिले। दोनों के लिए, रिमोट पर हटाना चाहते टैग की एक सूची बनाने के लिए git tag या git ls-remote --tags साथ शुरू करें। नीचे दिए गए उदाहरणों में आप sorting_proccessing_etc को किसी भी grep ing, sort आईएनजी, tail आईएनजी या head आईएनजी के साथ छोड़ या प्रतिस्थापित कर सकते हैं ( जैसे grep -P "my_regex" | sort | head -n -200 आदि ):

यह पहली विधि xargs का उपयोग करने से कहीं अधिक तेज़, शायद 20 से 100 गुना तेज है, और एक समय में कम से कम कई हजार टैग के साथ काम करता है।

git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh

यह कैसे काम करता है? टैग की सामान्य, रेखा से अलग सूची को अंतरिक्ष-पृथक टैग की एक पंक्ति में परिवर्तित किया जाता है, प्रत्येक के साथ प्रीपेड : तो। । ।

tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

इस प्रारूप टैग के साथ git push का उपयोग करके प्रत्येक रिमोट रेफरी में कुछ भी नहीं local_ref_path:remote_ref_path है, इसे मिटा दिया जाता है (इस तरह से धक्का देने के लिए सामान्य प्रारूप local_ref_path:remote_ref_path )।

विधि दो को एक ही पृष्ठ पर अलग-अलग उत्तर के रूप में विभाजित किया गया है

इन दोनों विधियों के बाद, आप शायद अपने स्थानीय टैग भी हटाना चाहेंगे। यह बहुत तेज़ है इसलिए हम xargs और git tag -d का उपयोग करने के लिए वापस जा सकते हैं, जो पर्याप्त है।

git tag | sorting_processing_etc | xargs -L 1 git tag -d

या रिमोट डिलीट के समान:

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")

स्थानीय टैग '12345' हटाएं

git tag -d 12345

रिमोट टैग '12345' हटाएं (उदाहरण के लिए; गिटहब संस्करण भी)

git push origin :refs/tags/12345

वैकल्पिक दृष्टिकोण

git push --delete origin tagName
git tag -d tagName


अन्य उत्तरों बताते हैं कि इसे कैसे पूरा किया जाए, लेकिन आपको परिणामों को ध्यान में रखना चाहिए क्योंकि यह एक दूरस्थ भंडार है।

ऑन रीटैगिंग सेक्शन में गिट टैग मैन पेज के पास रिमोट रेपो के परिवर्तन के अन्य उपयोगकर्ताओं को विनम्र तरीके से सूचित करने का एक अच्छा स्पष्टीकरण है। वे यह भी संवाद करने के लिए एक आसान घोषणा टेम्पलेट देते हैं कि दूसरों को आपके परिवर्तन कैसे प्राप्त करना चाहिए।


अपने टर्मिनल से, ऐसा करें:

git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}

अब Github.com पर जाएं और रीफ्रेश करें, वे गायब हो जाते हैं।


एक और सीधा तरीका है

git push --delete origin YOUR_TAG_NAME

इस स्थिति में आईएमओ उपसर्ग कोलन सिंटैक्स थोड़ा अजीब है


जैसा कि @ क्यूबाएक्स ने सुझाव दिया है, मैंने इस उत्तर को अपने मूल से विभाजित कर दिया है:

यहां एक विधि है जो xargs से कई गुना तेज है और tweaking के साथ और अधिक पैमाने पर हो सकता है। यह गिथब एपीआई , एक व्यक्तिगत एक्सेस टोकन का उपयोग करता है, और यूटिलिटी parallel लाभ उठाता है।

git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \ 
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H 
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\"  \
-H \"cache-control: no-cache\"`

parallel में कई ऑपरेटिंग मोड होते हैं, लेकिन आमतौर पर प्रक्रियाओं की संख्या पर सीमा निर्धारित करने की अनुमति देते हुए आप इसे दिए गए किसी भी कमांड को समानांतर करते हैं। आप तेजी से ऑपरेशन की अनुमति देने के लिए --jobs 2 पैरामीटर को बदल सकते हैं, लेकिन मुझे --jobs 2 की दर सीमाओं में समस्याएं थीं, जो वर्तमान में 5000 / घंटा हैं, लेकिन ऐसा लगता है कि एक अनियंत्रित अल्पकालिक सीमा भी है।

इसके बाद, आप शायद अपने स्थानीय टैग भी हटाना चाहेंगे। यह बहुत तेज़ है इसलिए हम xargs और git tag -d का उपयोग करने के लिए वापस जा सकते हैं, जो पर्याप्त है।

git tag | sorting_processing_etc | xargs -L 1 git tag -d

मैं उन सभी को छोड़कर उन सभी टैग को हटाना चाहता था जो एक पैटर्न से मेल खाते हैं ताकि मैं उत्पादन टैग के पिछले कुछ महीनों के अलावा सभी को हटा सकूं, यहां मैं बड़ी सफलता के लिए उपयोग करता हूं:

सभी रिमोट टैग हटाएं और हटाएं से अभिव्यक्ति को छोड़ दें

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin

सभी स्थानीय टैग हटाएं और हटाएं से अभिव्यक्ति को बहिष्कृत करें

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d

यदि आप PowerShell का उपयोग कर रहे हैं, और आप उनमें से एक समूह को हटाना चाहते हैं:

# Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }

बेशक, आप उन्हें हटाने से पहले भी फ़िल्टर कर सकते हैं:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }

यदि आपके पास # वर्ण, जैसे #ST002 शुरू किया गया टैग है, तो आप पाएंगे कि आप सामान्य पैटर्न का उपयोग करके हटाने में असमर्थ हैं। अर्थात

git tag -d #STOO2

टैग को हटा नहीं पाएंगे, लेकिन इसे स्ट्रिंग लिटलल में लपेटें

git tag -d "#ST002" or git tag -d '#ST002'

यह इसे हटा दिया जाएगा। उम्मीद है कि यह किसी ऐसे व्यक्ति की मदद करेगा जिसने टैग नाम लिखने के लिए # का उपयोग करने की गलती की है।


यदि आपने गिट रिपॉजिटरी में release01 नामक एक टैग बनाया है तो आप इसे निम्नलिखित करके अपने भंडार से निकाल देंगे:

git tag -d release01 
git push origin :refs/tags/release01 

एक Mercurial भंडार से एक को हटाने के लिए:

hg tag --remove featurefoo

कृपया https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551 संदर्भ लें


रिमोट रिपोजिटरी से टैग को निकालने के लिए:

git push --delete origin TAGNAME

आप स्थानीय रूप से टैग को भी हटाना चाहते हैं:

git tag -d TAGNAME

लगता है कि कुछ xargs पहले से ही बहुत काम करता है। इस धागे के माध्यम से वापस देखकर, मैं अनुभव कर रहा हूं कि xargs साथ xargs अनुमान है क्योंकि मूल उत्तर xargs -n 1 उपयोग करता था जब इसे वास्तव में आवश्यकता नहीं थी।

यह आपकी विधि के बराबर है सिवाय इसके कि xargs स्वचालित रूप से अधिकतम कमांड लाइन लंबाई से संबंधित है:

git tag | sorting_processing_etc | xargs git push --delete origin

xargs भी समानांतर में प्रक्रिया चला सकते हैं। xargs साथ विधि 2:

git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin

उपर्युक्त प्रत्येक प्रक्रिया में अधिकतम 100 तर्कों को संभालने के लिए अधिकतम 5 प्रक्रियाओं का उपयोग करता है। आप अपनी आवश्यकताओं के लिए सबसे अच्छा काम करने के लिए तर्कों के साथ प्रयोग कर सकते हैं।


सभी स्थानीय टैग हटाएं और दूरस्थ टैग की सूची प्राप्त करें :

git tag -l | xargs git tag -d
git fetch

सभी रिमोट टैग निकालें

git tag -l | xargs -n 1 git push --delete origin

स्थानीय टैग साफ़ करें

git tag -l | xargs git tag -d




git-tag