1947 Stimmen

Hübsche Git-Zweigdiagramme

Ich habe gesehen, dass einige Bücher und Artikel wirklich hübsche Diagramme von Git-Zweigen und -Übertragungen enthalten. Wie kann ich qualitativ hochwertige, druckbare Bilder des Git-Verlaufs erstellen?

8 Stimmen

Ich habe ein Python-Skript erstellt, um einen Graphiz-Graphen zu erstellen! Sehen Sie es sich an. github.com/chode/git-graph

8 Stimmen

Wenn Sie eine hohe Qualität und Druckqualität wünschen, kann mein Tool ( bit-booster.com/graph.html ) wandelt "git log" in SVG um. Für weitere Informationen, siehe meine Antwort .

3 Stimmen

Suchen Sie ein Werkzeug, um Ihre eigene Git-Historie zu visualisieren - oder - ein Diagramm-Tool, das eine Möglichkeit bietet, schöne "Git-Zweige" zu zeichnen?

2395voto

Slipp D. Thompson Punkte 30425

Update 2: Ich habe eine verbesserte Version dieser Antwort in die Visualisierung der Zweigtopologie in Git Frage, da sie dort viel besser aufgehoben ist. Diese Version enthält lg3 die sowohl den Autor als auch den Committer anzeigt, also sollten Sie sich das unbedingt ansehen. Ich hinterlasse diese Antwort aus historischen Gründen (und aus Gründen der Reputation, wie ich zugeben muss), obwohl ich wirklich versucht bin, sie einfach zu löschen.

Meine zwei Cent : Ich habe zwei Aliasnamen, die ich normalerweise in meinen ~/.gitconfig Datei:

