webentwicklung-frage-antwort-db.com.de

Visualisierung der Branchentopologie in git

Ich spiele mit Git auf meinem eigenen Computer und ich finde es schwierig, ein geistiges Modell aller meiner Niederlassungen und Commits aufrechtzuerhalten. Ich weiß, dass ich einen git log tun kann, um die Commit-Historie von meinem Standort aus zu sehen, aber gibt es eine Möglichkeit, die gesamte Topografie des Zweigs zu sehen, etwa diese ASCII-Karten, die anscheinend überall zur Erklärung von Zweigen verwendet werden?

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

Es fühlt sich einfach so an, als würde jemand mitkommen und mein Repository abholen, würde Schwierigkeiten haben, genau herauszufinden, was los war. 

Ich denke, ich bin beeinflusst von AccuRevs Stream-Browser ...

751
Benjol

git log --graph oder gitk. (Beide akzeptieren auch --all, wodurch alle Zweige statt nur der aktuelle Zweig angezeigt werden.)

Bearbeiten: Für Zweignamen und eine kompakte Ansicht versuchen Sie Folgendes: git log --graph --decorate --oneline

924
jrockway

Ich benutze normalerweise

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

Mit Farben (wenn Ihre Shell 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 folgt gedruckt:

* 040cc7c       (HEAD, master) Mannual 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 succesfully
| *   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 einfach git log --format=oneline verwenden, aber es werden Commit-Nachrichten an Zahlen gebunden, was IMHO weniger schön aussieht).

Um eine Verknüpfung für diesen Befehl zu erstellen, können Sie Ihre ~/.gitconfig-Datei bearbeiten:

[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 in den Kommentaren Sodel the Vociferous notiert wird, ist ein langer Formatierungsbefehl schwer zu merken. Normalerweise ist dies kein Problem, da Sie es möglicherweise in die ~/.gitconfig-Datei einfügen. Wenn Sie sich jedoch manchmal an einem Remote-Computer anmelden müssen, an dem Sie die Konfigurationsdatei nicht ändern können, können Sie eine einfachere, aber schnellere Version eingeben:

git log --graph --oneline
447
P Shved

Ich habe 3 Aliasnamen (und 4 Alias-Aliasnamen für die schnelle Verwendung), die ich normalerweise in meine ~/.gitconfig-Datei stecke:

[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git 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 lggit lg1 sieht folgendermaßen aus:

git lg1

git lg2 sieht so aus:

git lg2

und git lg3 sieht so aus:

git lg3

_ / Hinweis: Die Antwort wurde aus stackoverflow.com/questions/1057564/pretty-git-branch-graphs kopiert und verbessert, da sie hier viel geeigneter ist als dort. Aus historischen Gründen wurde die Kopie der anderen Frage belassen - sie ist jetzt geschlossen, und die Antwort wird von einer Reihe anderer Antworten referenziert.

367

Zu einem dieser Rezepte (basierend auf Git Log oder Gitk) können Sie --simplify-by-decoration hinzufügen, um die uninteressanten linearen Teile des Verlaufs zu reduzieren. Dadurch wird viel mehr von der Topologie auf einmal sichtbar. Ich kann jetzt große Geschichten verstehen, die ohne diese Option unverständlich wären!

Ich hatte das Bedürfnis, dies zu posten, weil es nicht so bekannt zu sein scheint, wie es sein sollte. In den meisten Stack-Overflow-Fragen zum Thema Visualisierung von Historie erscheint es nicht, und ich musste lange suchen, auch wenn ich wusste, dass ich es wollte! Ich fand es schließlich in diesem Debian Bug Report . Die erste Erwähnung bei Stack Overflow scheint diese Antwort von Antoine Pelisse zu sein.

211
Andrew

Gitk manchmal schmerzhaft für mich zu lesen.

enter image description here

Motiviere mich, GitVersionTree zu schreiben.

enter image description here

62
checksum

"99,999% meiner Zeit sucht nach git lg in der Historie, und 0,001% stammen von git log"

Sie möchten nur zwei Protokoll-Aliasnamen freigeben, die möglicherweise nützlich sind. (konfigurieren von .gitconfig)

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg wird den aktuellen Zweigverlauf anzeigen.
  • git hist wird den gesamten Zweigverlauf anzeigen.
45
Yeo

Ich mag es mit git log zu tun:

 git log --graph --oneline --branches

(auch mit --all, um auch entfernte Zweige anzusehen)

Funktioniert mit den letzten Git-Releases: eingeführt since 1.6.3 ( Do, 7. Mai 2009 )

  • Die Option "--pretty=<style>" für die Protokollfamilie der Befehle kann jetzt als "--format=<style>" geschrieben werden.
    Außerdem ist --format=%formatstring eine Abkürzung für --pretty=tformat:%formatstring.

  • "--oneline" ist ein Synonym für "--pretty=oneline --abbrev-commit".

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Sie können auch die Dauer der Protokollanzeige einschränken (Anzahl der Commits):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(Nur die letzten 5 Commits anzeigen)


Was mir an der aktuell ausgewählten Lösung nicht gefällt, ist:

 git log --graph

Es wurden viel zu viele Informationen angezeigt (wenn ich nur eine kurze Zusammenfassung betrachten möchte):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk ist großartig, zwingt mich jedoch, die Shell-Sitzung für ein anderes Fenster zu verlassen, während das Anzeigen der letzten n-Commits schnell genug ist.

40
VonC

Werfen Sie einen Blick auf Gitkraken - eine plattformübergreifende GUI, die die Topologie übersichtlich darstellt.

 Topology

Hier ist ein kurzes Video-Tutorial über einige erweiterte Funktionen.

39
pylang

Gitg ist ein großartiges Tool für Linux, ähnlich wie Gitx für OS X. Führen Sie einfach 'gitg' in der Befehlszeile von irgendwo in der Baumstruktur Ihres Repositorys aus (ebenso wie bei gitx).

30
Jack Senechal

Ich fand "git-big-picture" recht nützlich: https://github.com/esc/git-big-picture

Es erstellt hübsche 2D-Diagramme mit Punkt/Graphviz anstelle der eher linearen, "eindimensionalen" Ansichten, die Gitk und Freunde erzeugen. Mit der Option -i werden die Verzweigungspunkte und Merge-Commits angezeigt, alles dazwischen wird jedoch weggelassen. 

22
Frank Osterfeld

Ein Web-basiertes Tool von Nice ist ungit . Sie kann auf jeder Plattform ausgeführt werden, die von node.js & git unterstützt wird. Es gibt ein Video , wie es für diejenigen funktioniert, die solche Dinge einfacher finden als lesen.

enter image description here

22
Sardathrion

Schauen Sie sich BranchMaster an.

Ich habe es geschrieben, um komplexe Zweigstrukturen zu visualisieren, indem ich alle Commits zwischen ihnen auf eine einzige Zeile reduziere. Die Zahlen geben die Anzahl der Commits an.

enter image description here

17
stroyer

Giggle zeichnet schöne Diagramme

12
Renat

Tortoise Git hat ein Werkzeug namens "Revisionsgraph". Wenn Sie mit Windows arbeiten, klicken Sie einfach mit der rechten Maustaste auf Ihr Repo -> Tortoise Git -> Revision Graph.

11
Christian Adam

Niemand hat tig erwähnt? Es faltet keine Äste wie "BranchMaster", aber ...

Es geht schnell, läuft im Terminal.

Weil es so schnell ist (+ Tastatursteuerung), erhalten Sie eine großartige UX. Es ist fast wie meine "ls" für Verzeichnisse, die Git-Repositories enthalten.

https://jonas.github.io/tig/

Es hat die üblichen Abkürzungen, / für die Suche usw.

The revision graph

(ps. es ist das Terminal im Hintergrund dieses Screenshots, es sieht heutzutage besser aus, aber mein Computer lehnt es ab, einen Screenshot zu machen, sorry)

(pps. Ich benutze auch Gitkraken und habe wirklich klare Visualisierungen, aber es ist viel schwerer als tig)

10
wires

Ich verwende folgende Aliasnamen. 

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

Es hat mehr Informationen im Farbschema als die Aliase, die ich oben gesehen habe. Es scheint auch ziemlich üblich zu sein, so dass Sie möglicherweise eine Chance haben, dass diese in der Umgebung anderer vorhanden ist oder in Gesprächen erwähnt werden kann, ohne es erklären zu müssen.

Mit Screenshots und einer vollständigen Beschreibung hier: http://blog.kfish.org/2010/04/git-lola.html

10
Lokist

Ich habe diesen git log-Alias ​​in ~/.gitconfig, um den Diagrammverlauf anzuzeigen:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

Wenn der Alias ​​vorhanden ist, zeigt git l Folgendes:

 enter image description here

In Git 2.12 + können Sie sogar die Linienfarben des Diagramms mithilfe der Konfigurationsoption log.graphColors anpassen. 

Das Format der Protokolle ist ähnlich zu --oneline , wobei der Autorenname (unter Beachtung von .mailmap) und das relative Autorendatum hinzugefügt wird. Beachten Sie, dass die %C(auto)-Syntax, mit der Git angewiesen wird, die Standardfarben für Commit-Hash usw. zu verwenden, in Git> = 1.8.3 unterstützt wird.

8
Eugene Yarmash

Für Mac-Benutzer checken Sie das kostenlose Open Source-Tool GitUp: http://gitup.co/ aus (kein Wortspiel vorgesehen).

Ich mag die Art und Weise, wie die Grafiken angezeigt werden, sie ist klarer als einige der anderen Werkzeuge, die ich gesehen habe.

Das Projekt ist hier: https://github.com/git-up/GitUp

 GitUp screenshot

7
Edward T

Ich habe diesen Blogbeitrag gefunden, der einen kurzen Weg zeigt:

git log --oneline --abbrev-commit --all --graph --decorate --color

Normalerweise erstelle ich einen Alias ​​für den obigen Befehl:

alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'

und verwenden Sie einfach gg.

6
Sadegh

Wenn Sie den VSCode-Texteditor verwenden, beachten Sie die Git History Extension von D. Jayamanne:

 enter image description here

6
pylang

Mein persönlicher Lieblingsalias via .gitconfig ist:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
6
xero

Gitx ist auch ein fantastisches Visualisierungstool für OS X.

5
kEND

Alte Post, aber check out SmartGit . Es erinnert stark an die Tortoise HG-Zweigvisualisierung und ist für den nichtkommerziellen Gebrauch kostenlos.

Ein weiterer Befehl für git log. Dieses mit Spalten mit fester Breite :

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
5
David

Unter Windows gibt es ein sehr nützliches Werkzeug, das Sie verwenden können: Git-Erweiterungen. Es ist ein Gui-Tool und macht das Arbeiten mit Git sehr einfach.

Es ist auch Open Source. 

http://gitextensions.github.io

2
loneshark99

können wir es komplizierter machen?

Wie wäre es mit einfachen Git log --all --decorate --oneline --graph (denken Sie an A Dog = --Alle --Decorate --Oneline --Graph)

1
pixel

Ich habe --simplify-by-decoration versucht, aber alle Zusammenführungen werden nicht angezeigt. Ich schneide also stattdessen einfach Zeilen mit "\" und "/" - Symbolen in den Kopfzeilen ab, wobei die Zeilen immer mit "(") gekennzeichnet sind und unmittelbar darauf Äste angezeigt werden. Wenn Sie die Zweiggeschichte anzeigen, bin ich generell nicht an Commit-Kommentaren interessiert Ich entferne sie auch und am Ende bekomme ich den folgenden Shell-Alias.

gbh () { 
    git log --graph --oneline --decorate "[email protected]" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
1
Isaac To

Auf der offiziellen Website von Git wurden einige plattformspezifische GUI-Tools von Drittanbietern eingetragen. Klicken Sie hier git GUI-Tools für Linux-Plattform

Ich habe gitg und GitKraken für die Linux-Plattform verwendet. Beide sind gut, um den Commit-Baum zu verstehen

0
rookie4evr