750 Stimmen

Die kürzestmögliche Ausgabe von git log mit Autor und Datum

Wie kann ich eine Git-Protokollausgabe mit (mindestens) diesen Informationen anzeigen:

* author
* commit date
* change

Ich möchte, dass es auf eine Zeile pro Protokolleintrag komprimiert wird. Was ist das kürzestmögliche Format dafür?

(versucht --format=oneline aber das Datum wird nicht angezeigt)

60voto

Joe Generic Punkte 679

tig ist eine mögliche Alternative zur Verwendung der Idiotenprotokoll Befehl, der auf den wichtigsten Open-Source-*Nix-Distributionen verfügbar ist.

Auf debian oder ubuntu Versuchen Sie, das Programm wie folgt zu installieren und auszuführen:

$ sudo apt-get install tig

Für Mac-Benutzer ist Brew die Rettung:

$ brew install tig

(tig wird installiert)

$ tig

(Das Protokoll wird im Pager wie folgt angezeigt, wobei der Hash der aktuellen Übertragung unten angezeigt wird)

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

Da Markdown keine Textfärbung unterstützt, stellen Sie sich vor: Spalte 1: blau; Spalte 2: grün; Spalte 3: Standardtextfarbe. Letzte Zeile, hervorgehoben. Klicken Sie auf . Q o q zu verlassen.


tig rechtfertigt die Spalten ohne ausgefranste Kanten was ein Ascii-Tab (%x09) nicht garantiert.

Für eine kurzes Datumsformat Kapital schlagen D (Anmerkung: Kleinschreibung d öffnet eine Diff-Ansicht). Konfigurieren Sie es dauerhaft durch Hinzufügen von show-date = short in ~/.tigrc; oder in einer [tig] Abschnitt in .git/configure oder ~/.gitconfig.

Um eine gesamte Veränderung :

  • touchez Eingabe . In der unteren Hälfte des Fensters wird ein Unterfenster geöffnet.
  • utiliser k , j Tasten, um die Änderungen im Unterfenster zu verschieben.
  • verwenden Sie gleichzeitig die auf , unten um von Commit zu Commit zu gelangen.

Da tig von git getrennt und offensichtlich *nix-spezifisch ist, benötigt man wahrscheinlich cygwin, um es unter Windows zu installieren. Aber für fedora Ich glaube, die Installationsbefehle lauten $ su , (enter root password) , # yum install tig . Für freebsd Versuchen Sie % su , (enter root password) , # pkg_add -r tig .


Übrigens ist Tig für viel mehr gut als nur für einen schnellen Blick auf den Stamm: Screenshots & Handbuch

38voto

Sean Punkte 1119
git log --pretty=format:'%h %ad %s (%an)' --date=short  

oder

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

...in Anlehnung an die Antwort von cdunn2001 oben: Ich würde die e=mail des Autors weglassen und nur den Namen des Autors einfügen, wie Jesper und knittl, aber im Einklang mit cdunn2001's Idee, die Ausgabe in Spalten mit konstanter Breite zu halten, um das Lesen zu erleichtern (großartige Idee!). Anstelle einer separaten linksbündigen Spalte für den Namen des Autors schließe ich dieses Kennzeichen jedoch am Ende des Befehls mit einer Klammer ein oder versetze es mit einer Pipe. (Es kann wirklich jedes beliebige Zeichen sein, das als visuelle Hilfe beim Lesen der Ausgabe dient... es könnte allerdings sinnvoll sein, umgekehrte oder vorwärts gerichtete Schrägstriche zu vermeiden, um die Ausgabe nicht mit einem Verzeichnis oder ähnlichem zu verwechseln.)

Beispielhafte Ausgabe:

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

33voto

Míra Punkte 1265

Vordefinierte Git-Alias verwenden, d.h.:

$ git work

Einmal auf Befehl erstellt:

$ 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

Oder mehr farbig mit Grafik:

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

enter image description here

8voto

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

結果

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

Konstante Breite steht an erster Stelle. Der unwichtigste Teil - die E-Mail-Domäne - steht an letzter Stelle und ist leicht zu filtern.

4voto

Sam Hasler Punkte 13118

Um die Commits anzuzeigen, die ich bereitgestellt habe und die bereit sind zu pushen, mache ich

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

Die Ausgabe sieht in etwa so aus:

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

Die erste Spalte erscheint in Gelb, und das "H", "m" und "t" in der Klammer stehen für HEAD, Master und Trunk und erscheinen in den üblichen "--decorate"-Farben

Hier ist es mit Zeilenumbrüchen, damit Sie sehen können, was es tut:

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

Ich habe mit "inszeniert" alias:

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

(Gibt es einen einfacheren Weg, das zu entschlüsseln? Es war etwas schwierig, herauszufinden, was entschlüsselt werden musste)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X