Git टैग सूची, प्रदर्शन प्रतिबद्ध sha1 हैश


101

इसलिए git tagकमांड वर्तमान गिट टैग को सूचीबद्ध करता है

tag1
tag2

git tag -n टैग का संदेश प्रिंट करता है

tag1  blah blah
tag2  blah blah

Tag1 & tag2 के हैश पाने का सबसे अच्छा तरीका क्या है?


1
ऐसा सवाल नहीं है जिसे मैं अलग से पूछने पर विचार करता हूं, लेकिन मुझे आश्चर्य है कि क्यों git tag( -nया कुछ अन्य विकल्प ...) पहली बार में हैश नहीं दिखाता है। यह देखना अच्छा है कि लोग किस समाधान के साथ आते हैं, लेकिन मैं इसे उपलब्ध विकल्पों में एक डिजाइन दोष मानता हूं।
और्री

जवाबों:


142

टैग ऑब्जेक्ट के SHA1 हैश के साथ git टैग प्राप्त करने के लिए, आप चला सकते हैं:

git show-ref --tags

तब आउटपुट कुछ इस तरह दिखेगा:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0

प्रत्येक पंक्ति टैग का SHA1 हैश है, उसके बाद टैग नाम के साथ उपसर्ग किया जाता है refs/tags/

यदि आप टैग ऑब्जेक्ट के बजाय कमिट का SHA1 हैश चाहते हैं, तो आप चला सकते हैं:

git show-ref --tags -d

यह उत्पादन का उत्पादन करेगा जैसे:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}

समाप्त होने वाली पंक्तियाँ ^{}SHA1 हैश के साथ शुरू होती हैं जो टैग को इंगित करता है।


7
ध्यान दें, यह हल्के और एनोटेट टैग के बीच अंतर नहीं करेगा। हल्के टैग्स के लिए यह कमिट दिखाएगा और एनोटेट टैग्स के लिए यह टैग ऑब्जेक्ट के हैश को दिखाएगा।
लिली बॉलर

20
उपयोग किए गए टैग के साथ टैग की सूची दिखाने के लिए (एनोटेट टैग के मामले में) का उपयोग करें git show-ref --tags -d। Dereferenced टैग एक के साथ उपसर्ग कर रहे हैं ^{}
एस क्रिस्टोफर एलिसेन

49

git tagआदेश अविकसित है। बहुत कुछ वांछित है, लेकिन इसमें गायब है, जैसे पूर्ण टैग विवरण और प्रतिबद्ध इतिहास क्रम में टैग।

मैं इसके बजाय इसे पसंद करता हूं, जो मुझे वही देता है जो मैं चाहता हूं लेकिन इससे प्राप्त नहीं कर सकता git tag:

git log --oneline --decorate --tags --no-walk

यह रिवर्स कालानुक्रमिक क्रम में टैग का एक बहुत अच्छा रंग-कोडित दृश्य देता है (जैसा कि यह पूर्ण लॉग में होगा)। इस तरह, आप न केवल टैग देखते हैं, आप संक्षिप्त हैश और टैग के प्रतिबद्ध संदेश भी देखेंगे।


मैं यह करने के लिए एलियास है git tऔर git tagsइस प्रकार है:

git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"

नोट: मुझे बैश पुनर्निर्देशन का उपयोग करना था git tक्योंकि Git किसी अन्य उपनाम (जो कि एक बाड़मेर है) से एक उपनाम को कॉल करने का समर्थन नहीं करता है।


यदि आप प्रतिबद्ध दिनांक और समय देखना चाहते हैं, तो प्रयास करें:

git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'

आप --dateविकल्प में अन्य दिनांक प्रारूपों का उपयोग कर सकते हैं और साथ ही विकल्प में अपने अद्वितीय स्वाद से मेल खाने के लिए आउटपुट को पूरी तरह से नियंत्रित कर सकते हैं --pretty। दोनों विकल्प गिट-लॉग डॉक्यूमेंटेशन में अच्छी तरह से प्रलेखित हैं


2
हालांकि ओपी ने जो नहीं पूछा (प्रदर्शन प्रतिबद्ध श 1 हैश ) यह बहुत उपयोगी है क्योंकि प्रतिबद्ध संदेश भी उपयोगी हो सकते हैं। मुझ से +1।
स्टेलियोस एडमांटीडिस

2
@nealmcb git logशक्तिशाली है! आप इसे वही दिखा सकते हैं जो आप चाहते हैं। कोशिश करो git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'। अन्य दिनांक प्रारूप भी संभव हैं। बस --dateसहायता पृष्ठ में देखें। मैंने इस विकल्प को शामिल करने के लिए अपना उत्तर अपडेट कर दिया है।
ADTC

