git लॉग में सभी टैग दिखाएं


98

git log --decorateप्रति टैग एक से अधिक टैग क्यों प्रदर्शित नहीं करता है ?

EDIT : चार्ल्स बेली जवाब के साथ आया है (कम से कम मेरे मामले में)
अनिवार्य रूप से, मेरे पास एक टैग था जो एक अन्य टैग की ओर इशारा करता था जो कमिट को इंगित करता था। अप्रत्यक्षता की इस अतिरिक्त परत के कारण, टैग लॉग में दिखाई नहीं दे रहा था। मुझे इसे ठीक करना होगा, टैग करने के लिए हमारी टैगिंग लिपि को ठीक करके या कुछ शेल स्क्रिप्ट वूडू द्वारा टैग्स को पुनः प्राप्त करने के लिए ठीक करना होगा। वैसे भी, मैं इस सवाल को केवल संदर्भ के लिए छोड़ दूंगा जब कोई चाहेगा। (मैं अतिप्रवाह ढेर करने के लिए नया हूं, लेकिन मुझे लगता है कि सही प्रोटोकॉल है?)

... मूल प्रश्न इस प्रकार है ...

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

इसलिए यह वास्तव में बहुत बार होता है कि हमारे पास एक ही प्रतिबद्ध पर कई टैग हैं। पाठ लॉग में इसे देखना बहुत अच्छा होगा, लेकिन यह इसका समर्थन नहीं करता है। मैं वर्तमान में इस मुद्दे के आसपास काम कर रहा हूं कि मैं स्वयं उस टैग की जांच कर रहा हूं, जिसे मैं ढूंढ रहा हूं या फायरिंग कर रहा हूं gitk। जबकि ये दोनों समाधान काम करते हैं, मुझे लगता है कि यह git log --decorateडिफ़ॉल्ट रूप से केवल एक टैग का समर्थन करने के लिए वास्तव में अजीब है ।

मैंने आसपास कुछ गुगली की, लेकिन बहुत कुछ नहीं पाया। क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?

पीएस (मैं वास्तव में एक कस्टम प्रारूप स्ट्रिंग का उपयोग करता हूं %d, मैन पेज और कुछ त्वरित परीक्षणों के अनुसार, यह बराबर है --decorate)


12
क्या आपने 'git log --decorate = full' (माइनस कोट्स) की कोशिश की है?
RDL

1
आप किस संस्करण का उपयोग कर रहे हैं? मैं खदान में ठीक कई टैग देखता हूं।
Cascabel

@ आरडीएल: पूर्ण बनाता है यह प्रिंट refs / प्रमुख / या refs / टैग / उपयुक्त के रूप में, सही है? कम या ज्यादा रेफरी नहीं।
Cascabel

9
त्वरित प्रश्न, क्या आप टैग को टैग करते हैं, या आप कमिट को टैग करते हैं? (टैग श्रृंखला बना सकते हैं, मेरे परीक्षणों में सजाए गए टैग्स को एक कमिट की ओर इशारा करते हुए टैग पर देखा गया और टैग एक कमिट के लिए एक टैग की ओर इशारा करते हैं लेकिन उससे आगे नहीं।)
सीबी बेली

1
@Charles बेली मुझे लगता है कि आप इस समस्या को हल कर सकते हैं। मैंने काम पर एक साधारण परीक्षण (git संस्करण 1.6.3.3) की कोशिश की, और यह ठीक काम करने लगता है। तो यह एक संस्करण मुद्दा नहीं है। मैं बाद में और जांच करूंगा। अंतर्दृष्टि के लिए धन्यवाद!
जोनाथन

जवाबों:


17

टैग के टैग के बारे में ध्यान दें (एक टैग को टैग करना), जो आपके मुद्दे के मूल में है, क्योंकि चार्ल्स बेली ने टिप्पणी में सही ढंग से बताया है:

