गिट-लॉग में रंग


106

जब आप git log --decorate --pretty=onelineआउटपुट चलाते हैं तो (HEAD, refs/published/master, master)रंगाई के साथ प्रविष्टियाँ होंगी ।

मेरे पास भी मेरे gitconfig में निम्नलिखित हैं:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

निम्नलिखित जैसे कस्टम प्रारूप करते समय आप उन रंगों को कैसे दोहराते हैं?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"

जवाबों:


91

Git 1.8.3 (24 मई 2013) के अनुसार, आप प्रारूप स्ट्रिंग में %C(auto)सजाने के लिए उपयोग कर सकते हैं ।%dgit log

से रिलीज नोट्स :

 * "git log --format" specifier learned %C(auto) token that tells Git
   to use color when interpolating %d (decoration), %h (short commit
   object name), etc. for terminal output.)

60

git log --decorateडिफ़ॉल्ट रूप से रखा जाएगा:

  • सियान में सिर
  • सुदूर शाखाओं में लाल
  • हरे रंग में टैग

और color.decorateविन्यास के माध्यम से बदला जा सकता है ।

लेकिन git log --formatविशेष रूप से HEAD या रीमोट या शाखा को प्रदर्शित करने का एक तरीका प्रदान नहीं करते हैं : तीनों के माध्यम से प्रदर्शित किया जाता है %d, एक रंग संभव के साथ।


मई 2013 को अपडेट करें, जैसा कि एलाद शाहर (ऊपर लिखा हुआ ) द्वारा नीचे दिया गया है , git 1.8.3 एक और विकल्प प्रदान करता है:

git log –formatअब खेल एक %C(auto)टोकन है जो बताता है कि टर्मिनल आउटपुट के लिए Git को हल करते समय रंग का उपयोग करना %d(सजावट), %h(शॉर्ट कम ऑब्जेक्ट ऑब्जेक्ट), आदि।

यह एटलसियन ब्लॉग पोस्ट टिप्पणी करता है कि यह सुविधा प्रारूप ( git rebase, git count-objects) और रंगों ( git branch -vv) पर केंद्रित कई अन्य लोगों का हिस्सा है

यह auto,reset1.8.2 के पिछले हिस्से के अलावा आता है , जो टर्मिनल 1 के लिए आउटपुट का उपयोग नहीं किए जाने पर स्वचालित रूप से रंगों को निष्क्रिय कर देता है

%C(auto,blue)Hello%C(auto,reset)

नोट: git 2.4+ (Q2 2015) शाखा नामों के आसपास रंग को रीसेट करने का बेहतर काम करेगा। जूनियो सी हमानो द्वारा प्रतिबद्ध 5ee8758
देखें ( ) :gitster

log --decorate: अगले आइटम में "कमिट" रंग को लीक न करें

" git log --decorate" में, आप इस तरह प्रतिबद्ध हैडर देखेंगे:

commit ... (HEAD, jc/decorate-leaky-separator-color)

जहां " commit ... (" में color.diff.commit, " HEAD" में color.decorate.head, " ," में color.diff.commit, शाखा का नाम color.decorate.branchऔर फिर " )" में बंद किया गया है color.diff.commit

यदि आप शरीर के पाठ के रूप में उसी रंग में HEAD और स्थानीय शाखा के नाम को चित्रित करना चाहते हैं (शायद इसलिए कि सियान और ग्रीन पठनीय होने के लिए एक काले-सफेद टर्मिनल पर बहुत फीके हैं), तो आप कहना नहीं चाहेंगे

[color "decorate"]
    head = black
    branch = black

क्योंकि आप सफेद-ऑन-ब्लैक टर्मिनल पर समान कॉन्फ़िगरेशन का पुन: उपयोग नहीं कर पाएंगे। आप भोली उम्मीद करेंगे

[color "decorate"]
    head = normal
branch = normal

काम करने के लिए, लेकिन दुर्भाग्य से यह नहीं है।
यह स्ट्रिंग को पेंट करता है " HEAD" और शाखा का नाम एक ही रंग में है जैसे कि सजावट तत्वों के बीच उद्घाटन कोष्ठक या अल्पविराम।
ऐसा इसलिए है क्योंकि कोड "प्रीफिक्स" को अपने रंग में प्रिंट करने के बाद रंग को रीसेट करना भूल जाता है।


ध्यान दें कि git 2.5 (Q2 2015) बग को ठीक करता है:

देखें 429ad20 प्रतिबद्ध द्वारा Junio सी Hamano ( gitster) , 13 मई 2015
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध fd70780 , 22 मई 2015)

log: सजावट के नाम को जल्दी छोटा न करें

" log --decorate" Git 2.4 में वृद्धि, जो वर्तमान शाखा के सिरे पर HEAD -> masterकमिटमेंट दिखाती है जैसे " ", --decorate = full के साथ काम नहीं किया।


Git 2.9.x + (Q3 2016) एक और बग और ठीक कर देंगे सम्मान color=autoके लिए%C(auto)