1
@SteliosAdamantidis वास्तव में मेरा उत्तर संक्षिप्त SHA1 हैश (पहले 7 वर्ण) देता है, और यदि आप पूर्ण लंबाई वाला हैश चाहते हैं, तो आप इसे हमेशा संशोधित कर सकते हैं --prettyऔर %H। +1 :)
ADTC

15

एनोटेट टैग का अपना स्वयं का SHA ated 1 होता है, इसलिए हमें इनकी आवश्यकता है। हालाँकि हल्के टैगों को निष्क्रिय नहीं किया जा सकता है, क्योंकि वे पहले से ही एक कमिट की ओर इशारा करते हैं। हल करने के लिए, हमें दोनों को सूचीबद्ध करना चाहिए और प्रतिबद्ध वस्तुओं को फ़िल्टर करना चाहिए:

git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit

हल्के टैग के साथ परिणाम:

589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5

एनोटेट टैग के साथ परिणाम:

e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}

का उपयोग git log --tags --oneline --no-walkकरना भी स्वतः एनोटेट टैग को हटा देगा। :)
ADTC

11

SHA1 को रेफरी (शाखा, टैग ...) के किसी भी प्रकार से संदर्भित करने के लिए उपयोग करें git rev-parse:

git rev-parse tag1^0 tag2^0

यह केवल पूर्ण SHA1s, अलग-अलग लाइनों पर प्रिंट करेगा। ^0प्रत्यय एक विशेष वाक्य रचना, यह सुनिश्चित करें कि इस SHA1 प्रिंट होगा की टैग द्वारा की ओर इशारा किया प्रतिबद्ध है, चाहे वह या व्याख्या की नहीं कर रहा है है। (एनोटेट टैग्स अपने आप में ऑब्जेक्ट हैं, जिनमें मेटाडेटा के साथ-साथ कमिट करने के लिए एक पॉइंटर होता है। यदि आपको पता है कि एक टैग एनोटेट है, और टैग का SHA1 चाहते हैं, तो बस छोड़ दें ^0।)

बेशक, आपको अक्सर ऐसा करने की आवश्यकता नहीं होनी चाहिए, क्योंकि SHA1 को स्वीकार करने वाले किसी भी Git कमांड को भी टैग को स्वीकार करना चाहिए!


यहाँ सबसे अच्छा जवाब, धन्यवाद @Jefromi। ध्यान दें कि Windows cmd शेल में ^ का उपयोग करके किसी भी git कमांड को उद्धृत किया जाना चाहिए: जैसे git Rev-parse "tag1 ^ 0" "tag2 ^ 0"।
योयो

8

मेरे पास एक समान प्रश्न था, लेकिन (कई) विशिष्ट टैग का हैश चाहिए था। मैंने पाया कि "शो-रेफ" टैग की एक सूची लेगा, इसलिए यह काम करता है:

% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga

हालांकि, "git शो" के साथ कुछ प्रयोग इस आदेश में हुए:

% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second

चूंकि मैं "शो-रेफ" की तुलना में "शो" का उपयोग करने के लिए बहुत अधिक परिचित हूं, इसलिए मुझे याद रखना आसान लगता है और अधिक उपयोगी भी।

यह भी देखें कि Git में टैग बिंदुओं को बताने के लिए कैसे अच्छा सारांश है ?


3

टैग पर हस्ताक्षर करने और / या गड़बड़ करना होगा। लाइटवेट टैग में SHA1 ऑब्जेक्ट नहीं हैं और केवल refs हैं। अन्यथा प्रयास करें git show


3
 git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags

यह टैग के लिए सभी कमिट्स की एक सूची देता है। एनोटेट टैग को हटा दिया गया है। यहाँ धन्यवाद भेजें ।


महान समाधान। अगर आपको पूर्ण रीफ़ाइन के बजाय केवल टैगनाम रखना है, तो आप %(refname:short)इसके स्थान पर उपयोग बदल सकते हैं %(refname)
Radon8472

2

मैंने अनातोली टेकटोनिक पोस्ट से कमांड लिया टैग्स / कमिट्स के शीर्षक संदेश को जोड़ा और इसे अच्छे कॉल के रूप में तैयार किया।

परिणाम एक आउटपुट है git tag -nलेकिन उपसर्ग के रूप में कमिट-हैश के साथ।

git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'

यदि आप शॉर्ट की जगह लॉन्ग-हैश रखना पसंद करते हैं, तो यस्ट objectname:shortद्वारा प्रतिस्थापित किया जाता है objectname

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