सुनिश्चित करें कि आप इस धागे का अध्ययन करते हैं , क्योंकि हस्ताक्षरित टैग को ओवरराइड करना उतना आसान नहीं है:

  • यदि आपने पहले से ही एक टैग को धकेल दिया है, तो git tagपुरुष पृष्ठ गंभीरता से git tag -f Bटैग नाम बदलने के लिए एक सरल के खिलाफ सलाह देता है "A "
  • के साथ एक हस्ताक्षरित टैग को फिर से बनाने की कोशिश न करें git tag -f (नीचे थ्रेड निकालें देखें)

    (यह एक कोने के मामले के बारे में है, लेकिन सामान्य रूप से टैग के बारे में काफी शिक्षाप्रद है, और यह एक अन्य एसओ योगदानकर्ता जकुब नारायणकी से आता है :

कृपया ध्यान दें कि टैग का नाम (हैवीवेट टैग, यानी टैग ऑब्जेक्ट) दो स्थानों पर संग्रहीत है:

  • 'टैग' शीर्षक की एक सामग्री के रूप में टैग वस्तु अपने आप में (आप इसके बारे में "उत्पादन में देख सकते हैं git show <tag>" और यह भी के उत्पादन में " git cat-file -p <tag>", जहाँ <tag>हैवीवेट टैग, है जैसे v1.6.3में git.gitभंडार),
  • और refs/tags/*टैग ऑब्जेक्ट का डिफ़ॉल्ट नाम (संदर्भ " " नामस्थान में) एक टैग ऑब्जेक्ट की ओर इशारा करता है।
    ध्यान दें कि टैग संदर्भ ( refs/tags/*"नामस्थान में उपयुक्त संदर्भ ) विशुद्ध रूप से स्थानीय मामला है;" उदाहरण के लिए एक रिपॉजिटरी में क्या है refs/tags/v0.1.3, दूसरे में ' refs/tags/sub/v0.1.3' हो सकता है ।

इसलिए जब आप हस्ताक्षरित टैग ' A' बनाते हैं , तो आपके पास निम्न स्थिति होती है (यह मानते हुए कि यह कुछ प्रतिबद्ध है)

  35805ce   <--- 5b7b4ead  <=== refs/tags/A
  (commit)       tag A
                 (tag)

कृपया यह भी ध्यान दें कि " git tag -f A A" (नोट को टैग करने के लिए मजबूर करने वाले विकल्पों की अनुपस्थिति पर ध्यान दें ) एक नॉओप है - यह स्थिति को नहीं बदलता है।

तुम क्या "अगर git tag -f -s A A": ध्यान दें कि आप बल एक टैग owerwriting (ताकि Git मान लिया गया है आप जानते हैं कि आप क्या कर रहे हैं), और की है कि एक -s/ -a/ -mविकल्प एनोटेट टैग (टैग वस्तु के निर्माण) के लिए मजबूर किया जाता है, तो आप मिल जाएगा निम्नलिखित स्थिति

  35805ce   <--- 5b7b4ea  <--- ada8ddc  <=== refs/tags/A
  (commit)       tag A         tag A
                 (tag)         (tag)

ध्यान दें कि " git show A" पूरी श्रृंखला को गैर-टैग ऑब्जेक्ट के लिए नीचे दिखाएगी ...


86
git log --no-walk --tags --pretty="%h %d %s" --decorate=full

यह संस्करण प्रतिबद्ध संदेश को भी प्रिंट करेगा:

 $ git log --no-walk --tags --pretty="%h %d %s" --decorate=full
3713f3f  (tag: refs/tags/1.0.0, tag: refs/tags/0.6.0, refs/remotes/origin/master, refs/heads/master) SP-144/ISP-177: Updating the package.json with 0.6.0 version and the README.md.
00a3762  (tag: refs/tags/0.5.0) ISP-144/ISP-205: Update logger to save files with optional port number if defined/passed: Version 0.5.0
d8db998  (tag: refs/tags/0.4.2) ISP-141/ISP-184/ISP-187: Fixing the bug when loading the app with Gulp and Grunt for 0.4.2
3652484  (tag: refs/tags/0.4.1) ISP-141/ISP-184: Missing the package.json and README.md updates with the 0.4.1 version
c55eee7  (tag: refs/tags/0.4.0) ISP-141/ISP-184/ISP-187: Updating the README.md file with the latest 1.3.0 version.
6963d0b  (tag: refs/tags/0.3.0) ISP-141/ISP-184: Add support for custom serializers: README update
4afdbbe  (tag: refs/tags/0.2.0) ISP-141/ISP-143/ISP-144: Fixing a bug with the creation of the logs
e1513f1  (tag: refs/tags/0.1.0) ISP-141/ISP-143: Betterr refactoring of the Loggers, no dependencies, self-configuration for missing settings.

2
इससे भी बेहतर इसके लिए एक उपनाम बनाना :) git config --global alias.tags "! Git log --no-walk --tags --pretty = '% h% d% s' --decorate = full"
GOXR3HUS

1
धन्यवाद @ GOXR3PLUS मुझे करना था: git config --global alias.tags "log --no-walk --tags --pretty = '% h% d% s' --decorate = full"
ajh158

8

नोट: ब्रायन एम से प्रतिबद्ध 5e1361 सी । कार्लासन ( bk2204) (git 1.9 / 2.0 Q1 2014 के लिए) टैग के साथ लॉग सजावट की अवधि में एक विशेष मामले से संबंधित है:

लॉग: ठीक से जंजीर टैग के साथ सजावट संभाल

git logजब कोई टैग ऑब्जेक्ट किसी अन्य टैग ऑब्जेक्ट का संदर्भ देता है, जो अब रेफरी नहीं था, जैसे कि दूसरा टैग हटाए जाने पर सजावट को सही ढंग से हैंडल नहीं किया
प्रतिबद्ध सही ढंग से सजाया नहीं जाएगा क्योंकिparse_object दूसरे टैग पर नहीं बुलाया गया था और इसलिए इसके टैग किए गए फ़ील्ड को नहीं भरा गया था, जिसके परिणामस्वरूप कोई भी टैग संबंधित कमिट के साथ जुड़ा नहीं था।

parse_objectइस क्षेत्र में भरने के लिए कॉल करें यदि यह अनुपस्थित है ताकि टैग की श्रृंखला को निष्क्रिय किया जा सके और कमिट को ठीक से सजाया जा सके।
भविष्य के प्रतिगमन को रोकने के लिए परीक्षणों को भी शामिल करें।

उदाहरण:

git tag -a tag1 -m tag1 &&
git tag -a tag2 -m tag2 tag1 &&
git tag -d tag1 &&
git commit --amend -m shorter &&
git log --no-walk --tags --pretty="%H %d" --decorate=full
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.