Bastante git charts de twig

He visto algunos libros y artículos que tienen charts muy bonitos de git branches y commits. ¿Cómo puedo hacer imágenes imprimibles de alta calidad de la historia de Git?

Actualización: esta respuesta ha recibido mucha más atención de la que merece. Originalmente se publicó porque creo que los charts se ven bien y se pueden dibujar en Illustrator para una publicación, y no había una solución mejor. ¡Pero ahora existen muchas más respuestas aplicables a esta Q, como las de fracz , Jubobs o Harry Lee ! Por favor, ve a votar esos !!

Actualización 2: He publicado una versión mejorada de esta respuesta a la topología de la twig Visualizar en la pregunta de git , ya que es mucho más apropiado allí. Esa versión incluye lg3 , que muestra tanto la información del autor como la del committer, por lo que realmente deberías lg3 vistazo. Dejando esta respuesta por razones históricas (y rep, admitiré), aunque estoy realmente tentado de simplemente eliminarla.

2 ¢ : Tengo dos alias que normalmente lanzo en mi file ~/.gitconfig :

 [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 ve así:
git lg1

y git lg2 ve así:
git lg2

Muchas de las respuestas aquí son geniales, pero para aquellos que solo quieren una línea simple hasta la respuesta sin tener que configurar alias o algo extra, aquí está:

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

No todo el mundo estaría haciendo un logging de git todo el time, pero cuando lo necesites solo restring: " A Dog " = git log – a ll – d ecorate – o neline – g raph

enter image description here

Para salida de text puede intentar:

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

o:

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

o: aquí hay un alias graphviz para dibujar el gráfico DAG.

Yo personalmente uso gitx , gitk --all y gitnub .

Gitgraph.js permite dibujar twigs de git bonitas sin un repository. Simplemente escriba un código Javascript que configure sus twigs y confirmaciones y lo renderice en el browser.

 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); 

gráfico de muestra generado con Gitgraph.js

o con la plantilla de metro :

Tema del metro de GitGraph.js

o con posts de commit, autores y tags:

GitGraph con mensajes de compromiso

Pruébalo con JSFiddle .

Generarlo con Git Grapher por @bsara.

Construido sobre TikZ y PGF , gitdags es un pequeño package LaTeX que te permite producir charts de compromiso de charts vectoriales sin esfuerzo, y mucho más.

La generación automática del gráfico de confirmación de un repository existente no es el propósito de gitdags ; los charts que produce solo tienen fines educativos .

A menudo lo uso para producir charts para mis respuestas a las preguntas de Git, como una alternativa a los charts de confirmación ASCII:

  • ¿Cómo puedo hacer una corrección de errores en el maestro e integrarlo en mi (s) twig (s) less estable (s)?
  • ¿Cómo se compromete git? ¿Trabajo de enmienda, exactamente?
  • ¿Por qué Git me dice "No está actualmente en ninguna sucursal" después de ejecutar "git checkout origin / <branch>"?
  • ¿Cuál es la diferencia entre combinar master en branch y fusionar branch en master?
  • Git rebase –preserve-merges falla

Aquí hay un ejemplo de un gráfico que demuestra los efectos de una simple rebase:

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} 

Gitg es un clon de Gitk y GitX para GNOME (también funciona en KDE, etc.) que muestra un gráfico bastante colorido.

Se desarrolla activamente (a partir de 2012). Te permite orderar los commits (nodos de gráfico) cronológicamente o topológicamente y ocultar confirmaciones que no conducen a una twig seleccionada.

Funciona bien con grandes repositorys y charts complejos de dependencia.

Capturas de pantalla de muestra, que muestran los repositorys de linux-git y linux-2.6:

linux-git

linux-2.6

SourceTree es realmente bueno. Imprime un historial y un gráfico de twigs de buen tamaño y mediano tamaño (lo siguiente se hace en un proyecto experimental de Git solo para ver algunas twigs). Admite Windows 7+ y Mac OS X 10.6+.

enter image description here

http://www.sourcetreeapp.com/

git-forest es una excelente secuencia de commands de perl que he estado utilizando durante más de un año y casi no uso el command de git log directamente.

Estas son algunas de las cosas que amo de este guion:

  • Utiliza caracteres Unicode para dibujar las líneas en el gráfico dando un aspecto más continuo a las líneas del gráfico.
  • Puede combinar --reverse con la salida del gráfico, lo cual no es posible con el command regular git log .
  • Utiliza el git log internamente para tomar la list de confirmaciones, por lo que todas las opciones que pase al git log también se pueden pasar a este script.

Tengo un alias usando git-forest siguiente manera:

 [alias] tree = "forest --pretty=format:\"%C(networking)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse" 

Así es como se ve la salida en un terminal:

enter image description here

Acabo de escribir una herramienta que puede generar git commit commit gráfico con HTML / Canvas.

Y proporcione un plugin jQuery que lo haga fácil de usar.

[github] https://github.com/tclh123/commitsgraph

Avance:

avance

