Ich habe gesehen, dass einige Bücher und Artikel einige wirklich hübsch aussehende Grafiken von Git-Zweigen und Commits enthalten. Wie kann ich qualitativ hochwertige druckbare Bilder der Git-Geschichte erstellen?
Suchen Sie nach einem Tool zur Visualisierung Ihres eigenen Git-Verlaufs - oder nach einem Diagramm-Tool, mit dem Sie hübsche "Git-Zweige" zeichnen können?
Ich würde das Tag gerichtet-azyklische-Graphen löschen, weil es für diese Frage irrelevant ist
Maksim Dmitriev
Antworten:
1843
Update: Diese Antwort hat weit mehr Aufmerksamkeit erhalten, als sie verdient. Es wurde ursprünglich veröffentlicht, weil ich denke, dass die Grafiken gut aussehen und in Illustrator für eine Veröffentlichung gezeichnet werden könnten - und es gab keine bessere Lösung. Aber es gibt jetzt viel zutreffendere Antworten auf diese Frage, wie die von fracz , Jubobs oder Harry Lee ! Bitte stimmen Sie diese ab !!
Update 2: Ich habe eine verbesserte Version dieser Antwort auf die Visualisierung der Branchentopologie in der Git- Frage veröffentlicht, da sie dort weitaus angemessener ist. Diese Version enthält lg3Informationen zum Autor und zum Committer. Sie sollten sie also unbedingt überprüfen. Ich lasse diese Antwort aus historischen (& rep, ich gebe zu) Gründen, obwohl ich wirklich versucht bin, sie einfach zu löschen.
Meine 2 ¢ : Ich habe zwei Aliase, die ich normalerweise in meine ~/.gitconfigDatei werfe :
@Turbo: Für mich können die Farben in den Profileinstellungen für meine Terminal-App (Terminal.app) geändert werden. Die von Ihnen verwendete Terminal-App unterstützt möglicherweise das Ändern der für bestimmte ANSI-Farben angezeigten Farben. Außerdem wurde der Bindestrich (em Bindestrich, genau) mit Option-Shift- [Bindestrich-Minus-Taste] erstellt. Ich nehme an, ich habe fälschlicherweise angenommen, dass alle aktuellen Plattformen mit Unicode auf dem neuesten Stand sind.
Slipp D. Thompson
3
Ihre --date=relativeund --abbrev-commitsind redundant , weil Sie explizit verwenden %crund %hsind.
Gute Antwort. Ich habe den Befehl so geändert, dass er eher der Ausgabe von --oneline --decorate withlg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
Craig P. Motlin
1198
Viele der Antworten hier sind großartig, aber für diejenigen, die nur eine einfache, einzeilige Antwort wünschen, ohne Aliase oder etwas anderes einrichten zu müssen, hier ist es:
git log --all --decorate --oneline --graph
Nicht jeder würde die git logganze Zeit etwas tun , aber wenn Sie es brauchen, denken Sie daran:
" A Dog " = git log - ein ll - d ecorate - o neline - g raph
Ich würde hinzufügen --abbrev-commit --decorate, und dann ist es perfekt!
asymmetrisch
6
--abbrev-commit wird impliziert durch --oneline, nein?
Dwineman
4
@dwineman ja, Sie brauchen nicht, --abbrev-commitwenn Sie verwenden--oneline
Thomas
2
Es scheint, dass in Ihrer zweiten Zeile git log --graph --oneline --decorate --date=relative --alldas --dateArgument nutzlos ist. Ich kann kein Datum im Protokoll sehen.
Lerner Zhang
Datum wird nicht angezeigt, wenn --oneline angegeben ist
martinkunev
253
Mit Gitgraph.js können hübsche Git-Zweige ohne Repository gezeichnet werden . Schreiben Sie einfach einen Javascript-Code, der Ihre Zweige und Commits konfiguriert, und rendern Sie ihn im Browser.
Die Pfeile sollten jedoch auf Eltern zeigen, nicht auf Kinder.
jub0bs
4
@Jubobs: Guter Punkt. Das ist eine häufige Hürde für Leute, die versuchen, Git zu verstehen: Sie denken über die Abfolge der Zeit nach, anstatt über die Vererbung. Wenn Sie klarstellen, dass (fast) alles in Git relativ zu etwas Vorherigem ist, passen alle anderen Teile zusammen.
Slipp D. Thompson
6
In Bezug auf die Pfeilrichtung aus den Dokumenten: * @param {Boolean} [options.reverseArrow = false] - Pfeile auf Vorfahren zeigen lassen, wenn wahr
Scott
2
Zu Ihrer Information, nachdem ich diesen Beitrag gesehen und mit gitgraph.js gespielt habe, habe ich beschlossen, ein kleines Tool zu erstellen, das im Grunde eine Benutzeroberfläche für gitgraph.js erstellt. Es ist noch nicht fertig und die Benutzeroberfläche ist noch nicht dort, wo ich sie haben möchte, aber Beiträge sind willkommen!
Werfen
123
Aufbauend auf der TikZ & PGF , gitdagsist ein kleines LaTeX - Paket , das Sie mühelos ermöglicht produzieren Vektor-Grafiken Diagramme begehen, und vieles mehr.
Die automatische Generierung des Commit-Diagramms eines vorhandenen Repositorys ist nicht der Zweck von gitdags; Die von ihm erstellten Grafiken sind nur für Bildungszwecke gedacht .
Ich verwende es oft, um Diagramme für meine Antworten auf Git-Fragen zu erstellen, als Alternative zu ASCII-Festschreibungsdiagrammen:
Hier ist ein Beispiel für ein solches Diagramm, das die Auswirkungen einer einfachen Rebase zeigt:
\documentclass{article}\usepackage{subcaption}\usepackage{gitdags}\begin{document}\begin{figure}\begin{subfigure}[b]{\textwidth}\centering\begin{tikzpicture}% Commit DAG\gitDAG[grow right sep =2em]{
A -- B -- {
C,
D -- E,}};% Tag reference\gittag[v0p1]% node name{v0.1}% node text{above=of A}% node placement{A}% target% Remote branch\gitremotebranch[origmaster]% node name{origin/master}% node text{above=of C}% node placement{C}% target% Branch\gitbranch{master}% node name and text {above=of E}% node placement{E}% target% HEAD reference\gitHEAD{above=of master}% node placement{master}% target\end{tikzpicture}\subcaption{Before\ldots}\end{subfigure}\begin{subfigure}[b]{\textwidth}\centering\begin{tikzpicture}\gitDAG[grow right sep =2em]{
A -- B -- {
C -- D' -- E',{[nodes=unreachable] D -- E },}};% Tag reference\gittag[v0p1]% node name{v0.1}% node text{above=of A}% node placement{A}% target% Remote branch\gitremotebranch[origmaster]% node name{origin/master}% node text{above=of C}% node placement{C}% target% Branch\gitbranch{master}% node name and text {above=of E'}% node placement{E'}% target% HEAD reference\gitHEAD{above=of master}% node placement{master}% target\end{tikzpicture}\subcaption{\ldots{} and after \texttt{git rebase origin/master}}\end{subfigure}\caption{Demonstrating a typical \texttt{rebase}}\end{figure}\end{document}
@Das sieht gut aus! Ich möchte auch ein paar Zeilen zur Verwendung: Betrachten Sie einen Windows-Benutzer, auf dem überhaupt kein LaTeX installiert ist. Wie erstelle ich ein Diagramm von Grund auf neu?
VonC
1
@VonC Ich bin mir nicht sicher, aber wenn Sie LaTeX nicht installieren möchten, können Sie Ihre Grafiken möglicherweise auf ShareLatex und WriteLaTeX und dergleichen erstellen . Ich werde es mir ansehen und das Wiki erweitern, wenn ich mehr Zeit habe ... Fühlen Sie sich frei, das Paket zu bewerben:)
jub0bs
Das ist tolles Zeug! Ich werde irgendwann ein Tutorial schreiben, aber im Moment wollte ich nur erwähnen, dass Sie Ihre Grafiken mithilfe der eigenständigen Dokumentklasse nachbearbeiten können (ich verwende die Zuschneidefunktion), latex input.texein DVI generieren und schließlich verwenden können dvisvgm input.dvieine SVG mit Transparenz zu generieren. Das Konvertieren von SVG in ein Rasterformat wie PNG ist damit recht einfach convert -antialias -density 300 -background none input.svg output.png. Übrigens sehen diese Bilder mit voller Transparenz fantastisch aus . Ich
@AndreaPolci Ein Beispiel für eine Zusammenführung finden Sie unter github.com/Jubobs/gitdags/issues/3 . Die Dokumentation für gitdagsist unterwegs!
jub0bs
79
Gitg ist ein Klon von Gitk und GitX für GNOME (funktioniert auch mit KDE usw.), der ein hübsches farbiges Diagramm zeigt.
Es wird aktiv weiterentwickelt (Stand 2012). Sie können die Commits (Diagrammknoten) entweder chronologisch oder topologisch sortieren und Commits ausblenden, die nicht zu einem ausgewählten Zweig führen.
Es funktioniert gut mit großen Repositorys und komplexen Abhängigkeitsgraphen.
Beispiel-Screenshots mit den Repositorys linux-git und linux-2.6:
SourceTree ist wirklich gut. Es druckt ein gut aussehendes und mittelgroßes Verlaufs- und Zweigdiagramm aus: (Das Folgende wird in einem experimentellen Git-Projekt durchgeführt, um nur einige Zweige zu sehen). Unterstützt Windows 7+ und Mac OS X 10.6+.
Es ist auch im App Store verfügbar, daher sollte das Update automatisch funktionieren.
WebOrCode
Ich liebe das Diagramm von Sourcetree, aber ich würde lieber die Befehlszeile verwenden, und die Standardeinstellungen von Sourcetree wirken sich immer auf meine Repos aus.
SgtPooki
SourceTree besteht darauf, dass Sie ein Atlassian-Konto erstellen (oder Ihr Google-Konto verwenden und Atlassian einige Berechtigungen zum Abrufen Ihrer E-Mail- und Profilinformationen erteilen). Nach der Installation auf einem Mac (OS X El Capitan v 10.11.5) schlägt dies im Schritt "Clonning" fehl: "fatal: Keine Submodulzuordnung in .gitmodules für Pfad '<Pfad übersprungen>' gefunden" und auch eine seltsame Warnung: "Vorlagen nicht gefunden / usr / local / git / share / git-core / templates". Sehr dunkle Nachrichten, nicht so toll.
Dmitry Shevkoplyas
3
Und vergessen Sie nach der Deinstallation nicht, Ihre zuvor gewährten Google-Sicherheitsrechte aufzuräumen : myaccount.google.com/security -> Verbundene Apps und Websites -> Mit Ihrem Konto verbundene Apps -> Apps verwalten
Dmitry Shevkoplyas
60
Ich habe gerade ein Tool geschrieben, das mit HTML / Canvas ein hübsches Git-Commit-Diagramm erstellen kann.
Und stellen Sie ein jQuery-Plugin bereit, das die Verwendung vereinfacht.
Sieht gut aus. Wie erhalten Sie vorformatierte Daten, um dieses Diagramm zu zeichnen?
Olga
3
@Olga Ich füge einfach den Backend-Code zu meinem Repo hinzu. Sie können es auf Github anzeigen.
Harry Lee
56
git-forestist ein exzellentes Perl-Skript, das ich seit mehr als einem Jahr verwende und den git logBefehl kaum noch direkt direkt verwende.
Dies sind einige der Dinge, die ich an diesem Skript liebe:
Es werden Unicode-Zeichen verwendet, um die Linien im Diagramm zu zeichnen und den Diagrammlinien ein kontinuierlicheres Aussehen zu verleihen.
Sie können --reversemit der Diagrammausgabe kombinieren , was mit dem regulären git logBefehl nicht möglich ist .
Es wird git logintern verwendet, um die Liste der Commits abzurufen, sodass alle Optionen, an die Sie übergeben, git logauch an dieses Skript übergeben werden können.
Ich habe einen Alias git-forestwie folgt:
[alias]
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"
@ void.pointer - Ja, das wird es nicht, da Git-Forest ein Perl-Skript ist und Perl-Modul-Abhängigkeiten aufweist. Das Ausführen von Git unter Cygwin mit den erforderlichen Perl-Modulen ist möglicherweise die beste Alternative, wenn Sie dies unter Windows wirklich wollen :)
Tuxdude
1
Wow, dieses Repo hat viele großartige Tools. Vielen Dank!
Eldelshell
1
Funktioniert einwandfrei @MinGW (MSYS) unter Win $; CPANM installieren; dann Git.pm; Erstellen Sie einen Alias und Sie können loslegen.
Sektor
Was ist das für ein sehr schöner Terminalemulator, den Sie verwenden? Ich mag die grafische Eingabeaufforderung Indikator Dinge.
NH.
Wie installiere ich dieses "Skript"? Ich bin auf Ubuntu.
Laden Sie die Ausgabe git log --pretty='%h|%p|%d'direkt in das Tool hoch und klicken Sie dann auf den Link "graph.svg herunterladen".
Das Tool ist rein clientseitig und daher werden keine Ihrer Git-Daten für meinen Server freigegeben. Sie können HTML + JS auch lokal speichern und mit den URLs "file: ///" ausführen. Verifiziert unter Chrome 48 und Firefox 43 unter Ubuntu 12.04.
Es generiert HTML, das direkt auf jeder Seite veröffentlicht werden kann (einschließlich der Blogspot-Blogging-Engine!). Schauen Sie sich hier einige Blog-Beiträge an:
@ Jay es scheint, dass die Farbe die Einrückungsstufe dieses bestimmten Zweigs widerspiegelt, und dass Zweige zu einer anderen Spalte wechseln und daher die Farbe ändern können.
Thorbjørn Ravn Andersen
44
Basierend auf einem Graphviz-Skript, das ich in einer Antwort auf eine verwandte Frage gefunden habe , habe ich ein Ruby-Skript gehackt , das eine zusammenfassende Ansicht eines Git-Repositorys erstellt. Es entfernt die gesamte lineare Geschichte und zeigt nur "interessante" Commits an, dh solche mit mehreren Eltern, mehreren Kindern oder auf die durch einen Zweig oder ein Tag hingewiesen wird. Hier ist ein Ausschnitt des Diagramms, das für jquery generiert wird :
git-big-picture und BranchMaster sind ähnliche Tools, die versuchen, nur die allgemeine Struktur eines Diagramms anzuzeigen, indem nur angezeigt wird, wie Tags, Zweige, Zusammenführungen usw. zusammenhängen.
Ich habe es versucht, konnte aber nicht erreichen, dass dot mit der Ausgabe für unser Repo richtig funktioniert (42 Zweige, 175 Tags, 42.000 Commits) ... Schade ... Genau das habe ich gesucht!
Xavier Nodet
1
@XavierNodet, wenn Ihr Repo öffentlich ist und / oder Sie eine Fehlermeldung usw. haben, melden Sie bitte ein Problem auf GitHub. Vielen Dank!
Matt McHenry
38
Ich habe drei benutzerdefinierte Befehle hinzugefügt : git tree, git streeund git vtree. Ich werde sie in dieser Reihenfolge durchgehen.
EDIT: Dies funktioniert mit Git Version 1.9a. Der Farbwert 'auto' feiert offenbar sein Debüt in dieser Version. Es ist eine schöne Ergänzung, da Zweignamen eine andere Farbe erhalten. Dies erleichtert beispielsweise die Unterscheidung zwischen lokalen und entfernten Zweigen.
fatal: bad color value 'auto' for variable '--pretty format':(
Swivel
Es stellte sich heraus, dass es sich um eine alte Version von Git handelt. Yum hat eine ziemlich veraltete Version von Git in seinem Repo. Aus Quelle (1.9) kompiliert und es funktioniert super. Es ist auch schön! Danke @gospes!
Wirbel
No go on OS X:sed: illegal option -- r
Slipp D. Thompson
@ SlippD.Thompson: Ich benutze Linux :). Das -r steht für erweiterte reguläre Ausdrücke. Anscheinend hat die OSX-Version von sed es nicht. Vielleicht könnten Sie sed aktualisieren. Andernfalls können Sie den Befehl sed einfach ohne erweiterten regulären Ausdruck neu schreiben.
Gospes
1
Verwenden Sie für Mac OS X sed -E anstelle von -r
Baxter Lopez
37
Kommt darauf an, wie sie aussahen. Ich benutze gitx , das Bilder wie dieses macht:
Es ist lustig ... Ich hätte geschworen, dass Sie "24-Wege-Octopus Merge" sagen!
23.
4
Hat jemand aus Neugier versucht, die Zeichenroutinen von GitX (oder einem anderen GUI-Git-Tool) in eine eigenständige ausführbare Datei zu extrahieren? Wenn ich mich nicht irre, wäre es nicht schwierig, Cocoa dazu zu bringen, in eine Vektor-PDF-Datei zu zeichnen, und würde den Bedarf des OP an druckbaren Bildern mit hoher Q befriedigen.
Slipp D. Thompson
Es war auf S3 via Skitch, bevor sie ihr Ding überarbeiteten. Ich wünschte ich hätte es noch. :(
Dustin
Ersetzte es einfach durch eine Gitk-Version von lwn.net/images/ns/kernel/gitk-octopus.png , die von clojure-log.n01se.net/date/2008-12-24.html verlinkt wurde . @Dustin: hoffe das ist ok Es ist nicht dasselbe Bild, aber es dient einem ähnlichen Zweck. Aus dem Screenshot geht hervor, dass dies Teil des Linux-Kernels ist. Ich denke, Sie könnten dieses Commit finden und einen entsprechenden Gitx-Screenshot erneut aufnehmen ...
naught101
34
Für eine detailliertere Textausgabe versuchen Sie bitte:
Wie Sie sehen können, handelt es sich fast um einen Tastendruck, der Aliase speichert, basierend auf:
- Farbe: klarer Blick
--graph: Eltern visualisieren
--date-order: verständlichster Blick auf Repo
--decorate: wer ist wer
--oneline: Oft alles, was Sie über ein Commit wissen müssen
--simplify-by-Decoration: Grundlegend für einen ersten Blick (nur Tags, relevante Zusammenführungen, Zweige)
--all: Speichern von Tastenanschlägen mit allen Aliasnamen mit und ohne diese Option
--date = relative (% ar): Verstehe die Aktivität im Repo (manchmal hat ein Zweig nur wenige Commits in der Nähe des Masters, aber vor Monaten von ihm)
In der neuesten Version von git (1.8.5 und höher) können Sie von% C (auto) profitieren, wenn Sie den Platzhalter% d dekorieren
Von hier aus brauchen Sie nur noch ein gutes Verständnis der Gitrevisionen , um alles zu filtern, was Sie brauchen (so etwas wie master..develop, wo --simplify-merges bei langfristigen Verzweigungen helfen könnte).
Die Leistung hinter der Befehlszeile ist die schnelle Konfiguration, die auf Ihren Anforderungen basiert (verstehen Sie, dass ein Repo keine eindeutige Schlüsselprotokollkonfiguration ist, daher ist manchmal das Hinzufügen von --numstat oder --raw oder --name-status erforderlich. Hier git log und Aliase sind schnell, leistungsstark und (mit der Zeit) das schönste Diagramm, das Sie erzielen können. Darüber hinaus können Sie mit der Ausgabe, die standardmäßig über einen Pager angezeigt wird (sagen wir weniger), immer schnell in Ergebnissen suchen. Nicht überzeugt? Sie können das Ergebnis immer analysieren mit Projekten wie Gitgraph
Sehr schön. Hinzufügen dieser zu meiner Konfiguration. Ich empfehle jedoch,% Cred% d% Creset in% C (auto)% d% Creset zu ändern, um unterschiedliche Namen für entfernte oder lokale Zweigstellennamen zu erhalten
Wenn dies vorhanden ist, git lwird Folgendes ausgegeben:
In Git 2.12 + können Sie sogar die Linienfarben des Diagramms mithilfe der log.graphColorsKonfigurationsoption anpassen .
Das Format der Protokolle ähnelt dem Format, wobei --onelineder Autorenname (jeweils .mailmap) und das relative Autorendatum hinzugefügt werden . Beachten Sie, dass die %C(auto)Syntax, die Git anweist, die Standardfarben für Commit-Hash usw. zu verwenden, in Git> = 1.8.3 unterstützt wird .
Dies ist meine Terminalvariante, ähnlich wie viele Antworten hier. Ich mag es, die übergebenen Flags anzupassen less, um das Umbrechen von Wörtern zu verhindern.
Ich habe dies auf einen Alias für den schnellen Zugriff gesetzt, da der Befehl etwas umständlich ist.
Versuchen Sie es mit Ditaa . Es kann jedes ASCII-Diagramm in ein Bild umwandeln. Obwohl es nicht für Git-Zweige entwickelt wurde, war ich von den Ergebnissen beeindruckt.
Ich kenne kein direktes Tool, aber vielleicht können Sie ein Skript hacken, um die Daten in das Punktformat zu exportieren und mit graphviz zu rendern.
Versuchen Sie dies unter github.com/gugod/bin/blob/master/git-graphviz . Ich hatte nicht alle Abhängigkeiten in meiner Unternehmensumgebung, daher funktionierte das Ändern dieser ioBefehle in einfache Perl-Git-Protokoll-Befehle [...] für mich.
Ross Rogers
Wenn Sie auf einem Mac arbeiten und dieses Skript ausprobieren möchten, können Sie Perl mit brew install perl dotund dann cpan common::sense IO::alldie Abhängigkeiten abrufen. Dann leiten Sie die Ausgabe einfach an einen geeigneten Befehl weiter, z git-graphviz | dot -Tpng -o repo.png. Die Ausgabe unterscheidet sich jedoch nicht wesentlich von Git-Big-Picture .
jrhorn424
6
Es gibt ein funky Git-Commit-Diagramm als eine der Demos der Raphael -Webgrafikbibliothek.
Die Demo ist statisch, aber es sollte einfach genug sein, den Code zu nehmen und ihre statischen Daten gegen einen Live-Datensatz auszutauschen - ich denke, es sind nur Git-Commit-Daten im JSON-Format.
@Sven: Danke, dass du darauf hingewiesen hast. Ich habe die defekten Links für Sie korrigiert, obwohl Sie bitte bedenken, dass diese Antwort fünf Jahre alt ist und es daher möglicherweise in jüngerer Zeit eine bessere Lösung gibt.
Eine schöne und sauber aussehende tablettenartige Git-Grafikausgabe für Muscheln
mit Hashes wie üblich neben dem Graphbaum
oder in einer zusätzlichen Spalte
Bearbeiten : Sie möchten sofort beginnen, ohne Erklärungen zu lesen? Verwenden Sie Git-Alias-, Skript- oder Funktionscode-Snippets aus Abschnitt EDIT 5 unten.
In allen Antworten auf diese Frage zeigte bisher keine eine saubere, tablettenartig aussehende Ausgabe für Muscheln. Am nächsten kam diese Antwort aus den Evangelien, von denen ich ausgegangen bin.
Der Kernpunkt meines Ansatzes besteht darin, nur die Baumzeichen zu zählen, die dem Benutzer angezeigt werden. Füllen Sie sie dann auf eine persönliche Länge mit Leerzeichen.
Außer Git benötigen Sie diese Tools
grep
Einfügen
printf
sed
seq
tr
Toilette
Meistens an Bord mit jeder Linux-Distribution.
Das Code-Snippet ist
while IFS=+ read -r graph hash time branch message;do
# count needed amount of whitespaces and create them
whitespaces=$((9-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')
# show hashes besides the tree ...
#graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"
# ... or in an own column
graph_all="$graph_all$graph$whitespaces\n"
hash_all="$hash_all$(printf '%7s' "$hash") \n"
# format all other columns
time_all="$time_all$(printf '%12s' "$time") \n"
branch_all="$branch_all$(printf '%15s' "$branch")\n"
message_all="$message_all$message\n"
done < <(git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(214)%>(15,trunc)%d%C(reset)+%C(white)%s%C(reset)' && echo);
# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")
Zur Berechnung der benötigten Leerzeichen verwenden wir
sed -nl500 'l' <<< "$graph"
Um alle Zeichen (bis zu 500 pro Zeile) zu erhalten, wählen Sie nur die Baumzeichen aus: * | / \ _ und Leerzeichen mit
grep -Eo '\\\\|\||\/|\ |\*|_'
Zählen Sie sie schließlich und subtrahieren Sie das Ergebnis von unserem gewählten Längenwert, der im Beispiel 9 beträgt.
Um die berechnete Anzahl von Leerzeichen zu erzeugen, verwenden wir
seq -s' ' $whitespaces
und kürzen Sie die Positionsnummern mit
tr -d '[:digit:]'
als sie am Ende unserer Grafiklinie hinzufügen. Das ist es!
Git hat die nette Option, die Länge der Ausgabespezifizierer bereits mit der Syntax zu formatieren'%><(amount_of_characters,truncate_option)' , die Leerzeichen von links '>' oder rechts '<' hinzufügt und Zeichen von Anfang 'ltrunc', Mitte 'mtrunc' oder Ende abschneiden kann 'abschneiden'.
Es ist wichtig, dass die obigen printf-cmds die gleichen Längenwerte für die entsprechende Git-Spalte verwenden.
Viel Spaß beim Gestalten Ihrer eigenen sauberen, tablettenartig aussehenden Ausgabe nach Ihren Bedürfnissen.
Extra:
Um den richtigen Längenwert zu erhalten, können Sie das folgende Snippet verwenden
und verwenden Sie $ max_chars als den richtigen Längenwert oben.
BEARBEITEN 1 : Ich habe gerade bemerkt, dass das Unterstreichungszeichen auch im Git-Baum verwendet wird, und bearbeite die obigen Code-Schnipsel entsprechend. Wenn andere Zeichen fehlen, hinterlassen Sie bitte einen Kommentar.
BEARBEITEN 2 : Wenn Sie die Klammern um Verzweigungs- und Tag-Einträge entfernen möchten, verwenden Sie einfach "% D" anstelle von "% d" im Befehl git, wie in BEARBEITEN 3.
EDIT 3 : Vielleicht ist die Farboption "Auto" diejenige, die Sie für Verzweigungs- und Tag-Einträge am meisten bevorzugen?
Ändern Sie diesen Teil des Befehls git (Farbe 214 ).
%C(214)%>(15,trunc)%D%C(reset)
zu auto
%C(auto)%>(15,trunc)%D%C(reset)
EDIT 4 : Oder Sie mögen Ihren eigenen Farbmix für diesen Teil, eine ausgefallene Ausgabe mit blinkendem Kopf?
Um den Kopf, die Verzweigungsnamen und die Tags zuerst formatieren zu können, benötigen wir die Farboption "auto" in unserem git-Befehl wie in EDIT 3.
Dann können wir die bekannten Farbwerte durch unsere eigenen ersetzen, indem wir diese 3 Zeilen hinzufügen
# branch name styling
branch=${branch//1;32m/38;5;214m}
# head styling
branch=${branch//1;36m/3;5;1;38;5;196m}
# tag styling
branch=${branch//1;33m/1;38;5;222m}
in unserem Code-Snippet. Die Ersatzwerte ergeben die obigen Farben.
Zum Beispiel ist der Wiederbeschaffungswert für Kopf
3;5;1;38;5;196
wo 3; steht für kursiv, 5; zum Blinken und 1; 38; 5; 196 für die Farbe. Weitere Infos finden Sie hier. Hinweis: Dieses Verhalten hängt von Ihrem bevorzugten Terminal ab und kann daher möglicherweise nicht verwendet werden.
ABER Sie können einen beliebigen Farbwert auswählen.
ÜBERSICHT über die Git-Farbwerte und ANSI-Äquivalente
Wenn Sie die Ausgabe auf Ihrer Konsole für genaue Farben benötigen (das obige Bild wird durch Stapelüberlauf verkleinert), können Sie die Ausgabe mit erzeugen
function git_tably () {
unset branch_all graph_all hash_all message_all time_all max_chars
### add here the same code as under "2) as a shell-script" ###
}
und rufen Sie die Funktion git_tably (abgeleitet von tablelike) direkt unter Ihrem Git-Projektpfad oder von jedem beliebigen Ort aus mit Ihrem Git-Projektpfad als erstem Parameter auf.
2) als Shell-Skript :
Ich benutze es mit der Option, ein Git-Projektverzeichnis als ersten Parameter zu übergeben oder wenn es leer ist, das Arbeitsverzeichnis wie gewohnt zu nehmen. In seiner Gesamtheit haben wir
# edit your color/style preferences here or use empty values for git auto style
tag_style="1;38;5;222"
head_style="1;3;5;1;38;5;196"
branch_style="38;5;214"
# determine the max character length of your git tree
while IFS=+ read -r graph;do
chars_count=$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)
[[ $chars_count -gt ${max_chars:-0} ]] && max_chars=$chars_count
done < <(cd "${1:-"$PWD"}" && git log --all --graph --pretty=format:' ')
# create the columns for your prefered tablelike git graph output
while IFS=+ read -r graph hash time branch message;do
# count needed amount of whitespaces and create them
whitespaces=$(($max_chars-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')
# show hashes besides the tree ...
#graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"
# ... or in an own column
graph_all="$graph_all$graph$whitespaces\n"
hash_all="$hash_all$(printf '%7s' "$hash") \n"
# format all other columns
time_all="$time_all$(printf '%12s' "$time") \n"
branch=${branch//1;32m/${branch_style:-1;32}m}
branch=${branch//1;36m/${head_style:-1;36}m}
branch=${branch//1;33m/${tag_style:-1;33}m}
branch_all="$branch_all$(printf '%15s' "$branch")\n"
message_all="$message_all$message\n"
done < <(cd "${1:-"$PWD"}" && git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(auto)%>(15,trunc)%D%C(reset)+%C(white)%s%C(reset)' && echo);
# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")
3) als Git-Alias :
Am bequemsten ist es vielleicht, einen Git-Alias in Ihre .gitconfig einzufügen
Sie sollten in Ihrer Antwort erklären, wie diese Bash-Snippets zu ausgefallenen Git-Log-ähnlichen Befehlen werden. Man kann herausfinden, wie man die Antwort betrachtet, die man verlinkt hat, aber die Antworten sollten in sich geschlossen sein
Andras Deak
Du meinst, ich sollte das Git-Protokoll cmd im Detail erklären? Oder können Sie mir bitte ein Beispiel geben, was Sie vermissen?
Anfrage
Hinweis: Die Ausgabe des Befehls awesome git log wird von diesem Snippet verwendet, um die tablettenartige Ausgabe auf einem Terminal zu empfangen. Also umgekehrt, wie du erwähnt hast;)
Frage
Ich dachte, Sie tippen nicht jedes Mal 20 Zeilen Bash, wenn Sie dies benötigen. Es ist sinnvoll, dies als Bash-Funktion oder Git-Alias zu definieren. Die meisten Leser werden nicht versuchen, Ihren Code zu vervollständigen, damit er leicht verwendet werden kann. Das ist es was ich meinte. Wenn Sie den Code einfach in eine zufällige sh-Datei auf Ihrem Pfad einfügen, können Sie mich ignorieren.
Andras Deak
1
Aha. Danke für deinen Rat. Ich werde meine Antwort bearbeiten und einen solchen Alias hinzufügen. Normalerweise verwende ich Dateien für so "lange" Befehle, wie Sie erwähnt haben. Aber beide Wege hier zu schreiben ist viel bequemer, da stimme ich zu.
Anfrage
5
Einige Aliase in ~ / .oh-my-zsh / plugins / git / git.plugin.zsh
Für OSX-Benutzer habe ich das Beispiel @gospes genommen und es leicht für gsed ( gnu-sedinstalliert über Homebrew) geändert und die Farben angepasst (um mit einem schwarzen Hintergrund zu arbeiten, nicht sicher, wie das ursprüngliche Beispiel möglicherweise so rendern könnte, wie es im Beispiel, da es schwarzen Text auf einem Terminal mit schwarzem Hintergrund angibt).
Der Schlüssel für OSX besteht darin, zuerst gnu sed zu installieren (mit der Option -r). Am einfachsten mit Homebrew, das das vom System installierte sed nicht überschreibt, sondern stattdessen gnu sed als "gsed" installiert. Hoffe das hilft @ SlippD.Thompson, der oben kommentiert hat, dass OSX nicht funktioniert.
Antworten:
Update: Diese Antwort hat weit mehr Aufmerksamkeit erhalten, als sie verdient. Es wurde ursprünglich veröffentlicht, weil ich denke, dass die Grafiken gut aussehen und in Illustrator für eine Veröffentlichung gezeichnet werden könnten - und es gab keine bessere Lösung. Aber es gibt jetzt viel zutreffendere Antworten auf diese Frage, wie die von fracz , Jubobs oder Harry Lee ! Bitte stimmen Sie diese ab !!
Update 2: Ich habe eine verbesserte Version dieser Antwort auf die Visualisierung der Branchentopologie in der Git- Frage veröffentlicht, da sie dort weitaus angemessener ist. Diese Version enthält
lg3
Informationen zum Autor und zum Committer. Sie sollten sie also unbedingt überprüfen. Ich lasse diese Antwort aus historischen (& rep, ich gebe zu) Gründen, obwohl ich wirklich versucht bin, sie einfach zu löschen.Meine 2 ¢ : Ich habe zwei Aliase, die ich normalerweise in meine
~/.gitconfig
Datei werfe :git lg
/git lg1
Sieht wie folgt aus :und
git lg2
sieht so aus:quelle
#202020
/#555555
, Rot:#5d1a14
/#da4939
, Grün:#424e24
/#a5c261
, Gelb:#6f5028
/#ffc66d
, Blau:#263e4e
/#6d9cbe
, Magenta:#3e1f50
/#a256c7
, Cyan:#234e3f
/#62c1a1
und Weiß:#979797
/#ffffff
.--date=relative
und--abbrev-commit
sind redundant , weil Sie explizit verwenden%cr
und%h
sind.%C(auto)
Modifikator zu den refnames (%d
) hinzufügen , um schönere Farben zu erhalten. Siehe stackoverflow.com/questions/5889878/color-in-git-log/…lg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
Viele der Antworten hier sind großartig, aber für diejenigen, die nur eine einfache, einzeilige Antwort wünschen, ohne Aliase oder etwas anderes einrichten zu müssen, hier ist es:
Nicht jeder würde die
git log
ganze Zeit etwas tun , aber wenn Sie es brauchen, denken Sie daran:quelle
git config --global alias.adog "log --all --decorate --oneline --graph"
--all
so lange nach dem gesucht, dass ich gleich weinen werde (T_T) DANKE!Für die Textausgabe können Sie versuchen:
oder:
oder: Hier ist ein Graphviz-Alias zum Zeichnen des DAG-Graphen.
Ich persönlich benutze
gitx
,gitk --all
undgitnub
.quelle
--abbrev-commit --decorate
, und dann ist es perfekt!--abbrev-commit
wenn Sie verwenden--oneline
git log --graph --oneline --decorate --date=relative --all
das--date
Argument nutzlos ist. Ich kann kein Datum im Protokoll sehen.Mit Gitgraph.js können hübsche Git-Zweige ohne Repository gezeichnet werden . Schreiben Sie einfach einen Javascript-Code, der Ihre Zweige und Commits konfiguriert, und rendern Sie ihn im Browser.
oder mit
metro
Vorlage:oder mit Commit-Nachrichten, Autoren und Tags:
Testen Sie es mit JSFiddle .
Generiere es mit Git Grapher von @bsara.
quelle
Aufbauend auf der TikZ & PGF ,
gitdags
ist ein kleines LaTeX - Paket , das Sie mühelos ermöglicht produzieren Vektor-Grafiken Diagramme begehen, und vieles mehr.Die automatische Generierung des Commit-Diagramms eines vorhandenen Repositorys ist nicht der Zweck von
gitdags
; Die von ihm erstellten Grafiken sind nur für Bildungszwecke gedacht .Ich verwende es oft, um Diagramme für meine Antworten auf Git-Fragen zu erstellen, als Alternative zu ASCII-Festschreibungsdiagrammen:
Hier ist ein Beispiel für ein solches Diagramm, das die Auswirkungen einer einfachen Rebase zeigt:
quelle
:)
latex input.tex
ein DVI generieren und schließlich verwenden könnendvisvgm input.dvi
eine SVG mit Transparenz zu generieren. Das Konvertieren von SVG in ein Rasterformat wie PNG ist damit recht einfachconvert -antialias -density 300 -background none input.svg output.png
. Übrigens sehen diese Bilder mit voller Transparenz fantastisch aus . Ichgitdags
ist unterwegs!Gitg ist ein Klon von Gitk und GitX für GNOME (funktioniert auch mit KDE usw.), der ein hübsches farbiges Diagramm zeigt.
Es wird aktiv weiterentwickelt (Stand 2012). Sie können die Commits (Diagrammknoten) entweder chronologisch oder topologisch sortieren und Commits ausblenden, die nicht zu einem ausgewählten Zweig führen.
Es funktioniert gut mit großen Repositorys und komplexen Abhängigkeitsgraphen.
Beispiel-Screenshots mit den Repositorys linux-git und linux-2.6:
quelle
SourceTree ist wirklich gut. Es druckt ein gut aussehendes und mittelgroßes Verlaufs- und Zweigdiagramm aus: (Das Folgende wird in einem experimentellen Git-Projekt durchgeführt, um nur einige Zweige zu sehen). Unterstützt Windows 7+ und Mac OS X 10.6+.
http://www.sourcetreeapp.com/
quelle
Ich habe gerade ein Tool geschrieben, das mit HTML / Canvas ein hübsches Git-Commit-Diagramm erstellen kann.
Und stellen Sie ein jQuery-Plugin bereit, das die Verwendung vereinfacht.
[github] https://github.com/tclh123/commits-graph
Vorschau:
quelle
git-forest
ist ein exzellentes Perl-Skript, das ich seit mehr als einem Jahr verwende und dengit log
Befehl kaum noch direkt direkt verwende.Dies sind einige der Dinge, die ich an diesem Skript liebe:
--reverse
mit der Diagrammausgabe kombinieren , was mit dem regulärengit log
Befehl nicht möglich ist .git log
intern verwendet, um die Liste der Commits abzurufen, sodass alle Optionen, an die Sie übergeben,git log
auch an dieses Skript übergeben werden können.Ich habe einen Alias
git-forest
wie folgt:So sieht die Ausgabe auf einem Terminal aus:
quelle
Ich habe ein Web-Tool zum Konvertieren von Git-Protokollen in hübsche SVG-Diagramme geschrieben: Bit-Booster - Offline Commit Graph Drawing Tool
Laden Sie die Ausgabe
git log --pretty='%h|%p|%d'
direkt in das Tool hoch und klicken Sie dann auf den Link "graph.svg herunterladen".Das Tool ist rein clientseitig und daher werden keine Ihrer Git-Daten für meinen Server freigegeben. Sie können HTML + JS auch lokal speichern und mit den URLs "file: ///" ausführen. Verifiziert unter Chrome 48 und Firefox 43 unter Ubuntu 12.04.
Es generiert HTML, das direkt auf jeder Seite veröffentlicht werden kann (einschließlich der Blogspot-Blogging-Engine!). Schauen Sie sich hier einige Blog-Beiträge an:
http://bit-booster.blogspot.ca/
Hier ist ein Screenshot einer vom Tool generierten HTML-Beispieldatei:
http://bit-booster.com/graph.html (das Tool)
quelle
Basierend auf einem Graphviz-Skript, das ich in einer Antwort auf eine verwandte Frage gefunden habe , habe ich ein Ruby-Skript gehackt , das eine zusammenfassende Ansicht eines Git-Repositorys erstellt. Es entfernt die gesamte lineare Geschichte und zeigt nur "interessante" Commits an, dh solche mit mehreren Eltern, mehreren Kindern oder auf die durch einen Zweig oder ein Tag hingewiesen wird. Hier ist ein Ausschnitt des Diagramms, das für jquery generiert wird :
git-big-picture und BranchMaster sind ähnliche Tools, die versuchen, nur die allgemeine Struktur eines Diagramms anzuzeigen, indem nur angezeigt wird, wie Tags, Zweige, Zusammenführungen usw. zusammenhängen.
Diese Frage hat einige weitere Optionen.
quelle
Ich habe drei benutzerdefinierte Befehle hinzugefügt :
git tree
,git stree
undgit vtree
. Ich werde sie in dieser Reihenfolge durchgehen.Mit
git stree
undgit vtree
ich benutze Bash, um bei der Formatierung zu helfen.EDIT: Dies funktioniert mit Git Version 1.9a. Der Farbwert 'auto' feiert offenbar sein Debüt in dieser Version. Es ist eine schöne Ergänzung, da Zweignamen eine andere Farbe erhalten. Dies erleichtert beispielsweise die Unterscheidung zwischen lokalen und entfernten Zweigen.
quelle
fatal: bad color value 'auto' for variable '--pretty format'
:(sed: illegal option -- r
Kommt darauf an, wie sie aussahen. Ich benutze gitx , das Bilder wie dieses macht:
Sie können mit
git log --graph
gitk bei einer 24-Wege-Octopus-Zusammenführung vergleichen (ursprünglich von http://clojure-log.n01se.net/date/2008-12-24.html ):quelle
Für eine detailliertere Textausgabe versuchen Sie bitte:
Sie können einen Alias in $ HOME / .gitconfig schreiben
quelle
Dies ist meine Einstellung zu diesem Thema:
Bildschirmfoto:
Verwendungszweck:
git hist
- Zeigt den Verlauf der aktuellen Niederlassung angit hist --all
- Zeigen Sie die Grafik aller Zweige (einschließlich Fernbedienungen) an.git hist master devel
- Zeigen Sie die Beziehung zwischen zwei oder mehr Zweigengit hist --branches
- Alle lokalen Niederlassungen anzeigenHinzufügen
--topo-order
, um Commits topologisch statt nach Datum zu sortieren (Standard in diesem Alias)Leistungen:
--decorate
, also mit separaten Farben für verschiedene FilialnamenInstallieren:
quelle
gitg : Ein GTK-basierter Repository-Viewer, der neu, aber interessant und nützlich ist.
http://git.gnome.org/browse/gitg
Ich verwende ihn derzeit
quelle
GitX
und ein ziemlich guter zu sein. EmpfehlenObwohl ich manchmal gitg benutze , kehre immer zur Kommandozeile zurück:
Wie Sie sehen können, handelt es sich fast um einen Tastendruck, der Aliase speichert, basierend auf:
In der neuesten Version von git (1.8.5 und höher) können Sie von% C (auto) profitieren, wenn Sie den Platzhalter% d dekorieren
Von hier aus brauchen Sie nur noch ein gutes Verständnis der Gitrevisionen , um alles zu filtern, was Sie brauchen (so etwas wie master..develop, wo --simplify-merges bei langfristigen Verzweigungen helfen könnte).
Die Leistung hinter der Befehlszeile ist die schnelle Konfiguration, die auf Ihren Anforderungen basiert (verstehen Sie, dass ein Repo keine eindeutige Schlüsselprotokollkonfiguration ist, daher ist manchmal das Hinzufügen von --numstat oder --raw oder --name-status erforderlich. Hier git log und Aliase sind schnell, leistungsstark und (mit der Zeit) das schönste Diagramm, das Sie erzielen können. Darüber hinaus können Sie mit der Ausgabe, die standardmäßig über einen Pager angezeigt wird (sagen wir weniger), immer schnell in Ergebnissen suchen. Nicht überzeugt? Sie können das Ergebnis immer analysieren mit Projekten wie Gitgraph
quelle
Wenn Sie Slipps großartige Antwort leicht anpassen , können Sie seine Aliase verwenden, um nur einen Zweig zu protokollieren:
Wenn Sie das
--all
weglassen, können Sie es jetzt tunoder auch
quelle
Ich schlage
tig
https://github.com/jonas/tig vor , ein viel besseres Befehlszeilen-Tool für Git.Sie können Homebrew verwenden, um tig unter macOS zu installieren:
quelle
Ich habe diesen
git log
Alias~/.gitconfig
, um den Diagrammverlauf anzuzeigen:Wenn dies vorhanden ist,
git l
wird Folgendes ausgegeben:In Git 2.12 + können Sie sogar die Linienfarben des Diagramms mithilfe der
log.graphColors
Konfigurationsoption anpassen .Das Format der Protokolle ähnelt dem Format, wobei
--oneline
der Autorenname (jeweils.mailmap
) und das relative Autorendatum hinzugefügt werden . Beachten Sie, dass die%C(auto)
Syntax, die Git anweist, die Standardfarben für Commit-Hash usw. zu verwenden, in Git> = 1.8.3 unterstützt wird .quelle
git log --graph --oneline
Nur um sicherzustellen, dass Oneliner nicht verloren gingHast du es versucht
gitk
odergitk --all
? Es gibt jedoch keine Funktion zum Drucken / Speichern als Bild.quelle
--all
zeigt Ihnen alle Zweige.GitGraph
Generiert eine PNG- oder SVG-Darstellung des Commit-Verlaufs Ihres Git-Repositorys.
https://code.google.com/p/gitgraph
quelle
Dies ist meine Terminalvariante, ähnlich wie viele Antworten hier. Ich mag es, die übergebenen Flags anzupassen
less
, um das Umbrechen von Wörtern zu verhindern.Ich habe dies auf einen Alias für den schnellen Zugriff gesetzt, da der Befehl etwas umständlich ist.
quelle
Versuchen Sie es mit Ditaa . Es kann jedes ASCII-Diagramm in ein Bild umwandeln. Obwohl es nicht für Git-Zweige entwickelt wurde, war ich von den Ergebnissen beeindruckt.
Quelle (txt-Datei):
Befehl:
Ergebnis:
Es unterstützt auch Hintergrundfarben, gestrichelte Linien, verschiedene Formen und mehr. Siehe die Beispiele .
quelle
Wenn sich Ihr Repository auf Gitlab befindet, können Sie die Diagrammdarstellung verwenden, da diese in Ihrem Browser als SVG gerendert wird.
Wechseln Sie zur Diagrammansicht Ihres Repositorys, z. B. https://gitlab.com/gitlab-org/gitter/webapp/network/develop
Scrollen Sie das Diagramm nach unten (es lädt faul Commits!)
Verwenden Sie den Inspektor Ihres Browsers, um das SVG-Element in eine neue Datei zu kopieren
Öffnen Sie es in einem Renderer Ihrer Wahl, z. B. Inkscape
quelle
Ich kenne kein direktes Tool, aber vielleicht können Sie ein Skript hacken, um die Daten in das Punktformat zu exportieren und mit graphviz zu rendern.
quelle
io
Befehle in einfache Perl-Git-Protokoll-Befehle [...] für mich.brew install perl dot
und danncpan common::sense IO::all
die Abhängigkeiten abrufen. Dann leiten Sie die Ausgabe einfach an einen geeigneten Befehl weiter, zgit-graphviz | dot -Tpng -o repo.png
. Die Ausgabe unterscheidet sich jedoch nicht wesentlich von Git-Big-Picture .Es gibt ein funky Git-Commit-Diagramm als eine der Demos der Raphael -Webgrafikbibliothek.
Die Demo ist statisch, aber es sollte einfach genug sein, den Code zu nehmen und ihre statischen Daten gegen einen Live-Datensatz auszutauschen - ich denke, es sind nur Git-Commit-Daten im JSON-Format.
Die Demo ist hier: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
quelle
Eine schöne und sauber aussehende tablettenartige Git-Grafikausgabe für Muscheln
mit Hashes wie üblich neben dem Graphbaum
oder in einer zusätzlichen Spalte
Bearbeiten : Sie möchten sofort beginnen, ohne Erklärungen zu lesen? Verwenden Sie Git-Alias-, Skript- oder Funktionscode-Snippets aus Abschnitt EDIT 5 unten.
In allen Antworten auf diese Frage zeigte bisher keine eine saubere, tablettenartig aussehende Ausgabe für Muscheln. Am nächsten kam diese Antwort aus den Evangelien, von denen ich ausgegangen bin.
Der Kernpunkt meines Ansatzes besteht darin, nur die Baumzeichen zu zählen, die dem Benutzer angezeigt werden. Füllen Sie sie dann auf eine persönliche Länge mit Leerzeichen.
Außer Git benötigen Sie diese Tools
Meistens an Bord mit jeder Linux-Distribution.
Das Code-Snippet ist
Zur Berechnung der benötigten Leerzeichen verwenden wir
Um alle Zeichen (bis zu 500 pro Zeile) zu erhalten, wählen Sie nur die Baumzeichen aus: * | / \ _ und Leerzeichen mit
Zählen Sie sie schließlich und subtrahieren Sie das Ergebnis von unserem gewählten Längenwert, der im Beispiel 9 beträgt.
Um die berechnete Anzahl von Leerzeichen zu erzeugen, verwenden wir
und kürzen Sie die Positionsnummern mit
als sie am Ende unserer Grafiklinie hinzufügen. Das ist es!
Git hat die nette Option, die Länge der Ausgabespezifizierer bereits mit der Syntax zu formatieren
'%><(amount_of_characters,truncate_option)'
, die Leerzeichen von links '>' oder rechts '<' hinzufügt und Zeichen von Anfang 'ltrunc', Mitte 'mtrunc' oder Ende abschneiden kann 'abschneiden'.Es ist wichtig, dass die obigen printf-cmds die gleichen Längenwerte für die entsprechende Git-Spalte verwenden.
Viel Spaß beim Gestalten Ihrer eigenen sauberen, tablettenartig aussehenden Ausgabe nach Ihren Bedürfnissen.
Extra:
Um den richtigen Längenwert zu erhalten, können Sie das folgende Snippet verwenden
und verwenden Sie $ max_chars als den richtigen Längenwert oben.
BEARBEITEN 1 : Ich habe gerade bemerkt, dass das Unterstreichungszeichen auch im Git-Baum verwendet wird, und bearbeite die obigen Code-Schnipsel entsprechend. Wenn andere Zeichen fehlen, hinterlassen Sie bitte einen Kommentar.
BEARBEITEN 2 : Wenn Sie die Klammern um Verzweigungs- und Tag-Einträge entfernen möchten, verwenden Sie einfach "% D" anstelle von "% d" im Befehl git, wie in BEARBEITEN 3.
EDIT 3 : Vielleicht ist die Farboption "Auto" diejenige, die Sie für Verzweigungs- und Tag-Einträge am meisten bevorzugen?
Ändern Sie diesen Teil des Befehls git (Farbe 214 ).
zu auto
EDIT 4 : Oder Sie mögen Ihren eigenen Farbmix für diesen Teil, eine ausgefallene Ausgabe mit blinkendem Kopf?
Um den Kopf, die Verzweigungsnamen und die Tags zuerst formatieren zu können, benötigen wir die Farboption "auto" in unserem git-Befehl wie in EDIT 3.
Dann können wir die bekannten Farbwerte durch unsere eigenen ersetzen, indem wir diese 3 Zeilen hinzufügen
kurz vor der Linie
in unserem Code-Snippet. Die Ersatzwerte ergeben die obigen Farben.
Zum Beispiel ist der Wiederbeschaffungswert für Kopf
wo 3; steht für kursiv, 5; zum Blinken und 1; 38; 5; 196 für die Farbe. Weitere Infos finden Sie hier. Hinweis: Dieses Verhalten hängt von Ihrem bevorzugten Terminal ab und kann daher möglicherweise nicht verwendet werden.
ABER Sie können einen beliebigen Farbwert auswählen.
ÜBERSICHT über die Git-Farbwerte und ANSI-Äquivalente
Eine Liste mit der Option git color / style finden Sie hier .
Wenn Sie die Ausgabe auf Ihrer Konsole für genaue Farben benötigen (das obige Bild wird durch Stapelüberlauf verkleinert), können Sie die Ausgabe mit erzeugen
in Ihrem Git-Projektpfad, der das erste Commit aus Ihrer Git-Protokollausgabe verwendet.
EDIT 5 : Wie Mitglied "Andras Deak" erwähnt hat, gibt es einige Möglichkeiten, diesen Code zu verwenden:
1) als Alias :
Alias akzeptiert keine Parameter, aber eine Funktion kann daher einfach in Ihrer .bashrc definieren
und rufen Sie die Funktion git_tably (abgeleitet von tablelike) direkt unter Ihrem Git-Projektpfad oder von jedem beliebigen Ort aus mit Ihrem Git-Projektpfad als erstem Parameter auf.
2) als Shell-Skript :
Ich benutze es mit der Option, ein Git-Projektverzeichnis als ersten Parameter zu übergeben oder wenn es leer ist, das Arbeitsverzeichnis wie gewohnt zu nehmen. In seiner Gesamtheit haben wir
3) als Git-Alias :
Am bequemsten ist es vielleicht, einen Git-Alias in Ihre .gitconfig einzufügen
Dann rufen Sie einfach
git tably
unter einem beliebigen Projektpfad auf.Git ist so mächtig, dass Sie Kopf, Tags, ... direkt wie oben gezeigt und von hier aus ändern können .
Eine weitere ausgefallene Option ist die Auswahl der Baumfarben, mit denen Sie am meisten bevorzugen
Das gibt dir verrückt aussehende, aber immer tablettenartige Git-Log-Ausgaben
Zu viel Blinken! Nur um zu demonstrieren, was möglich ist. Zu wenige spezifizierte Farben führen zu Farbwiederholungen.
Eine vollständige .gitconfig-Referenz ist nur einen Klick entfernt.
WIEDER: Viel Spaß beim Gestalten Ihrer eigenen, sauberen, tablettenartigen Ausgabe, die Ihren Anforderungen entspricht.
quelle
Einige Aliase in ~ / .oh-my-zsh / plugins / git / git.plugin.zsh
quelle
Für OSX-Benutzer habe ich das Beispiel @gospes genommen und es leicht für gsed (
gnu-sed
installiert über Homebrew) geändert und die Farben angepasst (um mit einem schwarzen Hintergrund zu arbeiten, nicht sicher, wie das ursprüngliche Beispiel möglicherweise so rendern könnte, wie es im Beispiel, da es schwarzen Text auf einem Terminal mit schwarzem Hintergrund angibt).Der Schlüssel für OSX besteht darin, zuerst gnu sed zu installieren (mit der Option -r). Am einfachsten mit Homebrew, das das vom System installierte sed nicht überschreibt, sondern stattdessen gnu sed als "gsed" installiert. Hoffe das hilft @ SlippD.Thompson, der oben kommentiert hat, dass OSX nicht funktioniert.
quelle