2.10.2.2 (अक्टूबर 2016) Git 82b83da (29 Sep 2016) के साथ अन्य बग को ठीक करता है , और René Scharfe (``) द्वारा c99ad27 (17 सितंबर 2016) प्रतिबद्ध है(द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 76796d4 , 28 अक्टू 2016)
gitster

pretty: %C(auto)यदि आउटपुट खाली है , तो रीसेट जोड़ने से बचें

हम रंग को रीसेट करने के लिए भागने के क्रम का उत्सर्जन करते हैं और %C(auto)यह सुनिश्चित करने के लिए विशेषता स्वचालित रंग को प्रदर्शित किया जाता है।
यह करना बंद कर दें कि यदि आउटपुट स्ट्रोब खाली है , अर्थात जब %C(auto)प्रारूप स्ट्रिंग की शुरुआत में दिखाई देता है, क्योंकि तब रीसेट की कोई आवश्यकता नहीं होती है और हम आउटपुट में कुछ बाइट्स बचाते हैं।

pretty: %C(auto)सभी विशेषताओं को रीसेट करने दें

उन पर पूर्ण स्वचालित नियंत्रण सक्षम करने के लिए रंगों और विशेषताओं को रीसेट %C(auto)करें; अन्यथा बोल्ड या रिवर्स जैसी विशेषताएं अभी भी पिछले %Cप्लेसहोल्डर्स से प्रभावी हो सकती हैं


3
क्या कोई तरीका नहीं है --decorate और --pretty = "... सामान" का उपयोग करने का?
उत्तरआईएसयूपी

8
@ नोर्थल्सअप: --decorateलगता है कि इसका स्वयं का कार्यान्वयन और विन्यास है, जबकि --prettyएक ही %dब्लॉक के माध्यम से एक ही जानकारी प्रदान करता है , जिसका अर्थ है कि --prettyआपके पास जितना भी रंग है, उसके साथ समान रूप से समान रंग विन्यास नहीं हो सकता है --decorate
वॉनसी

एकमात्र अंतर जो मैं देखता हूं कि मैं "git log" के बाद "--decorate" जोड़ता हूं, रिपोज या तो "Refs / heads / ..." या "refs / remotes ..." से शुरू होता है। रंग या तो रास्ता दिखाते हैं। किसी भी विचार यह क्या कारण होगा? मेरे पूछने का कारण यह है कि .itconfig कोई भी रंग गुण नहीं दिखाता है। मैं सोच रहा हूं कि मैं अपनी "color.decorate" संपत्ति कहां पा सकता हूं। मैं इसे अपने .gitconfig फ़ाइल में नहीं देखता।
जे वुडचुक

@JWoodchuck ट्राई करें git config --show-origin -l: आपको अपने सभी कॉन्फिग दिखाई देंगे । फिर आप "रंग" के लिए grep कर सकते हैं।
वॉनच

हां, मैं कुछ नहीं दिखाता जब मैं रंग के लिए grep करता हूं, जो बनाता है जहां सेटिंग्स इतनी रहस्यमय दिखाई दे रही हैं।
जे वुडचुक

9

उन्हें छोटा करें:

%C(...): color specification, as described in color.branch.* config option

तो %C(yellow reverse)काम करेगा।


1
काफी नहीं, %dसभी शाखाएं हैं, इसलिए ऐसा लग सकता है (HEAD, master), इस मामले में सिर नीला होना चाहिए और मास्टर को हरा होना चाहिए (मेरा मानना ​​है कि वे डिफ़ॉल्ट हैं)। जहां %C(yellow)%d%Cresetयह सब एक ही रंग बना देगा।
उत्तरआईएसयूपी

2
ओह, व्यक्तिगत सजावट को रंग देना। मुझे लगता है कि यह असंभव है। लॉग प्रविष्टियों को रेंडर करने के लिए कोड अनिवार्य रूप से दो बार लागू किया जाता है।
जोश ली

1
बहुत बुरा यह संभव नहीं है ... मुझे क्या करना अच्छा लगेगाgit log --decorate --oneline --date=...
mgalgs

8

कॉन्फ़िगरेशन विकल्प log.decorateलॉग में डिफ़ॉल्ट सजावट को सक्षम / अक्षम कर सकता है।

git config --global log.decorate full

एक बार जो किया जाता है आप color.decorate.*रंगों के साथ खेलने के लिए उपयोग कर सकते हैं


3
log.decorate=fullरेफ नामों को उनके उपसर्गों ( refs/heads/, आदि) के साथ मुद्रित करने का कारण बनता है ; मुझे log.decorate=shortऔर उपयोगी लगता है।
मुशिफिल

1
बहुत उपयोगी सेटिंग, हालांकि मैं भी shortबजाय पसंद करते हैंfull
थॉमस Levesque

4

कुछ लोग इसका उपयोग करना चाहते हैं: %C(colorname) इसके लिए रंग विन्यास बदलने की आवश्यकता नहीं है।

उदाहरण: लेखक का नाम पीले रंग में रंगना

--pretty=format:"%C(yellow)%an%Creset"

नियमित एएनएसआई रंगों को https://en.wikipedia.org/wiki/ANSI_escape_code पर काम करना चाहिए

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