2010-09-02 13 views
28

मैं कुछ पिछले प्रतिबद्ध प्रदर्शित करने के लिए एक सरल उर्फ ​​है:Git लॉग सारणीबद्ध स्वरूपण

log --pretty=format:'%h %an %s' -10 

कैसे मैं इस तरह के परिणाम कॉलम में प्रदर्शित करने के लिए कर सकते हैं,:

898e8789 Author1    Commit message here 
803e8759 Other Author name Commit message here 
+0

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

+3

@Zack: मैन कॉलम आपका मित्र है। – toong

+0

दुर्भाग्यवश, यह एक बीएसडीवाद प्रतीत होता है। – zwol

उत्तर

37

Git 1.8 में .3 और बाद में, वहाँ pretty format में इस के लिए देशी समर्थन है, एन स्तंभ जितनी चौड़ाई के रूप में अगले प्लेसहोल्डर फ़ॉर्मेट करने के लिए %<(N) सिंटैक्स का उपयोग:

$ git log --pretty=format:'%h %<(20)%an %s' -10 

1.8.3 से पहले के संस्करणों के लिए, इस उत्तर का पिछला संस्करण, नीचे बनाए रखा, काम करना चाहिए।

यहाँ बैश में एक समाधान read का उपयोग कर वापस अलग लॉग लाइनों पार्स करने के लिए है, और printf एक निश्चित चौड़ाई क्षेत्र के साथ, उन्हें बाहर मुद्रित करने के लिए लेखकों के लिए तो कॉलम खड़े रहेंगे नाम। यह मानता है कि | लेखक के नाम में कभी नहीं दिखाई देगा; यदि आप सोचते हैं कि कोई समस्या हो सकती है तो आप एक और डिलीमीटर चुन सकते हैं।

जब भी साथ सामना

[alias] 
    mylog = "!git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message; do printf '%s %-20s %s\n' \"$hash\" \"$author\" \"$message\"; done" 

मैं तुम्हें awk का उपयोग कर कम वर्ण में ऐसा कर सकता है लेकिन जैसा कि the saying चला जाता है यकीन है कि,:

git log --pretty=format:'%h|%an|%s' -10 | 
    while IFS='|' read hash author message 
    do 
    printf '%s %-20s %s\n' "$hash" "$author" "$message" 
    done 

आप इस उपनाम के रूप में उपयोग करते हुए बना सकते हैं एक समस्या, कुछ लोग कहते हैं, "एडब्ल्यूके का उपयोग करते हैं।" अब, उन्हें दो समस्याएं हैं।

बेशक

, कहा कि, मैं कैसे जो थोड़ा कम है awk में यह करने के लिए यह पता लगाने की थी:

git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }' 
+0

हालांकि यह काम करता है - मूल जेट-लॉग विधि का उपयोग करके @ जेसे द्वारा सुझाए गए अनुसार बहुत साफ है –

+0

@ सेनबर्लिंगटन जब मैंने 2010 में यह जवाब लिखा था, तो यह अस्तित्व में नहीं था; रिक्ति प्लेसहोल्डर्स के लिए समर्थन जोड़ा गया [2013 में 1.8.3 में] (https://github.com/git/git/commit/a57523428b4c08795e793356e12afc3de812f84a) (हालांकि किसी कारण से, ऐसा लगता है कि [रिलीज नोट्स से गायब] (https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.3.txt))। अब जब आपने इंगित किया है कि एक बेहतर समाधान उपलब्ध है, तो मैंने इसे अपने उत्तर में शामिल किया है। –

+2

मुझे आशा थी कि '% <(एन) 'वाक्यविन्यास गिट के अन्य क्षेत्रों में काम करेगा जहां' --format' का उपयोग किया जाता है, लेकिन ऐसा लगता है कि अब तक '--pretty' तक सीमित है। 2013 में [कुछ चर्चा] थीं (http://lists-archives.com/git/797299-for-each-ref-support-aligned-for-left-ignignment.html) प्रत्येक वाक्य के साथ उस वाक्यविन्यास का उपयोग करने के बारे में -ref --format' और '% (...: गठबंधन) के साथ कुछ प्रयोग 'लेकिन यह चर्चा मर गई प्रतीत होती है। – Dennis

14

निम्न आदेश एक सारणी के रूप में लॉग प्रिंट होगा

git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|' 

column आउटपुट "कॉलमेट्स" आउटपुट का उपयोग करके "|" फ़ील्ड सेपरेटर के रूप में, यह इनपुट दिए गए इष्टतम कॉलम चौड़ाई को पता लगाएगा, इसलिए यदि आपके पास अधिक फ़ील्ड हैं तो यह अच्छी तरह से काम करेगा।

लिनक्स पर यह तब तक ठीक काम करेगा जब तक आप रंगों का उपयोग नहीं करते हैं, लिनक्स कार्यान्वयन ANSI escape codes को अच्छी तरह से संभाल नहीं करता है।

लेकिन मैक ओएस एक्स में, यह रंगों को संभालेगा और आप किसी भी यूनिकोड चरित्र को फील्ड डेलीमीटर के रूप में उपयोग कर सकते हैं। मैं Σ का उपयोग करता हूं क्योंकि मुझे पूरा यकीन है कि यह प्रतिबद्ध पाठ पर मौका नहीं होगा। | क्योंकि यह प्रतिबद्ध वर्णन में प्रकट हो सकते हैं और यदि आप --graph --decorate --all का उपयोग यह ग्राफ आकर्षित करने के लिए इस्तेमाल किया प्रतीकों के हिस्से के रूप में दिखाई देगा एक बुरा विकल्प है

+0

पहला जवाब मैंने देखा कि इस के साथ काम किया: 'git log --pretty = format: '% cr |% s' -10 | कॉलम-टी-एस '|' – lightningleaf

31

तुम भी कर सकते हैं:

git log --pretty=format:'%h %<(20)%an %s' -10 

कोई ज़रूरत नहीं शैल जादू या awk, column आदि के साथ पोस्ट प्रोसेसिंग के लिए।

+0

यह मेरे लिए सबसे अच्छा समाधान जैसा लगता है। % <(20) वाक्यविन्यास पर आपको दस्तावेज़ कहां मिले? –

+1

इसे प्रीटी फॉर्मेट्स अनुभाग के तहत 'गिट हेल्प लॉग' दस्तावेज़ों में संदर्भित किया गया है (मैं गिट संस्करण 1.8.3.4 का उपयोग कर रहा हूं)। – Conan

+0

यह सबसे छोटा अभी तक का सबसे सटीक उत्तर है। किसी और चीज की आवश्यकता नहीं है, बस अंतर्निहित गिट लॉग। – hanhp

6

वास्तव में टैब्यूलर प्रारूप प्राप्त करने के लिए आपको उपयोगकर्ता नामों को भी छोटा करने की आवश्यकता है जो उदा। 20 वर्ण:

git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10 

या लाइनों लपेटकर और किसी भी इंडेंट:

git log --pretty=format:'%h %<(20,trunc)%an %s' -10 

साथ ही, आप टर्मिनल के लिए outputting रहे हैं, तो आप लाइन overflows या तो प्रतिबद्ध संदेश क्षेत्र छोटा द्वारा रोकने के लिए चाहते हो सकता है संरेखित करने के लिए बहती रेखाएं:

git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10 
+0

@TamaMcGlinn उम्मीद है कि यह मदद करनी चाहिए – insysion