2012-11-03 13 views
50

मेरे पास एक प्रोजेक्ट है जो गिट का उपयोग कर रहा है और सभी रिलीज को टैग के साथ टैग किया है।गिट टैग का समय और दिनांक प्राप्त करें

$ git tag 
v1.0.0 
v1.0.1 
v1.0.2 
v1.0.3 
v1.1.0 

मेरा लक्ष्य रिलीज और रिलीज तिथियों को वेब इंटरफ़ेस (टैग/प्रतिबद्ध दिनांक = रिलीज़ दिनांक) में सूचीबद्ध करना है। वर्तमान में हम git tag का उपयोग कर सभी रिलीज सूचीबद्ध करते हैं।

टैग कब बनाया गया था (या प्रतिबद्धता यह इंगित करता है) के लिए समय और तारीख कैसे प्राप्त कर सकता हूं?

+1

यह है कि यह टैग है कि आप के बाद कर रहे हैं के लिए प्रतिबद्ध तारीख है यहाँ सटीक करने के लिए अच्छा है। एक टैग के रूप में कोई तारीख नहीं है। – jobwat

+0

संभावित डुप्लिकेट [मैं अपने गिट भंडार में सभी टैग्स को उनकी तिथि के अनुसार कैसे सूचीबद्ध कर सकता हूं?] (Https://stackoverflow.com/questions/6269927/how-can-i-list-all-tags-in- my-git-repository-by-the-date-they-created-बनाया गया) –

उत्तर

35

git log करने के लिए --format तर्क का उपयोग करें:

git log -1 --format=%ai MY_TAG_NAME 
+2

टीआईपी - टैग नाम के साथ "TAG" बदलें। उदाहरण के लिए, 'गिट लॉग -1 --format =% ai v0.2.3'। – Tobias

+2

यदि आप ISO8601 चाहते हैं, तो '--format =% aI' (पूंजी "I") –

56

यह मुझे हमेशा के लिए काम किया:

git log --tags --simplify-by-decoration --pretty="format:%ci %d" 

"बहुत प्रारूप" प्रारूप स्ट्रिंग के विवरण के लिए Git-लॉग मैनपेज की धारा से परामर्श करें यदि आप एक अलग तिथि स्वरूपण चाहते हैं।

+6

हालांकि चेतावनी दी जानी चाहिए, यह प्रतिबद्धता के लिए दिनांक/समय सूचीबद्ध करेगा, लेकिन एनोटेटेड टैग के लिए दिनांक/समय नहीं। – WiSaGaN

+2

... जो मुझे –

+0

पसंद है बस 'taglog = log --tags --simplify-by-decoration --pretty =' प्रारूप:% ci% d''(सिंगल-, डबल-कोट्स नोट करें) [उपनाम] अनुभाग .gitconfig फ़ाइल का अनुभाग, और अब आपके पास एक गिट टैगलॉग कमांड है :) – Lambart

20

ध्यान दें कि ऊपर के समाधान के दोनों आप तारीख, जो जब कि प्रतिबद्ध रिहाई के लिए टैग किया गया था की तुलना में बेतहाशा अलग हो सकता है प्रतिबद्ध मिलता है। टैग की तारीख प्राप्त करने के लिए, आपको टैग को rev-parse के साथ मिलना होगा, इसे cat-file के साथ पढ़ें, और उसके बाद इसे पार्स करें। एक छोटी सी पाइपलाइन:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'

+0

अच्छा करें, केवल समस्या ही परिणाम स्वरूपित नहीं है (1419372909 -0300) –

1

एक gawk (नहीं awk) का उपयोग कर सकते कुछ मानव पठनीय करने के लिए "टैगर" पंक्ति में तारीख कन्वर्ट करने के लिए:

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' 

अगर एक तो gawk पसंद नहीं है

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d 

और परीक्षा: date यूनिक्स समय परिवर्तित करने के लिए इस्तेमाल किया जा सकता मिसाल (dnsmasq Git रेपो):

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d 
Wed May 18 16:52:12 CEST 2016 
+0

क्या आप इसे अपने पक्ष से आजमाते हैं ?? –

+0

निश्चित रूप से। यह काम करता है, 'dnsmasq' git repo, उदाहरण के लिए: '$ git rev-parse v2.76 | xargs गिट बिल्ली फ़ाइल -पी | अजीब '/^टैगर/{प्रिंट स्ट्रैटाइम (प्रोसिंफो ["स्ट्रेटटाइम"], $ (एनएफ -1))}' 'बुध मई 18 16:52:12 सीईएसटी 2016' – vladis

1

यह करने के लिए Git टैग आदेश में कोई आसान विकल्प नहीं है। मुझे

git log --decorate=full 

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

git log --decorate=full --simplify-by-decoration 

विवरणों का उपयोग के लिए

git help log 
7

एक और विकल्प टैग किए गए हैं कि:

git for-each-ref --format="%(refname:short) | %(creatordate)" refs/tags/* 

प्रारूप विकल्प के लिए https://git-scm.com/docs/git-for-each-ref#_field_names देखें

%(creatordate) की तारीख देता प्रतिबद्धता की ओर इशारा करते हुए, उस टैग को देखने के लिए जिस पर टैग बनाया गया था %(taggerdate)

आप सीधे खोल शामिल कर सकते हैं का उपयोग करें:

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" refs/tags/* 

ref='v1.10' dt='1483807817' 
ref='v1.11' dt='1483905854' 
ref='v1.12.0' dt='1483974797' 
ref='v1.12.1' dt='1484015966' 
ref='v1.13' dt='1484766542' 
ref='v1.2' dt='1483414377' 
ref='v1.3' dt='1483415058' 
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'. 
ref='v1.3.1' dt='1483487085' 
ref='v1.4' dt='1483730146' 
ref='v1.9' dt='1483802985' 
+2

यह टैग प्राप्त करने का सबसे अच्छा जवाब है तारीख। –

+0

वैकल्पिक रूप से, आप 'गिट फॉर-प्रत्येक-रेफ --format = "% (टैगरडेट: यूनिक्स)" रेफ/टैग' के साथ यूनिक्स टाइमस्टैम्प प्राप्त कर सकते हैं या 'git for-each-ref -format ="% में सबस्ट्रिंग के रूप में (टैगरडेट: कच्चा) "रेफरी/टैग' –

+0

धन्यवाद! अन्य सभी उत्तरों केवल प्रतिबद्ध तिथि देते हैं, न कि टैग की तारीख। – Sam

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