[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"

git lg / git lg1 sieht so aus: git lg1

y git lg2 sieht so aus: git lg2


(Anmerkung: Es gibt inzwischen sehr viel zutreffendere Antworten auf diese Frage, z. B. <a href="https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs/9074343#24107223">Fracz </a>, <a href="https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs/9074343#25468472">Jubobs' </a>o <a href="https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs/9074343#21116867">Harry Lee's </a>!)

37 Stimmen

Ja, ich weiß. Normale und helle/fette Farben sind: Schwarz #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 .

3 Stimmen

@Turbo: Bei mir sind die Farben in den Profileinstellungen für meine Terminal-App (Terminal.app) änderbar. Die Terminal-App, die Sie verwenden, unterstützt möglicherweise nicht die Änderung der Farben, die für bestimmte ANSI-Farben angezeigt werden. Außerdem wurde der Bindestrich (em dash, um genau zu sein) mit Option-Umschalttaste-[Bindestrich-Minus-Taste] erstellt. Ich bin wohl fälschlicherweise davon ausgegangen, dass alle aktuellen Plattformen mit Unicode auf dem neuesten Stand sind.

0 Stimmen

@slipp-d-thompson, --decorate Option verwendet die Kurzbezeichnung ref Namen.

2126voto

Patoshi パトシ Punkte 18947

Viele der Antworten hier sind großartig, aber für diejenigen, die nur eine einfache einzeilige Antwort auf den Punkt haben wollen, ohne Aliase oder irgendetwas anderes einrichten zu müssen, hier ist sie:

git log --all --decorate --oneline --graph

Nicht jeder würde eine git log aber wenn Sie sie brauchen, denken Sie einfach daran:

" Ein Hund " = git log -- a II. d ecorate -- o neline -- g raph

Enter image description here

483 Stimmen

git config --global alias.adog "log --all --decorate --oneline --graph"

14 Stimmen

Ich habe nach dem --all so lange, dass ich kurz davor bin zu weinen (T_T) DANKE!

8 Stimmen

Zusammenfassung der verschiedenen Optionen: --all = So tun, als ob alle refs in refs/ auf der Kommandozeile als commit> aufgelistet sind. --no-decorate, --decorate[=short|full|no] = Gibt die refs-Namen aller angezeigten Commits aus. Wenn short angegeben wird, werden die Ref-Namen-Präfixe refs/heads/, refs/tags/ und refs/remotes/ nicht ausgegeben. Wenn full angegeben wird, wird der vollständige ref-Name (einschließlich Präfix) gedruckt. --oneline = Dies ist eine Abkürzung für "--pretty=oneline --abbrev-commit", die zusammen verwendet wird. --graph= Zeichnet eine textbasierte grafische Darstellung der Commit-Historie

438voto

keo Punkte 4884

Für die textuelle Ausgabe können Sie es versuchen:

git log --graph --abbrev-commit --decorate --date=relative --all

Oder:

git log --graph --oneline --decorate --all

Oder: hier ist a Graphviz Alias für das Zeichnen der DAG Grafik.

Ich persönlich benutze gitx , gitk --all y gitnub .

0 Stimmen

Ich mag diese beiden, da sie sich gut zwischen 'git log' (kurz) und 'git log' (lang) aufteilen, so dass ich die kurze ( oneline ) Version, aber wenn ich mehr Details benötige, verwende ich die lange Version mit allen Commit-Details. Dann habe ich zwei schöne Mappings von <leader>gl (kurz) und <leader>gll (lang) in Vim.

0 Stimmen

Ist es möglich, zu ignorieren Author Abschnitt?

308voto

fracz Punkte 19245

Gitgraph.js erlaubt es, hübsche Git-Zweige ohne ein Repository zu zeichnen. Schreiben Sie einfach einen JavaScript-Code, der Ihre Branches und Commits konfiguriert, und stellen Sie ihn im Browser dar. Interaktive Dokumente sind verfügbar.

var gitGraph = new GitGraph({
   template: "blackarrow",
   mode: "compact",
   orientation: "horizontal",
   reverseArrow: true
});

var master = gitGraph.branch("master").commit().commit();
var develop = gitGraph.branch("develop").commit();
master.commit();
develop.commit().commit();
develop.merge(master);

sample graph generated with Gitgraph.js

Oder mit metro Vorlage:

GitGraph.js metro theme

Oder mit Commit-Nachrichten, Autoren und Tags:

GitGraph with commit messages

Testen Sie es mit JSFiddle .

Erzeugen Sie es mit Git Grapher by @bsara.

3 Stimmen

Juhu, das ist wirklich toll! Eingestellt in fiddle jsfiddle.net/guan1oz1 damit Sie es gleich ausprobieren können.

18 Stimmen

Die Pfeile sollten jedoch auf die Eltern und nicht auf die Kinder zeigen.

0 Stimmen

@Jubobs, ich lese diese Grafik von rechts nach links, was wohl ebenso seltsam ist.

145voto

jub0bs Punkte 53314

Aufgebaut auf TikZ & PGF , gitdags ist ein kleines LaTeX-Paket, mit dem Sie mühelos Vektorgrafiken, Diagramme und mehr erstellen können.

Die automatische Generierung des Commit-Graphen eines bestehenden Repositorys ist pas den Zweck der gitdags Die erzeugten Diagramme sind nur für Bildungszwecke .

Ich verwende es oft, um Diagramme für meine Antworten auf Git-Fragen zu erstellen, als Alternative zu ASCII-Commit-Diagrammen:

Hier ist ein Beispiel für ein solches Diagramm, das die Auswirkungen einer einfachen Umbasierung zeigt:

enter image description here

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

2 Stimmen

@Das sieht toll aus! Ich hätte auch gerne ein paar Hinweise zur Verwendung: Nehmen wir an, ein Windows-Benutzer hat überhaupt kein LaTeX installiert. Wie kann man ein Diagramm von Grund auf erstellen?

1 Stimmen

@VonC Ich bin mir nicht sicher, aber wenn Sie LaTeX nicht installieren wollen, können Sie Ihre Diagramme vielleicht auf ShareLatex y WriteLaTeX und Ähnliches. Ich werde mir das ansehen und das Wiki erweitern, wenn ich mehr Zeit habe... Fühlen Sie sich frei, das Paket zu fördern :)

0 Stimmen

Das ist eine tolle Sache! Ich werde irgendwann ein Tutorial schreiben, aber im Moment möchte ich nur erwähnen, dass Sie Ihre Graphen mit der documentclass standalone nachbearbeiten können (ich verwende die Zuschneidefunktion), mit latex input.tex um ein dvi zu erzeugen, und dann schließlich mit dvisvgm input.dvi um ein SVG mit Transparenz zu erzeugen. Die Konvertierung von SVG in ein Rasterformat wie PNG ist ganz einfach mit convert -antialias -density 300 -background none input.svg output.png . Übrigens, diese Bilder sehen erstaunlich mit voller Transparenz. Ich arbeite noch an der Schriftartfrage... i.imgur.com/1Xu2Ry5.png

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