git - लेखक और दिनांक वाले गिट लॉग से सबसे कम संभव आउटपुट




formatting logging (10)

मैं इस जानकारी के साथ (कम से कम) गिट लॉग आउटपुट कैसे दिखा सकता हूं:

* author
* commit date
* change

मैं इसे एक लॉग प्रति प्रविष्टि एक पंक्ति में संपीड़ित करना चाहता हूँ। इसके लिए सबसे छोटा संभव प्रारूप क्या है?

(कोशिश की --format=oneline लेकिन यह तारीख नहीं दिखाता है)


Answers

पूर्वनिर्धारित गिट उपनाम का प्रयोग करें, यानी:

$ git work

आदेश द्वारा एक बार बनाया गया:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

या ग्राफ के साथ अधिक रंगीन:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'


सभी उपरोक्त सुझाव विषय के लिए %s प्लेसहोल्डर का उपयोग करते हैं। मैं %B का उपयोग करने की अनुशंसा करूंगा क्योंकि %s स्वरूपण नई लाइनों को संरक्षित करता है और एकाधिक पंक्तियां संदेश संदेश दिखाई देता है।

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

टिग गिट लॉग कमांड का उपयोग करने के लिए एक संभावित विकल्प है, जो प्रमुख ओपन सोर्स * निक्स वितरण पर उपलब्ध है।

डेबियन या उबंटू पर निम्नानुसार स्थापित करने और चलाने का प्रयास करें:

$ sudo apt-get install tig

(टिग स्थापित हो जाता है)

$ tig

(लॉग को पेजर में निम्नानुसार प्रदर्शित किया गया है, वर्तमान प्रतिबद्ध हैश नीचे दिखाया गया है)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

चूंकि मार्कडाउन टेक्स्ट रंग का समर्थन नहीं करता है, कल्पना करें: कॉलम 1: नीला; कॉलम 2: हरा; कॉलम 3: डिफ़ॉल्ट टेक्स्ट रंग। अंतिम पंक्ति, हाइलाइट किया गया। बाहर निकलने के लिए क्यू या क्यू दबाएं।

टिग बिना कॉल किए किनारों के स्तंभों को औचित्य देता है, जो एक एएससीआई टैब (% x09) गारंटी नहीं देता है।

एक छोटी तिथि प्रारूप के लिए हिट पूंजी डी (नोट: लोअरकेस डी एक diff व्यू खोलता है।) show-date = short to ~ / .tigrc जोड़कर इसे स्थायी रूप से कॉन्फ़िगर करें; या एक [tig] खंड में .git / config या ~ / .gitconfig में।

एक संपूर्ण परिवर्तन देखने के लिए:

  • एंटर दबाएं । खिड़की के निचले हिस्से में एक उप फलक खुल जाएगी।
  • उप फलक में परिवर्तन स्क्रॉल करने के लिए के, जे कुंजी का उपयोग करें।
  • साथ ही, प्रतिबद्धता से प्रतिबद्ध करने के लिए ऊपर , नीचे कुंजी का उपयोग करें।

चूंकि टिग गिट से अलग है और स्पष्ट रूप से * निक्स विशिष्ट है, इसलिए संभवतः इसे विंडोज़ पर स्थापित करने के लिए साइगविन की आवश्यकता होती है। लेकिन फेडोरा के लिए मेरा मानना ​​है कि इंस्टॉल कमांड $ su , (enter root password) , # yum install tig# pkg_add -r tig लिए % su कोशिश करें, (enter root password) , # pkg_add -r tig

वैसे, टग लॉग के त्वरित दृश्य से बहुत अधिक के लिए अच्छा है: Screenshots और Manual


इस का उपयोग करने के लिए स्वतंत्र महसूस करें:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s"

देखो:


git log --pretty=format:"%H %an %ad"

डेट प्रारूप सेट करने के लिए --date= का उपयोग करें

git log --pretty=format:"%H %an %ad" --date=short

काम करने के लिए मैंने मंचन किया है जो मैंने धक्का देने के लिए तैयार हैं

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

आउटपुट कुछ ऐसा दिखता है:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

जहां पहला स्तंभ पीले रंग में दिखाई देता है, और पेरिसिस में 'एच' एम 'और' टी 'हेड, मास्टर और ट्रंक दिखाता है और अपने सामान्य "- सजावट" रंगों में दिखाई देता है

यहां यह लाइन ब्रेक के साथ है ताकि आप देख सकें कि यह क्या कर रहा है:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

मैंने "मंचित" के साथ उपनाम किया है:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(क्या इससे बचने का कोई आसान तरीका है? यह बचने के लिए थोड़ा मुश्किल था)


git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

काम किया यह आउटपुट:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

स्टैक ओवरफ्लो प्रश्न से प्रेरित : "जीआईटी लॉग आउटपुट जैसे एसवीएन एलएस-वी" , मुझे पता चला कि मैं आवश्यक सटीक पैरा जोड़ सकता हूं।

तारीख को छोटा करने के लिए (समय नहीं दिखा रहा है) --date=short उपयोग करें

