Najkrótsze możliwe wyjście z dziennika git zawierającego autora i datę

465

Jak mogę wyświetlić dane wyjściowe dziennika git z (przynajmniej) tymi informacjami:

* author
* commit date
* change

Chcę go skompresować do jednego wiersza na wpis w dzienniku. Jaki jest najkrótszy możliwy format?

(próbowano, --format=onelineale nie pokazuje daty)

Jesper Rønn-Jensen
źródło
2
Może podoba Ci się moja kolorowa wersja: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Odpowiedzi:

699

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

wykonał robotę. To daje:

  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

Zainspirowany pytaniem typu stackoverflow: „wyjście git log jak svn ls -v” , odkryłem, że mogę dodać dokładnie potrzebne parametry.

Aby skrócić datę (nie pokazuje godziny), użyj --date=short

Na wypadek gdybyś był ciekawy, jakie były różne opcje:
%h= skrót skrótu zatwierdzenia
%x09= tab (znak dla kodu 9)
%an= nazwa
%adautora = data autora (format uwzględnia --date = opcja)
%s= temat
Od kernel.org/pub/software/scm /git/docs/git-log.html (sekcja WSTĘPNE FORMATY) przez komentarz Vivek.

Jesper Rønn-Jensen
źródło
6
... i warto również dodać, date=shortjak sugeruje cdunn2001 w innej odpowiedzi
Jesper Rønn-Jensen
10
Moim ulubionym (krótkim) oneliner jest teraz zamiana daty przed autorem i użycie krótkiej daty:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen
143
Dodaj git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
pikanterii
16
Tabela kolumn o stałej szerokości:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功
15
W przypadku gdybyś był ciekawy, jakie były różne opcje:% h = skrót skrótu zatwierdzenia,% x09 = tab (znak dla kodu 9),% an = nazwa autora,% ad = data autora (format odpowiada - data = opcja), % s = temat. From kernel.org/pub/software/scm/git/docs/git-log.html (sekcja DOTYCZĄCE FORMATÓW)
Vivek
204

Korzystam z tych dwóch ustawień .gitconfig:

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

% ad to data autora, którą można zastąpić --datelub opcję określoną w sekcji [log] w .gitconfig. Lubię datę względną, ponieważ daje natychmiastowe wrażenie, kiedy coś zostało popełnione. Dane wyjściowe wyglądają tak:

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

Wszystko jest oczywiście w kolorze, więc łatwo jest rozróżnić różne części linii kłody. Jest także domyślny podczas pisania git logze względu na sekcję [format].

AKTUALIZACJA 2014: Ponieważ git obsługuje teraz padding, mam ładną poprawkę do powyższej wersji:

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

To prawo wyrównuje daty względne, a lewe wyrównuje nazwy osoby wykonującej, co oznacza, że ​​wyglądasz jak kolumna i jest przyjemny dla oczu.

Zrzut ekranu

  ss # 1

AKTUALIZACJA 2016: Ponieważ podpisywanie zatwierdzeń przez GPG staje się rzeczą, pomyślałem, że zaktualizuję ten post o wersję zawierającą weryfikację podpisu (na zrzucie ekranu jest to magenta litera zaraz po zatwierdzeniu). Krótkie wyjaśnienie flagi:

% G ?: pokaż „G” dla dobrego (ważnego) podpisu, „B” dla złego podpisu, „U” dla dobrego podpisu o nieznanej ważności i „N” dla braku podpisu

Inne zmiany obejmują:

  • kolory są teraz usuwane, jeśli dane wyjściowe dotyczą czegoś innego niż tty (co jest przydatne do grepowania itp.)
  • git log -g teraz zawiera selektor reflogu.
  • Zapisz 2 pareny na nazwach i umieść je na końcu (aby zachować wyrównanie kolumn)
  • Obetnij daty względne, jeśli są zbyt długie (np. 3 years, 4..)
  • Obetnij nazwy komendatora (może być trochę krótkie dla niektórych ppl, wystarczy zmienić %<(7,trunc)lub sprawdzić funkcję git .mailmap, aby skrócić nazwy komend)

Oto konfiguracja:

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

W sumie wyrównanie kolumn jest teraz znacznie lepiej zachowane kosztem niektórych (miejmy nadzieję) bezużytecznych znaków. Jeśli masz jakieś ulepszenia, możesz je edytować, chciałbym, aby kolor wiadomości zależał od tego, czy zatwierdzenie jest podpisane, ale wydaje się, że to nie jest możliwe atm.

