किसी दिए गए कमिट से जुड़े टैग को कैसे खोजें?


90

रिलीज़ के लिए मैं आमतौर पर v1.1.0 जैसी किसी चीज़ के साथ टैग करता हूं। अपनी बिल्ड स्क्रिप्ट के दौरान मैं एक fwVersion.c फ़ाइल बना रहा हूँ जिसमें वर्तमान git जानकारी है। वर्तमान में, मैंने फ़ाइल में कमिट और शाखा जानकारी दी है, लेकिन मैं टैग जोड़ना चाहूंगा।

क्या यह संभव है?

जवाबों:


114

के लिए प्रलेखन की जाँच करें git describe। यह दिए गए कमिट के लिए निकटतम टैग ढूंढता है (यह एक ऐसा टैग है जो कमिट के पूर्वज की ओर इशारा करता है) और टैग के संदर्भ में उस कमेट का वर्णन करता है।

यदि आप केवल यह जानना चाहते हैं कि क्या कमिट एक टैग द्वारा इंगित किया गया है, तो आप इसका आउटपुट देख सकते हैं:

git describe --exact-match <commit-id>

32
git describe --tags <commit-id>गैर-टैग किए गए टैग के लिए
Aleksandr Levchuk

1
मुझे यह पसंद है। स्वाभाविक रूप से, मैं प्यार करता हूँ कि मैं वर्तमान संशोधन से एक मानव पठनीय प्राप्त कर सकता हूँ:git describe --all --exact-match `git rev-parse HEAD`
dsummersl

5
नए संस्करणों में, git describe --tags --abbrev=0 REVउपयोगी होगा जब आप टैग पर रद्दी नहीं चाहते हैं।
क्रेग रिंगर

1
git describe --all(वर्तमान में चेक आउट किए गए कमिट के लिए) या git describe --all <commit>हमेशा मैंने जो कुछ भी चाहा है उसके बारे में हमेशा किया है।
rfay

किसी सॉफ़्टवेयर को परिनियोजित करने पर git से संस्करणों का उपयोग करने का सबसे अच्छा हिस्सा स्रोत में संस्करण का अधिक हार्डकॉडिंग नहीं है। निकटतम टैग को खोजने के तरीके का वर्णन वर्णन अगले संस्करण संख्या की गणना करने के लिए किया जा सकता है और रेपो और पैकेज के नाम में केवल एक टैग जोड़ें।
सिड

62

यदि आप चाहते हैं कि पहला टैग है जिसमें कमिट है:

git describe --contains <commit>

सबसे अच्छा जवाब IMO देता है। यदि आपके पास एक बड़ी रिपॉजिटरी में पुरानी कमिट पर "git टैग --contains" का उपयोग करने से बार-बार टैग हैं, तो आपको चलाने में थोड़ा समय लग सकता है और आपको उन सभी टैगों को देता है जिनमें वह कमिट होते हैं।

Git का यह रूप बहुत तेज़ी से चलता है और आपको एक एकल आउटपुट वैल्यू देता है जो पहला टैग होता है जिसमें कमिट होता है और आपकी कमिट कितनी दूर होती है।


27

इस बारे में कैसा है?

git tag --points-at <commit-id>

यह आपको दिए गए कमिट में सभी टैग देता है (जबकि git describeकेवल आपको एक देता है), और वंशज कमिट (जैसे git tag --contains) पर टैग शामिल नहीं करता है।


मुझे यह पसंद है क्योंकि कोई त्रुटि संदेश stderr को नहीं लिखा जाता है। धन्यवाद।
बासुके

23

आप मैनुअल में यह जानकारी पा सकते हैं

git tag --contains <commit>

3
इसमें उन सभी टैगों की सूची दी जाएगी, जिनमें दिए गए कमिट हैं (यानी टैग जो दिए गए कमिट के बच्चों को इंगित करते हैं), इसलिए जरूरी नहीं कि किसी दिए गए कमिट के लिए कोई टैग दिया जाए या किसी भी जानकारी के बारे में जो टैग निकटतम है, जब तक कि सूची में केवल एक ही प्रतिबद्ध है।
सीबी बेली

4
जैसा कि चार्ल्स बेली ऊपर कहते हैं, यह वही नहीं है जो मैं देख रहा हूं। शायद आपको RTFM :)
wes

1
खैर, गलत जवाब के लिए क्षमा करें। जब मैंने जाँच की तो ऐसा लग रहा था कि आप क्या पूछ रहे हैं। मैंने RTFM किया, मैं सिर्फ गलत समस्या को हल कर रहा था। होप बेली ने एक समाधान पेश किया जो आपकी मदद करता है।
3

6
इससे पहले कि आप एसओ पर एक जीआईटी सवाल पूछें, आपको पूरे गिट मैनुअल को पढ़ने की आवश्यकता नहीं है? किसी भी git man पेज की तुलना में google इंडेक्स SO बहुत बेहतर है ...
aaronstacy

13

मुझे दोनों शीर्ष उत्तरों का कॉम्बो मिला, जो मुझे चाहिए कि मैं ऐसा क्या चाहता था:

git describe --tags --exact-match <commit-id>

यह आपको वह टैग देता है जो केवल उस कमिट के लिए है और एनोटेशन के बिना लोगों के लिए है। उपयोगी जब आप टैग ढूंढना चाहते हैं और तब स्वरूपण बंद करने के बारे में चिंता न करें (उदाहरण के लिए जेनकिंस के लिए)।

जैसे। $ git describe --tags --exact-match head~2

आपको देता है:

$ ReleaseBeta

0

कुछ उत्तरों को समेकित करना:

git tag --contains [<ref>]

तथा

git tag --points-at [<ref>]

या केवल

git tag

एक ही व्यवहार करें, निर्दिष्ट रेफरी या वर्तमान प्रतिबद्ध के लिए किसी भी (और सभी) टैग को निर्दिष्ट नहीं करने पर प्रिंट करें।

git describe --tags [<ref>]

जहां <ref>मौजूदा कमिट में चूक होती है, अगर कोई टैग के साथ जुड़ा नहीं है, तो 128 से बाहर निकलता है, और कमिट के साथ जुड़े टैग को प्रिंट करता है (इसमें कोई पैटर्न नहीं लगता है)।

git describe [<ref>]--tagsकेवल इसके साथ ही व्यवहार करता है सिवाय इसके कि यह केवल एनोटेट टैग प्रिंट करता है।

एक टैग को मुद्रित --containsकरने के विकल्प का समर्थन describeकरना, जो निर्दिष्ट प्रतिबद्ध के पूर्वज के साथ जुड़ा हुआ है। उदाहरण के लिए

$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1

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