Visualizzazione della topologia di ramo in git

Sto giocando con il git in isolamento sulla mia macchina, e trovo difficile mantenere un modello mentale di tutti i miei rami e impegni. So che posso fare un git log per vedere la storia del commit da dove sono, ma c’è un modo per vedere l’intera topografia del ramo, qualcosa come queste mappe ascii che sembrano essere usate ovunque per spiegare i rami?

  .-A---M---N---O---P / / / / / IBCDE \ / / / / `-------------' 

Sembra proprio che qualcuno che arriva e che cerchi di raccogliere il mio repository avrebbe difficoltà a capire esattamente cosa stava succedendo.

Immagino di essere influenzato dal browser del stream di AccuRev …

git log --graph o gitk . (Entrambi accettano anche --all , che mostrerà tutti i rami invece di quello corrente.)

Modifica: per i nomi dei rami e una vista compatta, prova: git log --graph --decorate --oneline

Di solito uso

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

Con i colors (se la tua shell è Bash):

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

Questo stamperà una rappresentazione basata su testo come questo:

 * 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 

(Si potrebbe semplicemente usare git log --format=oneline , ma legherà i messaggi di commit ai numeri, che sembra IMHO meno carino).

Per creare una scorciatoia per questo comando, potresti voler modificare il tuo file ~/.gitconfig :

 [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" 

Tuttavia, come Sodel le note Vocifero nei commenti, un comando di formattazione così lungo è difficile da memorizzare. Solitamente, non è un problema in quanto potresti inserirli nel file ~/.gitconfig . Tuttavia, se a volte è necessario accedere a una macchina remota in cui non è ansible modificare il file di configurazione, è ansible utilizzare una versione più semplice ma più veloce per digitare:

 git log --graph --oneline 

2 ¢ : Ho 3 alias (e 4 alias-alias per un utilizzo rapido) che normalmente lancio nel mio file ~/.gitconfig :

 [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 lg / git lg1 presenta così:

git lg1

git lg2 presenta così:

git lg2

e git lg3 presenta così:

git lg3

Nota: la risposta è stata copiata e migliorata in base alla risposta su stackoverflow.com/questions/1057564/pretty-git-branch-graphs poiché è molto più appropriato qui di quanto non fosse lì. Lasciamo la copia sull’altra domanda per ragioni storiche: ora è chiusa e la risposta è citata da una serie di altre risposte.

Per alcune di queste ricette (basate su git log o gitk), è ansible aggiungere --simplify-by-decoration per comprimere le parti lineari non interessanti della cronologia. Questo rende molto più visibile la topologia in una sola volta. Ora posso capire storie grandi che sarebbero incomprensibili senza questa opzione!

Ho sentito il bisogno di postare questo perché non sembra essere noto come dovrebbe essere. Non appare nella maggior parte delle domande di overflow dello stack sulla visualizzazione della cronologia, e ho impiegato un bel po ‘di ricerche per trovarlo – anche dopo aver saputo che lo volevo! Finalmente l’ho trovato in questo rapporto sui bug di Debian . La prima menzione di Stack Overflow sembra essere questa risposta di Antoine Pelisse.

Gitk volte doloroso per me da leggere.

inserisci la descrizione dell'immagine qui

Motivami a scrivere GitVersionTree .

inserisci la descrizione dell'immagine qui

“Il 99,999% del mio tempo è alla ricerca di cronologia per git lg e lo 0,001% è di git log

Voglio solo condividere 2 alias log che potrebbero essere utili. (configurare da .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 vedrà la cronologia attuale del ramo.
  • git hist vedrà l’intera storia del ramo.

Mi piace, con git log , fare:

  git log --graph --oneline --branches 

(anche con –all, per visualizzare anche i rami remoti)

Funziona con le recenti versioni di Git: introdotte dal 1.6.3 ( Gio, 7 maggio 2009 )

  • L’ --pretty=

    " --pretty=

    " della famiglia di log dei comandi ora può essere digitata come " --format=

    ".
    Inoltre, --format=%formatstring è una --pretty=tformat:%formatstring per --pretty=tformat:%formatstring .

  • " --oneline " è un sinonimo di " --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 

È inoltre ansible limitare l'intervallo di visualizzazione del registro (numero di commit):

 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 

(mostra solo gli ultimi 5 commit)


Quello che non mi piace della soluzione attualmente selezionata è:

  git log --graph 

Ha mostrato troppe informazioni (quando voglio solo vedere un breve riassunto):

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

gitk è grandioso, ma mi costringe a lasciare la sessione di shell per un'altra finestra, mentre la visualizzazione degli ultimi n commit rapidamente è spesso sufficiente.

Dai un’occhiata a Gitkraken – una GUI multipiattaforma che mostra la topologia in modo shiny.

Topologia

Ecco un breve tutorial video su alcune funzioni avanzate.

Gitg è un ottimo strumento per Linux, simile a Gitx per OS X. Basta eseguire ‘gitg’ sulla riga di comando da qualche parte all’interno della struttura ad albero del repository (stessa cosa con gitx).

Ho trovato “git-big-picture” abbastanza utile: https://github.com/esc/git-big-picture

Crea graziosi grafici 2D usando dot / graphviz invece delle viste piuttosto lineari, “unidimensionali” prodotte da gitk e amici. Con l’opzione -i mostra i punti di diramazione e unisce i commit ma lascia fuori tutto nel mezzo.

Un bel strumento basato sul web è ungit . Funziona su qualsiasi piattaforma supportata da node.js e git. C’è un video di come funziona per quelli che trovano quel tipo di cose più facile della lettura …

inserisci la descrizione dell'immagine qui

Dai un’occhiata a BranchMaster .

L’ho scritto per visualizzare la complessa struttura delle filiali, collassando tutti i commit tra di loro su una singola riga. I numeri indicano il numero di commit.

inserisci la descrizione dell'immagine qui

Giggle disegna bei grafici

Tortoise Git ha uno strumento chiamato “Revision Graph”. Se sei su Windows è facile come fare clic con il tasto destro sul repository -> Tortoise Git -> Revision Graph.

Io uso i seguenti alias.

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

Ha più informazioni nella combinazione di colors degli alias che ho visto sopra. Sembra anche abbastanza comune, quindi potresti avere la possibilità che esista nell’ambiente di altri o di poterlo menzionare nella conversazione senza doverlo spiegare.

Con screenshot e una descrizione completa qui: http://blog.kfish.org/2010/04/git-lola.html

Ho questo alias git log in ~/.gitconfig per visualizzare la cronologia del grafico:

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

Con l’alias in atto, git l mostrerà qualcosa del genere:

inserisci la descrizione dell'immagine qui

In Git 2.12 + puoi persino personalizzare i colors delle linee del grafico usando l’opzione di configurazione log.graphColors .

Per quanto riguarda il formato dei registri, è simile a --oneline , con l’aggiunta del nome dell’autore (rispettando .mailmap ) e la relativa data dell’autore . Nota che la syntax %C(auto) , che dice a Git di usare i colors di default per il commit hash, ecc. È supportata in Git> = 1.8.3 .

Ho trovato questo post sul blog che mostra un modo sintetico:

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

Generalmente creo un alias per il comando precedente:

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

e semplice basta usare gg .

Il mio alias preferito personale, tramite .gitconfig, è:

 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" 

Nessuno ha menzionato la tig ? Non piega i rami come “BranchMaster”, ma …

È veloce, corre nel terminale.

Dato che è molto veloce (controllo della tastiera +) ottieni un ottimo UX, è quasi come il mio ” ls ” per le directory che contengono repository git.

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

Ha le solite scorciatoie, / per cercare, ecc.

Il grafico di revisione

(ps è il terminale sullo sfondo di questo screenshot, sembra meglio al giorno d’oggi, ma il mio computer si rifiuta di fare uno screenshot, mi dispiace)

(pps, anch’io uso gitkraken e ha visualizzazioni molto chiare, ma è molto più pesante di tig )

Per gli utenti Mac, eseguire il checkout (non è previsto il gioco di parole) lo strumento gratuito e open source GitUp: http://gitup.co/

Mi piace il modo in cui vengono visualizzati i grafici, è più chiaro di alcuni degli altri strumenti che ho visto.

Il progetto è qui: https://github.com/git-up/GitUp

Screenshot di GitUp

Gitx è anche un fantastico strumento di visualizzazione se ti capita di essere su OS X.

Vecchio post, ma controlla SmartGit . Ricorda molto la visualizzazione del ramo HG Tortoise ed è gratuito per uso non commerciale.

Un altro comando log git. Questo con colonne a larghezza fissa :

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

Su Windows c’è uno strumento molto utile che puoi usare: git extensions. È uno strumento gui e semplifica le operazioni git.

Inoltre è open source.

http://gitextensions.github.io

Per chi utilizza l’ editor di testo VSCode , considera Git History Extension di D. Jayamanne:

inserisci la descrizione dell'immagine qui

Ho provato – --simplify-by-decoration ma tutte le mie --simplify-by-decoration non vengono mostrate. Quindi preferisco semplicemente sfogliare le linee senza i simboli “\” e “/” alle intestazioni, mantenendo sempre le linee con “(” indica i rami immediatamente dopo. Quando mostro la cronologia delle filiali, in generale non sono interessato ai commenti di commit, quindi Li rimuovo anch’io. Finisco con il seguente alias della shell.

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

Il sito ufficiale di Git ha incluso alcuni strumenti GUI specifici per piattaforms di terze parti. Hit qui git Strumenti GUI per la piattaforma Linux

Ho usato gitg e GitKraken per la piattaforma linux. Sia buono a capire l’albero di commit

possiamo renderlo più complicato?

Che ne dici di semplice git log –all –decorate –oneline –graph (ricorda A Dog = – All –Decorate –Oneline –Graph)