Zrzut ekranu

Zrzut ekranu z git log

andsens
źródło
3
Możesz jeszcze bardziej skrócić linie, korzystając z mapy pocztowej .
Skróciłem
2
Odpowiedzi w formacie --pretty są dobre, a tigodpowiedź zapewnia interaktywność bez wymaganej konfiguracji, ale ta jest genialna - daje żądane wyjście w jednym wierszu (z kolorem do uruchomienia!) Za pomocą standardowej komendy „git log”. Bardzo dobrze.
Brent Faust,
Kiedy używam - prawo-lewo, nie dostaję > <już znaków. Próbowałem dodać %mdo formatu, ale potem >pojawia się za każdym razem, nawet normalnie git log. Jakieś wskazówki, jak znaki zachowują się normalnie w tym formacie?
Vituel,
1
@AlvaroCavalcanti na pewno nie ma problemu! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens
2
@ TrầnViệtHoàng --onelineto tylko alias --pretty=oneline. format.prettyjest domyślnym ładnym formatem, ale nie ma sposobu, aby zastąpić format.onelineafaik. Chciałbym pominąć pretty = shortlogwiersz w konfiguracji, a następnie utworzyć alias do uruchomienia git log --pretty=shortlog.
andsens
99
git log --pretty=format:"%H %an %ad"

Użyj, --date=aby ustawić format daty

git log --pretty=format:"%H %an %ad" --date=short
knittl
źródło
1
Świetny! Następnym razem prawdopodobnie
użyję
jak sobie życzysz. podałem tylko prosty przykład;)
knittl
2
Fajne! Nie wiedziałem o --date = short
Jesper Rønn-Jensen,
3
Po prostu wyrzucam to (8 lat spóźnienia): skrót może wyglądać jak bzdury, ale jest to przydatne narzędzie, jeśli chcesz wybrać lub porównać zatwierdzenia. Często podajesz skrót nie dlatego, że ma znaczenie, ale dlatego, że ma zastosowanie
stevendesu,
81

Możesz użyć tego:

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

Uwaga -7na końcu, aby wyświetlić tylko 7 ostatnich wpisów.

Popatrz:

wprowadź opis zdjęcia tutaj

Hannes Schneidermayer
źródło
3
--date=shortmożna dodać, aby był krótszy.
xuhdev
@Hannes, Gdzie są nazwy oddziałów?
Pacerier
@Pacerier git logzawsze pokazuje historię aktualnie wyewidencjonowanego oddziału.
Hannes Schneidermayer
Dodaj, %daby przywrócić „nazwy ref”, takie jak (HEAD -> master).
2540625
Dlaczego warto korzystać resetzamiast auto?
2540625
49

tig jest możliwą alternatywą dla używania komendy git log , dostępnej w głównych dystrybucjach open source * nix.

W systemie Debian lub Ubuntu spróbuj zainstalować i uruchomić w następujący sposób:

$ sudo apt-get install tig

(tig zostanie zainstalowany)

$ tig

(log jest wyświetlany w pager w następujący sposób, z hashem bieżącego zatwierdzenia wyświetlanym u dołu)

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%)

Ponieważ przecena nie obsługuje kolorowania tekstu, wyobraź sobie: kolumna 1: niebieski; kolumna 2: zielony; kolumna 3: domyślny kolor tekstu. Ostatnia linia, podświetlona. Naciśnij Q lub q, aby wyjść.


tiguzasadnia kolumny bez poszarpanych krawędzi , czego nie gwarantuje karta ascii (% x09).

W przypadku formatu krótkiej daty naciśnij D (uwaga: mała litera d otwiera widok różnicy). Skonfiguruj go na stałe, dodając show-date = shortdo ~ / .tigrc; lub w [tig]sekcji .git / config lub ~ / .gitconfig.

Aby zobaczyć całą zmianę :

  • naciśnij Enter . W dolnej części okna otworzy się okienko pomocnicze.
  • użyj klawiszy k , j , aby przewinąć zmianę w panelu podrzędnym.
  • w tym samym czasie użyj klawiszy góra , dół , aby przejść od zatwierdzenia do zatwierdzenia.

Ponieważ tig jest odrębny od git i najwyraźniej * specyficzny dla * nix, prawdopodobnie wymaga instalacji Cygwina w systemie Windows. Ale dla Fedory wierzę polecenia instalują są $ su, (enter root password), # yum install tig. Dla FreeBSD try % su, (enter root password), # pkg_add -r tig.