यदि आप उत्सुक थे कि विभिन्न विकल्प क्या थे:
%h = संक्षेप में प्रतिबद्ध हैश
%x09 = टैब (कोड 9 के लिए वर्ण)
%an = लेखक का नाम
%ad = लेखक दिनांक (प्रारूप सम्मान --डेट = विकल्प)
%s = विषय
विवेक की टिप्पणी से kernel.org/pub/software/scm/git/docs/git-log.html (PRETTY FORMATS अनुभाग) से।


git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

परिणाम:

e17bae5 2011-09-30  Integrate from development -> main      [email protected]
eaead2c 2011-09-30  More stuff that is not worth mentioning [email protected]
eb6a336 2011-09-22  Merge branch 'freebase' into development        [email protected]

लगातार चौड़ाई सामान पहले है। कम से कम महत्वपूर्ण हिस्सा - ईमेल डोमेन - फिल्टर करने के लिए अंतिम और आसान है।


मैं इन दो .gitconfig सेटिंग्स का उपयोग करें:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% विज्ञापन लेखक की तारीख है, जिसे --date या --date में [log] stanza में निर्दिष्ट विकल्प द्वारा --date किया जा सकता है। मुझे सापेक्ष तारीख पसंद है क्योंकि यह सामान की कमी होने पर तत्काल महसूस करता है। आउटपुट इस तरह दिखता है:

6c3e1a2 2 hours ago [email protected] lsof is a dependency now.
0754f18 11 hours ago [email protected] Properly unmount, so detaching works.
336a3ac 13 hours ago [email protected] Show ami registration command if auto register fails
be2ad45 17 hours ago [email protected] Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago [email protected] Shorten while loops

यह बिल्कुल रंग में है, इसलिए लॉग लाइन के विभिन्न हिस्सों को अलग करना आसान है। [प्रारूप] खंड के कारण git log टाइप करते समय भी यह डिफ़ॉल्ट है।

2014 अद्यतन: चूंकि गिट अब पैडिंग का समर्थन करता है, मेरे ऊपर उपरोक्त संस्करण में एक अच्छा संशोधन है:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

यह अधिकार सापेक्ष तिथियों को संरेखित करता है और बाईं ओर कमिश्नर नामों को संरेखित करता है, जिसका अर्थ है कि आपको कॉलम जैसी दिखती है जो आंखों पर आसान है।

स्क्रीनशॉट

2016 अद्यतन: चूंकि जीपीजी हस्ताक्षर करना एक बात बन रहा है, मैंने सोचा कि मैं इस पोस्ट को एक संस्करण के साथ अपडेट करूंगा जिसमें हस्ताक्षर सत्यापन शामिल है (स्क्रीनशॉट में यह प्रतिबद्धता के ठीक बाद मैजेंटा पत्र है)। ध्वज का एक संक्षिप्त विवरण:

% जी ?: एक अच्छा (वैध) हस्ताक्षर के लिए "जी" दिखाएं, बुरे हस्ताक्षर के लिए "बी", अज्ञात वैधता के साथ एक अच्छे हस्ताक्षर के लिए "यू" और कोई हस्ताक्षर के लिए "एन"

अन्य परिवर्तनों में शामिल हैं:

  • रंग अब हटा दिए जाते हैं यदि आउटपुट टीटीआई के अलावा कुछ और है (जो grepping आदि के लिए उपयोगी है)
  • git log -g अब रिफ्लॉग चयनकर्ता शामिल है।
  • दो अभिभावकों को रिफ्रेम पर सहेजें और उन्हें अंत में रखें (कॉलम संरेखण को संरक्षित करने के लिए)
  • सापेक्ष तिथियों को कम करें यदि वे बहुत लंबे हैं (उदाहरण के लिए 3 years, 4.. )
  • कमांड नामों को छोटा करें (कुछ पीपीएल के लिए थोड़ा छोटा हो सकता है, बस %<(7,trunc) बदलें या कमेटी नामों को छोटा करने के लिए git .mailmap सुविधा देखें )

यहां कॉन्फ़िगरेशन है:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

सभी कॉलम संरेखण में सभी अब कुछ (उम्मीदवार) बेकार पात्रों की कीमत पर बहुत बेहतर संरक्षित हैं। यदि आपके पास कोई सुधार है, तो संपादित करने के लिए स्वतंत्र महसूस करें, मुझे संदेश रंग को इस पर निर्भर करता है कि कोई प्रतिबद्धता हस्ताक्षरित है या नहीं, लेकिन ऐसा लगता है कि यह संभव नहीं है।

स्क्रीनशॉट


जब मैं व्यक्तिगत रूप से किसी स्थिति में खुद को ढूंढता हूं, जब यह पता चला कि मैंने कुछ बदलाव किए हैं, जबकि मैं master में नहीं हूं (यानी HEAD master ठीक ऊपर अलग है और इसमें कोई काम नहीं है) छेड़छाड़ करने में मदद मिल सकती है:

git stash # HEAD has same content as master, but we are still not in master
git checkout master  # switch to master, okay because no changes and master
git stash apply  # apply changes we had between HEAD and master in the first place




git formatting logging