1088 Stimmen

Visualisierung der Zweigtopologie in Git

Ich spiele mit Git isoliert auf meinem eigenen Rechner und finde es schwierig, ein mentales Modell aller meiner Zweige und Übertragungen zu behalten. Ich weiß, ich kann eine git log aber gibt es eine Möglichkeit, die gesamte Topographie der Verzweigungen zu sehen, so etwas wie diese ASCII-Karten, die überall zur Erklärung von Verzweigungen verwendet zu werden scheinen?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Ich habe das Gefühl, dass jemand, der mein Repository aufgreift, Schwierigkeiten hätte, genau zu verstehen, was vor sich geht.

Ich schätze, ich bin von AccuRevs Stream-Browser ...

0 Stimmen

1 Stimmen

@leif81, ein halbes Duplikat, für mich. @Masi schloss gitk in seiner Frage ausdrücklich aus.

0 Stimmen

Ist damit Ihre Frage beantwortet? Hübsche Git-Zweigdiagramme

1316voto

jrockway Punkte 40754

Verwenden Sie git log --graph o gitk . (Beide akzeptieren auch --all , die alle Verzweigungen und nicht nur die aktuelle anzeigt).

Zweignamen und eine kompakte Ansicht finden Sie hier:

git log --graph --decorate --oneline

54 Stimmen

Dabei werden die Commits nicht einmal mit den Zweigen gekennzeichnet. Ich würde dies nicht als eine gute Visualisierung bezeichnen.

9 Stimmen

Danke! gitg hat auch die --all und kennzeichnet auch die Commits. Ich habe auch nie gesehen, dass man in der Dropdown-Liste alle Zweige auswählen kann.

230 Stimmen

Ich würde empfehlen git log --graph --decorate --oneline - zeigt eine Übergabe pro Zeile und ist mit Zweignamen versehen.

625voto

Slipp D. Thompson Punkte 30425

Ich habe 3 Aliasnamen (und 4 Alias-Aliase zur schnellen Verwendung) die ich normalerweise in meinem ~/.gitconfig Datei:

[alias]
    lg = lg1
    lg1 = lg1-specific --all
    lg2 = lg2-specific --all
    lg3 = lg3-specific --all

    lg1-specific = 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(auto)%d%C(reset)'
    lg2-specific = 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(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = 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 cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg / git lg1 sieht so aus:

git lg1

git lg2 sieht so aus:

git lg2

y git lg3 sieht so aus:

git lg3

Es sei darauf hingewiesen, dass dies nicht als endgültige Lösung gedacht ist - es ist eine Vorlage, die Sie nach Ihren Wünschen verändern, ergänzen und ausbessern können. Wenn Sie diese verwenden möchten, ist meine Empfehlung:

  1. Fügen Sie sie zu Ihrem .gitconfig ,
  2. Passen Sie sie nach Ihren Wünschen an (verschiedene Farben, verschiedene Zeilenanordnungen für die 2- und 3-zeilige Version, usw.),
  3. Und dann speichern Sie eine Kopie in einem Gist oder einem anderen Code-Snippet-Tool, so dass Sie es kopieren und einfügen können in .gitconfig s in der Zukunft (oder alternativ natürlich die Versionskontrolle Ihrer Dotfiles) .

Hinweis: Die Antwort wurde von der Antwort unter folgender Adresse kopiert und verbessert <a href="https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs/9074343#9074343">stackoverflow.com/questions/1057564/pretty-git-branch-graphs </a>da sie hier viel besser geeignet ist als dort.  Ich habe die Kopie der anderen Frage aus historischen Gründen zurückgelassen - sie ist jetzt geschlossen, und die Antwort wird von einer Reihe anderer Antworten referenziert.

22 Stimmen

Vorschlag: ersetzen %C(bold yellow) con %C(auto) für unterschiedliche Farben für HEAD , . y entfernte Niederlassungen ( ref ).

1 Stimmen

@Atcold Ich bin persönlich unschlüssig, was diese Änderung angeht - es gibt zwar diese unterschiedlichen Farben, aber sie sind alle invertiert (farbiger Hintergrund mit schwarzem Text), und die Zeichensetzung ( ( ) , -> ) ist am Ende matt-weiß. TL;DR: Ich finde Git's auto -Färbung nützlich, aber hässlich. Es ist jedoch nicht zu unterschätzen, dass diese Kurzbefehle bedeutete Jeder, der sie hinzufügt, sollte in Betracht ziehen, die Farben und Flaggen so zu ändern, dass sie am besten zu seinem Arbeitsablauf und seiner Terminaleinrichtung passen.

0 Stimmen

@SlippD.Thompson, ich bin mir nicht sicher, wovon Sie sprechen. Für mich sieht es ganz gut aus (siehe dies Bild ).

530voto

P Shved Punkte 90784

Ich verwende normalerweise

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

Mit Farben (wenn Ihre Schale Bash ist):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Dadurch wird eine textbasierte Darstellung wie diese gedruckt:

* 040cc7c       (HEAD, master) Manual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work successfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Sie können auch einfach die git log --format=oneline , aber es wird Commit-Meldungen mit Zahlen verbinden, was IMHO weniger schön aussieht).