Nawiasem mówiąc, tig jest dobry na wiele więcej niż szybki przegląd dziennika: Zrzuty ekranu i instrukcja

Joe Generic
źródło
proszę podać pełny przykład. Pisanie tigw mojej konsoli po prostu daje mi błąd-bash: tig: command not found
Jesper Rønn-Jensen,
10
łał. to narzędzie jest fantastyczne i zaskakująco szybkie! brew install tig
bullfight
jeśli używasz Mac, napar zainstaluj tig
Pedro Brasileiro
1
w systemie Windows użytkownicy Babun mogąpact install tig
obojdi 10.01.2017
34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

lub

git log --pretty=format:'%h %ad %s | %an' --date=short  

... riffing na powyższej odpowiedzi cdunn2001: stracę e-mail autora i podam tylko nazwisko autora, jak na Jespera i Knittla, ale zgodnie z pomysłem cdunn2001, aby zachować dane wyjściowe w kolumnach o stałej szerokości dla ułatwienia czytania ( świetny pomysł!). Zamiast oddzielnej lewej, wyrównanej kolumny dla nazwiska autora, zawijam jednak tę flagę na końcu polecenia w nawiasach lub przesuwam za pomocą potoku. (Naprawdę może to być dowolny znak, który służy jako wizualna pomoc w czytaniu danych wyjściowych ... aczkolwiek sensowne jest unikanie ukośników wstecz i do przodu w celu zmniejszenia mylenia danych wyjściowych z katalogiem lub czymś innym.)

Przykładowe dane wyjściowe:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac
Sean
źródło
31

Użyj predefiniowanego aliasu git, tj .:

$ git work

Utworzono raz za pomocą polecenia:

$ 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

Lub bardziej kolorowe z wykresem:

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

wprowadź opis zdjęcia tutaj

Míra
źródło
Tak, podoba mi się ten!
Alex
8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Wynik:

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]

Rzeczy o stałej szerokości są pierwsze. Najmniej ważna część - domena e-mail - jest ostatnia i łatwa do filtrowania.

cdunn2001
źródło
4

Aby pokazać zatwierdzone przeze mnie zobowiązania, które są gotowe do wykonania

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

Dane wyjściowe wyglądają mniej więcej tak:

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

Tam, gdzie pierwsza kolumna jest wyświetlana na żółto, a „H” „m” i „t” w nawiasie wskazują HEAD, master i trunk i pojawiają się w swoich zwykłych „dekoracyjnych” kolorach

Oto podział linii, dzięki czemu możesz zobaczyć, co robi:

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}'

Pseudonim „zainscenizowałem” za pomocą:

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}"'

(Czy istnieje łatwiejszy sposób na ucieczkę? Trudno było ustalić, co wymagało ucieczki)

Sam Hasler
źródło
Moja obecna wersja tego skryptu to ~ 300LOC i robi o wiele więcej: ¶ - opcja przełączania komunikatu zatwierdzenia oneline / multiline¶¶ - pokaż białe znaki / linie kończą się w trybie oneline. np .: ¶ - określ zakres za pomocą parametru¶ - Podświetl problem nr 's - podświetl / ^ - (Poprawka | Dodaj | Refaktor) / w komunikatach zatwierdzenia¶
Sam Hasler
Aby uzyskać automatyczne, niezawodne cytowanie aliasów, zobacz tę odpowiedź . Chcesz udostępnić swój ~ 300LOC w mgnieniu oka?
Tom Hale,
Dzięki Tom! jeśli przejdę do opublikowania tego skryptu (musiałbym usunąć niektóre poufne / specyficzne dla firmy rzeczy), wyślemy ci ping tutaj.
Sam Hasler,
1

Wszystkie wyżej wymienione sugestie wykorzystują %ssymbol zastępczy dla tematu. Polecam użyć, %Bponieważ %sformatowanie zachowuje nowe wiersze, a komunikat zatwierdzenia wielu wierszy jest zgnieciony.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"
palik
źródło
0

Uruchom to w folderze projektu:

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

A jeśli chcesz, dodaj tę linię do ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all
MUH Mobile Inc.
źródło
0

Spróbuj użyć git log --pretty = fuller, wyświetli się: - Autor: Data autora: Data zatwierdzenia: Data zatwierdzenia:

Mam nadzieję że to pomoże.

Varun Sharma
źródło