2016-10-06 4 views
1

Wo ist das Format von git log --oneline --decorate definiert?Wie reproduziert man das Format von git log --oneline --decorate?

Mit git Iog --format = Format: 'mein Format', kann ich die Farben der Zweige, Tags und HEAD nicht wie von git log --oneline --decorate angezeigt reproduzieren.

git log --oneline --decorate  

zeigt HEAD in hellblau, die Zweignamen in grün und die Interpunktion (,,) in braun.

Die nächstgelegene ich zu kommen, habe das bekommen, was ich will, ist:

git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset)%d %C(white)%s%C(reset)' -20 

mit dem einzigen Unterschied, dass die nicht wie mit dem vorherigen Befehl farbigen branches/HEAD/Tags zu sein.

Antwort

0

Es scheint nicht möglich zu sein mit git Version < 1.8.3.

Da git 1.8.3 könnte man die Farbe% C (auto) Token verwenden:

git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset) %C(auto)%d %C(reset) %C(white)%s%C(reset)' -20  

Das Schlüsselelement Wesen:

%C(auto)%d %C(reset) 

Siehe auch:

Color in git-log
Git pretty format colors

1

TL; DR - Ich glaube nicht, dass es möglich ist, das genaue Format zu erhalten, das git log --oneline bietet, da die --format Option keine bedingten Anweisungen erlaubt, während git-log eine Funktion verwendet, um diese Zeichenfolge für eine Pro-Commit-Nachricht zu generieren .

Der nächstgelegene ich mit den Farben habe, ist dies:

git log --format=format:'%C(auto)%h%C(reset) %C(auto)%s%C(reset)' 

wie diese auf meiner Maschine Aussehen:

terminal-screenshot


Lange Version:

Die meisten Dokumentation Sie kann auf git-log hier lesen ist: https://git-scm.com/docs/git-log

ich in die Quelle vertieft (auf Github here verfügbar), um zu sehen, was genau git tut für die --oneline Option, hier ist was ich gefunden habe:

  • Der Weg hier in revision.c beginnt, wo die Kommandozeilenoptionen

  • die Option analysiert werden dann in pretty.c analysiert wird CMIT_FMT_ONELINE des cmit_fmt enum übereinstimmen (definiert in commit.h)

  • Schließlich geschieht das tatsächliche Drucken in pretty.c unter pp_commit_easy.

  • Hier wird es schwierig und kompliziert. Sie können Referenzen auf CMIT_FMT_ONELINE in einer Handvoll von Orten in pretty.c sehen. Ich glaube, dass nur pp_title_line für jedes Festschreiben ausgeführt wird, wenn die --oneline Option angegeben ist. Sie können sehen, dass bei der Erstellung des Zeichenfolgenpuffers eine Reihe von bedingten Formatierungen vor sich geht.

Also ja, ich glaube nicht, es gibt einen Weg, um das tatsächliche Format mit den Tags und (HEAD -> master) Meta-Informationen zu replizieren. Sie können wahrscheinlich ein Shell-Skript schreiben, das dasselbe tut, aber seine Leistung stimmt möglicherweise nicht mit der von Git überein.

Verwandte Themen