Um eine Abkürzung für diesen Befehl zu erstellen, können Sie Ihr ~/.gitconfig Datei:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

Da jedoch Sodel der Lautstarke Anmerkungen in den Kommentaren, ein solch langer Formatierungsbefehl ist schwer zu merken. Normalerweise ist das kein Problem, denn Sie können ihn in die ~/.gitconfig Datei. Wenn Sie sich jedoch manchmal an einem entfernten Rechner anmelden müssen, an dem Sie die Konfigurationsdatei nicht ändern können, können Sie eine einfachere, aber schneller zu tippende Version verwenden:

git log --graph --oneline

12 Stimmen

Wenn Sie Daten mögen: git log --graph --full-history --all --color --date=short --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%ad %s"

7 Stimmen

--oneline ist ein einprägsamerer Ersatz für all die hübsche Formatierung von Deep-Magic.

1 Stimmen

@SodeltheVociferous, in der Tat habe ich mich dem Problem nicht von der Seite genähert, von der Sie sprechen; ich habe meine Antwort erweitert.

288voto

Andrew Punkte 5281

Zu jedem dieser Rezepte (basierend auf git log oder gitk) können Sie Folgendes hinzufügen --simplify-by-decoration um die uninteressanten linearen Teile der Geschichte zusammenzufassen. Dadurch wird viel mehr von der Topologie auf einmal sichtbar. Ich kann jetzt große Verläufe verstehen, die ohne diese Option unverständlich wären!

Ich hatte das Bedürfnis, dies zu veröffentlichen, weil es nicht so bekannt zu sein scheint, wie es sein sollte. Es taucht in den meisten Stack Overflow-Fragen zur Visualisierung von Geschichte nicht auf, und ich musste ziemlich lange suchen, um es zu finden - selbst nachdem ich wusste, dass ich es wollte! Schließlich fand ich es in diesem Debian-Fehlerbericht . Die erste Erwähnung auf Stack Overflow scheint zu sein diese Antwort von Antoine Pelisse.

7 Stimmen

Perfekt - genau das, wonach ich gesucht habe! Es sollte mehr Upvotes bekommen; fast jeder kennt bereits gitk/gitg/git log --graph, aber diese sind überhaupt nicht sehr nützlich, wenn man die Branch-Topologie visualisieren will und sich nicht für einzelne Commits interessiert.

8 Stimmen

Das ist genau das, was ich brauchte, fantastisch. Es ist das Einzige, was mir geholfen hat, von allen Antworten. --simplify-by-decoration macht so deutlich, was vor sich geht.

14 Stimmen

Das sollte eigentlich die Antwort sein. git log --graph --all --simplify-by-decoration funktioniert ebenfalls.

82voto

checksum Punkte 6037

Die Lektüre von Gitk ist für mich manchmal schmerzhaft:

Enter image description here

Es motivierte mich zum Schreiben GitVersionTree :

Enter image description here

4 Stimmen

@exhuma Ich habe einen PR beim Autor eingereicht, um Mono zu unterstützen (getestet auf Ubuntu 13.10 gegen Mono 2.10)

1 Stimmen

Ich habe festgestellt, dass GitVersionTree die Zweige mit der Zeit an der gleichen Stelle hält, was es einfacher macht, zu sehen, wie sich die Dinge ändern.

2 Stimmen

Ich bin gerade über das hier gestolpert. Es sieht wirklich cool aus; ich kann es kaum erwarten, es auszuprobieren. Ein Vorschlag (vielleicht haben Sie es schon), aber es könnte schön sein, mehrere Commits, die keine Forking-Punkte sind, zusammenzufassen. Das würde es einfacher machen, die Topologie des Zweigs zu sehen.

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