2010-02-24 17 views
30

मेरे पास एक भंडार है जिसमें एक ही प्रतिबद्धता पर एकाधिक टैग हैं। उदाहरण के लिए:वर्तमान प्रतिबद्धता पर टैग कैसे प्राप्त करें

commit #3 <--- TAG1/TAG2/TAG3 

    | 

commit #2 <--- TAG4/ TAG5 

    | 

commit #1 <--- TAG6/ TAG7 

मैं यह जानना चाहता हूं कि किसी विशेष प्रतिबद्धता पर कौन से टैग हैं।

git checkout <commit 1> 
git tag --contains 

जो टैग 1-7 दिखाया गया है: उदाहरण के लिए, अगर मैं प्रतिबद्ध 1 जाँच, मैं टैग 6 और टैग 7.

मैं कोशिश की है प्राप्त करना चाहते हैं।

git checkout <commit 1> 
git describe --tags HEAD 

केवल टैग 6 प्रदर्शित किया गया।

गिट में ऐसा करने का उचित तरीका क्या है?

उत्तर

3

यह आदर्श नहीं, लेकिन शायद उपयोगी है:

 
$ git log -n 1 --decorate --pretty=oneline 

आप आप क्या चाहते हैं पाने के लिए प्रारूप के साथ चारों ओर निभा सकता है।

+0

आपकी जानकारी के लिए धन्यवाद, मेरे रेपो में 300 से अधिक विभिन्न गिट हैं। मेरे लिए 300 बार वास्तव में कठिन "क्यू" दबाएं। – Shawn

+0

@Shawn क्यू दबाए जाने की कोई आवश्यकता नहीं है ... –

+0

जब भी मैं कुछ भी प्रदर्शित करने के लिए गिट लॉग का उपयोग करता हूं, तो मुझे लॉग प्रदर्शन मोड से बाहर निकलने के लिए प्रेस क्यू बटन की आवश्यकता होती है। सुनिश्चित नहीं है कि आप – Shawn

17

विलियम की जवाब पर कुछ सुधार:

git config --global alias.tags 'log -n1 --pretty=format:%h%d' 

उत्पादन इस तरह दिखता है:

~$ git tags 
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master) 
~$ git tags HEAD~6 
e923eae (tag: v1.7.0) 
+1

का सामना कर रहे हैं, यह एक अच्छी टिप – cmcginty

+0

है, मैं इस आउटपुट को किसी भी विराम चिह्न के साथ एक सादे सूची में बदलने के लिए sed/tr/grep कमांड जोड़ने की कोशिश कर रहा हूं। मैं सीधे इस तरह के 'गिट लॉग' कमांड का निर्माण कर सकता हूं, लेकिन जब मैं इसे गिट कॉन्फ़िगर उपनाम में डालता हूं तो बच निकलना मुझे मार रहा है। यहां मेरा लॉग कमांड है: git log -n1 --pretty = "format:% d" | sed "s /,/\ n/g" | grep टैग | sed "s/टैग: \ |) // g" –

+0

मैंने इसे स्वचालित स्क्रिप्ट्स (जैसे टैग को आपके प्रॉम्प्ट में डालने) के लिए अधिक उपयोगी बनाने के लिए परिष्कृत किया है ... –

18

मुझे लगता है कि शायद Git कुछ विकल्प जोड़ा के बाद से यह सवाल पूछा गया था पड़ा है, लेकिन जब से यह अभी भी आता है गूगल पर बहुत उच्च में, मुझे लगता है मैं जोड़ना होगा कि इस तरह से अच्छी तरह से काम करता है सोचा:

git tag -l --contains HEAD 

या HEAD को किसी अन्य वैध प्रतिबद्ध संदर्भ के साथ प्रतिस्थापित करें।

यह एक नई पंक्ति प्रिंट होगा, अलग टैग की सूची यदि HEAD किसी भी टैग, और प्रिंट कुछ भी नहीं अन्यथा शामिल है ताकि आप मिलेगा:

TAG6 
TAG7 

और रास्ते में विभिन्न अन्य शेल के साथ अच्छा तरीके के बहुत सारे हैं उपकरण जो आप उस आउटपुट को एक बार प्रारूपित कर सकते हैं ...

+1

पूरी तरह से काम करता है। आपको '-l' क्यों चाहिए? मैन्युअल से ऐसा लगता है कि बिना तर्क के '-l' सभी टैग सूचीबद्ध करता है, जो तर्क के बिना 'टैग' जैसा ही होता है। –

+0

@ कैरोसेंटिली ओह, मुझे लगता है कि मैंने मैन्युअल रूप से पर्याप्त मैन्युअल रूप से पढ़ा नहीं है। हालांकि मुझे लगता है कि मैं '-l' जोड़ना पसंद करता हूं क्योंकि यह सुनिश्चित करता है कि अगर मैं' --contains' ध्वज भूल जाता हूं तो मैं एक नया टैग जोड़ना समाप्त नहीं करता हूं। – arcticmac

+6

यह गलत आउटपुट देता है। यह उन सभी टैग्स को दिखाता है जिनमें दी गई प्रतिबद्धता शामिल है, यानी पिछले पहुंच योग्य कामों पर लागू टैग भी शामिल हैं। मूल प्रश्न स्पष्ट रूप से कहता है कि वह इन पुराने टैग नहीं चाहते हैं, केवल दिए गए प्रतिबद्धता पर 'वर्तमान' टैग। –

3

यहां @ जोशली के उत्तर का एक परिष्करण है, जो आउटपुट को केवल टैग (शाखाओं, न ही HEAD) सूचीबद्ध करने और 'टैग:' शब्द को स्ट्रिप करने के लिए उपयोग करता है और सजावटी विराम चिह्न। यह उपयोगी है अगर आप जो वर्तमान टैग लगाने के लिए की जरूरत है ऊपर कुछ स्क्रिप्टिंग कर रहे हैं (उदाहरण के लिए उन्हें अपने शीघ्र में डाल):

git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g" 

उदाहरण आउटपुट:

$ git log -n 1 --decorate=short 
commit a9313...c7f2 (HEAD, tag: v1.0.1, tag: uat, mybranch) 
... 
$ git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g" 
v1.0.1 
uat 
3

यह सिर की आईडी प्रतिबद्ध प्रदर्शित करता है, साथ ही साथ किसी भी शाखा या कोई टैग जो कि HEAD पर भी होता है।

git reflog --decorate -1 

नमूना उत्पादन:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) [email protected]{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD 
55

पूरा होने के लिए (सिरो Santili जवाब देने के लिए धन्यवाद), Git टैग विकल्प --points-पर कि वास्तव में क्या करता है शॉन पूछ रहा है मिल गया है।

git tag -l --points-at HEAD 

यह भी टैग आगे पर डाल सूची प्रभाव नहीं पड़ता करता है के रूप में जोनाथन हार्टले Git टैग --contains के बारे में उनकी टिप्पणी में कहा गया है।

+0

यह सबसे अच्छा जवाब है। कोई जटिल कमांड लाइन की आवश्यकता नहीं है, लेकिन केवल टैग नाम देता है। –

+0

बिल्कुल वही जो मुझे चाहिए, धन्यवाद। –

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