Basado en un script de Graphviz que encontré en una respuesta a una pregunta relacionada , he pirateado un script de ruby que crea una vista de resumen de un repository de git. Elimina toda la historia lineal y solo muestra confirmaciones "interesantes", es decir, aquellas con múltiples padres, varios hijos o apuntadas por una twig o label. Aquí hay un fragment del gráfico que genera para jquery :

muestra jquery

git-big-picture y BranchMaster son herramientas similares que intentan mostrar solo la estructura de alto nivel de un gráfico, mostrando solo cómo se relacionan tags, twigs, fusiones, etc.

Esta pregunta tiene más opciones.

Depende de cómo se veían. Yo uso gitx que hace fotos como esta:

trama simple

Puede comparar git log --graph vs. gitk en una fusión de pulpo de 24 vías (originalmente de http://clojure-log.n01se.net/date/2008-12-24.html ):

Combinación de pulpos git 24-way. La URL original era <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </ code>

He agregado tres commands personalizados: git tree , git stree y git vtree . Los revisaré en ese order.

 [alias] tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n %C(black)[%cr]%C(reset) %x09%C(black)%an: %s %C(reset)' 

enter image description here

Con git stree y git vtree bash para ayudar con el formateo.

 [alias] logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++ %C(bold black)%an%C(reset)%C(black): %s%C(reset)' stree = !bash -c '" \ while IFS=+ read -r hash time branch message; do \ timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \ timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \ printf \"%${timelength}s %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\"; \ done < <(git logx && echo);"' 

git_stree


 [alias] logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++ %C(bold black)%an%C(reset)%C(black): %s%C(reset)' vtree = !bash -c '" \ while IFS=+ read -r hash time branch message; do \ timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \ timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \ printf \"%${timelength}s %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\"; \ done < <(git logx && echo);"' 

git_vtree


EDITAR: Esto funciona con la versión 1.9a de git. El valor de color 'auto' aparentemente está haciendo su debut en esta versión. Es una buena adición porque los nombres de las twigs obtendrán un color diferente. Esto hace que sea más fácil distinguir entre twigs locales y remotas, por ejemplo.

Para un resultado de text más detallado, intente:

 git log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short 

Puede escribir un alias en $ HOME / .gitconfig

 [alias] graph = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short 

gitg : un visor de repository basado en gtk, que es nuevo pero interesante y útil
http://git.gnome.org/browse/gitg
Lo uso actualmente

Aunque a veces utilizo gitg , siempre vuelvo a la command-line:

 [alias] #quick look at all repo loggsa = log --color --date-order --graph --oneline --decorate --simplify-by-decoration --all #quick look at active branch (or refs pointed) loggs = log --color --date-order --graph --oneline --decorate --simplify-by-decoration #extend look at all repo logga = log --color --date-order --graph --oneline --decorate --all #extend look at active branch logg = log --color --date-order --graph --oneline --decorate #Look with date logda = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\" --all logd = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\" #Look with relative date logdra = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\" --all logdr = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\" loga = log --graph --color --decorate --all # For repos without subject body commits (vim repo, git-svn clones) logt = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" logta = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all logtsa = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all --simplify-by-decoration 

Como puede ver, casi se trata de un alias para save las teclas, basado en:

  • –color: mirada clara
  • –graph: visualizar padres
  • – date de pedido: más comprensible mirar repo
  • –decorate: quién es quién
  • –online: muchas veces todo lo que necesitas saber sobre un commit
  • –simplify-by-decoration: básico para un primer vistazo (solo tags, fusiones relevantes, twigs)
  • –todo: guardando las pulsaciones de teclas con todos los alias con y sin esta opción
  • –date = relative (% ar): Entiende la actividad en el repository (a veces una twig se compromete cerca de master pero hace unos meses)

Consulte en la versión más reciente de git (1.8.5 y superior) puede beneficiarse de% C (automático) en el marcador de position de decoración% d

A partir de aquí, todo lo que necesita es una buena comprensión de las reflexiones para filtrar lo que necesite (algo así como master..develop, donde –simplify-merges podría ayudar con las twigs de largo ploop)

El poder detrás de la línea de command es la configuration rápida en function de sus necesidades (comprender que un repository no es una configuration de logging de keys única, por lo que a veces se necesita agregar –numstat o –raw, o –name-status. Aquí git log y los alias son rápidos, potentes y (con el time) el gráfico más bonito que se puede lograr. Aún más, con la salida mostrada por defecto a través de un buscapersonas (digamos less) siempre puede search rápidamente los resultados. ¿No está convencido? Siempre puede analizar el resultado con proyectos como gitgraph

Escribí una herramienta web para convertir loggings de git en bonitos charts SVG: Bit-Booster – Herramienta de dibujo de charts fuera de línea

Suba los resultados de git log --pretty='%h|%p|%d' directamente a la herramienta y luego click el enlace "download graph.svg".

La herramienta es del lado del cliente puro, por lo que ninguno de sus datos de Git se comparte con mi server. También puede save el HTML + JS localmente y ejecutarlo usando "file: ///" URL's. Verificado en Chrome 48 y Firefox 43 en Ubuntu 12.04.

Genera HTML que se puede publicar directamente en cualquier página (¡incluido el motor de blog blogspot!). Eche un vistazo a algunas de las publicaciones del blog aquí:

http://bit-booster.blogspot.ca/

Aquí hay una captura de pantalla de un file HTML de muestra generado por la herramienta:

http://bit-booster.com/graph.html (la herramienta)

Ajustando la increíble respuesta de Slipp , puedes usar sus alias para registrar solo una twig:

 [alias] lgBranch1 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative lgBranch2 = log --graph --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(bold white)— %an%C(reset)' --abbrev-commit lg = !"git lg1" 

Al dejar de lado el --all lo puedes hacer ahora

 git lgBranch1 <branch name> 

o incluso

 gitlgBranch1 --all 

GitGraph

Genera una representación PNG o SVG del historial de confirmaciones de su repository Git.

https://code.google.com/p/gitgraph

Tengo este alias de git log en ~/.gitconfig para ver el historial de charts:

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

Con esto en su lugar, git l producirá algo así como:

enter image description here

En Git 2.12 + incluso puedes personalizar los colors de línea del gráfico usando la opción de configuration log.graphColors .

En cuanto al formatting de los loggings, es similar a --oneline , con la adición del nombre del autor ( .mailmap ) y la date relativa del autor . Tenga en count que la syntax %C(auto) , que le dice a Git que use los colors pnetworkingeterminados para el hash de confirmación, etc., se admite en Git> = 1.8.3 .

Esta es mi opinión sobre este asunto:

Captura de pantalla:

Captura de pantalla

Uso:

git hist – Muestra el historial de la twig actual

git hist --all – Muestra el gráfico de todas las twigs (incluidos los controles remotos)

git hist master devel – Muestra la relación entre dos o más twigs

git hist --branches – Muestra todas las sucursales locales

Agregue --topo-order para orderar confirmaciones topológicamente, en lugar de por date (pnetworkingeterminado en este alias)

Beneficios:

  • Se ve como simple – --decorate , por lo que con colors separados para diferentes nombres de twigs
  • Agrega un correo electrónico de committer
  • Agrega date relativa y absoluta de compromiso
  • Sorts commits por date

Preparar:

git config –global alias.hist "log –graph –date-order –date = short –pretty = formatting: '% C (auto)% h% d% C (reset)% s% C (negrita) azul)% ce% C (restablecer)% C (verde)% cr (% cd) '"

¿Has gitk o gitk --all ? Sin embargo, no tiene una function print / save img as.

 git -c core.pager='less -SRF' log --oneline --graph --decorate 

Esta es mi variación terminal, similar a muchas respuestas aquí. Me gusta ajustar las banderas pasadas a less para evitar el ajuste de palabras.

ejemplo de salida

Configuré esto como un alias para un acceso rápido ya que el command es un poco engorroso.

Hay un gracioso Git commit graph como una de las demos de la biblioteca de charts web de Raphael .

La demostración es estática, pero debería ser lo suficientemente fácil tomar el código y cambiar sus datos estáticos por un set de datos en vivo. Creo que solo se trata de datos de confirmación de Git en formatting JSON.

La demostración está aquí: http://dmitrybaranovskiy.github.io/raphael/github/impact.html

No sé sobre una herramienta directa, pero tal vez puedas hackear una secuencia de commands para exportar los datos en formatting de puntos y renderizarlos con graphviz.

Prueba ditaa . Puede transformar cualquier diagtwig ASCII en una image. Aunque no fue diseñado con las twigs de Git en mente, me impresionaron los resultados.

Fuente (file txt):

  +--------+ | hotfix | +---+----+ | --*<---*<---* ^ | \--*<---* | +---+----+ | master | +--------+ 

Mando:

 java -jar ditaa0_9.jar ascii-graph.txt 

Resultado:

enter image description here

También es compatible con colors de background, líneas punteadas, diferentes forms y más. Vea los ejemplos .

Para los usuarios de OSX, tomé el ejemplo de @gospes y lo modifiqué ligeramente para gsed ( gnu-sed instalado a través de homebrew) y ajusté los colors (para trabajar con un background negro, no estoy seguro de cómo el ejemplo original podría representar la forma en que lo hace en el ejemplo dado que especifica text negro en un terminal con un background negro).

 [alias] # tree, vtree, stree support logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(bold black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++ %C(bold black)%an%C(reset)%C(bold black): %s%C(reset)' tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n %C(bold black)[%cr]%C(reset) %x09%C(bold black)%an: %s %C(reset)' stree = !bash -c '" \ while IFS=+ read -r hash time branch message; do \ timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \ timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \ printf \"%${timelength}s %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\"; \ done < <(git logx && echo);"' | less -r vtree = !bash -c '" \ while IFS=+ read -r hash time branch message; do \ timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \ timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \ printf \"%${timelength}s %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\"; \ done < <(git logx && echo);"' | less -r 

The key for OSX is to first install gnu sed (which has the -r option). Most easily done with homebrew, which will not overwrite the system-installed sed, but will instead install gnu sed as "gsed". Hope this helps @SlippD.Thompson who commented above about OSX not working.

    Intereting Posts