From 4dcc043dad35a31cb571025df3c8d8d597f28010 Mon Sep 17 00:00:00 2001 From: Martin Vuk Date: Thu, 11 Dec 2025 11:53:16 +0100 Subject: [PATCH] Refine the diagram --- git-figure.pdf | Bin 44099 -> 43956 bytes git-figure.svg | 1219 ++++++++++++++++++++++++------------------------ git-figure.typ | 66 +-- 3 files changed, 645 insertions(+), 640 deletions(-) diff --git a/git-figure.pdf b/git-figure.pdf index 9b6dd7a5d19c0d06a8cd95d7c0c3d85b8fc4bca2..5ef93df8cd6ac33a7b004c3f91e07a3cf8cd4741 100644 GIT binary patch delta 21262 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
)=cCArhUIy4~!POYfZK)Na@L_wP&?}s;fQ70Z! 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 Jeq|k%e*s(JMnM1o delta 21423 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 U>|t#~35P;Z5K3-tc@2gC12*%Ug#Z8m diff --git a/git-figure.svg b/git-figure.svg index 9f6d59b..4524014 100644 --- a/git-figure.svg +++ b/git-figure.svg @@ -5,81 +5,84 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -89,10 +92,6 @@ - - - - @@ -102,13 +101,13 @@ - - - - + + + + - + @@ -118,10 +117,6 @@ - - - - @@ -131,13 +126,13 @@ - - - - + + + + - + @@ -147,10 +142,6 @@ - - - - @@ -160,13 +151,13 @@ - - - - + + + + - + @@ -176,10 +167,6 @@ - - - - @@ -189,13 +176,13 @@ - - - - + + + + - + @@ -215,16 +202,16 @@ - - - - - - - + + + + + + + - + @@ -242,11 +229,11 @@ - - + + - + @@ -271,11 +258,11 @@ - - + + - + @@ -293,11 +280,11 @@ - - + + - + @@ -315,11 +302,11 @@ - - + + - + @@ -337,11 +324,11 @@ - - + + - + @@ -386,11 +373,11 @@ - - + + - + @@ -408,11 +395,11 @@ - - + + - + @@ -430,11 +417,11 @@ - - + + - + @@ -452,11 +439,11 @@ - - + + - + @@ -474,11 +461,11 @@ - - + + - + @@ -496,11 +483,11 @@ - - + + - + @@ -518,11 +505,11 @@ - - + + - + @@ -540,11 +527,11 @@ - - + + - + @@ -560,11 +547,11 @@ - - + + - + @@ -581,11 +568,32 @@ - - + + - + + + + + + + + + + + + + + + + + + + + + + @@ -602,11 +610,11 @@ - - + + - + @@ -623,10 +631,10 @@ - + - + @@ -646,124 +654,117 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + @@ -771,11 +772,11 @@ - - + + - + @@ -820,7 +821,7 @@ - + @@ -831,11 +832,12 @@ - - - - - + + + + + + @@ -843,11 +845,11 @@ - - + + - + @@ -890,15 +892,15 @@ - - + + - + - + @@ -911,61 +913,61 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + @@ -973,11 +975,11 @@ - - + + - + @@ -989,45 +991,49 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1080,12 +1086,12 @@ - - - - - - + + + + + + @@ -1095,16 +1101,14 @@ - - - - - - - - - - + + + + + + + + @@ -1126,15 +1130,12 @@ - - - - - - - - - + + + + + + @@ -1146,14 +1147,14 @@ - + - + - + @@ -1184,7 +1185,7 @@ - + @@ -1204,11 +1205,11 @@ - - + + - + @@ -1221,18 +1222,12 @@ - - - - - - - - - - - - + + + + + + @@ -1240,33 +1235,34 @@ - - + + - + - - + + - - - + + + - - - - - - - - - - + + + + + + + + + + + @@ -1274,11 +1270,11 @@ - - + + - + @@ -1302,11 +1298,11 @@ - - + + - + @@ -1330,11 +1326,11 @@ - - + + - + @@ -1347,18 +1343,12 @@ - - - - - - - - - - - - + + + + + + @@ -1366,11 +1356,11 @@ - - + + - + @@ -1383,15 +1373,11 @@ - - - - - - - - - + + + + + @@ -1399,11 +1385,11 @@ - - + + - + @@ -1416,20 +1402,9 @@ - - - - - - - - - - - - - - + + + @@ -1437,13 +1412,13 @@ - - - - + + + + - + @@ -1456,8 +1431,6 @@ - - @@ -1482,15 +1455,6 @@ - - - - - - - - - @@ -1629,8 +1593,8 @@ - - + + @@ -1638,6 +1602,9 @@ + + + @@ -1668,89 +1635,119 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1806,11 +1803,14 @@ - - + + - - + + + + + @@ -1824,9 +1824,6 @@ - - - @@ -1836,6 +1833,9 @@ + + + @@ -1851,33 +1851,39 @@ + + + - - + + + + + - - + + - - + + - - - - - + + + + + @@ -1902,27 +1908,24 @@ - - - - - - - - - - - + + + + + + + + @@ -1935,8 +1938,8 @@ - - + + diff --git a/git-figure.typ b/git-figure.typ index 0083433..7de2fe0 100644 --- a/git-figure.typ +++ b/git-figure.typ @@ -14,7 +14,7 @@ #let commit-object(coord, hash, name, ..args) = node( coord, align(left, [#text(size: 8pt, gray.darken(50%), raw(hash))\ #name]), corner-radius: 7pt, fill: commit-color.lighten(50%), stroke: none, ..args) -#let tree-object(coord, hash, ..args) = commit-object(coord, hash, [tree], +#let tree-object(coord, hash, content, ..args) = commit-object(coord, hash, content, width: 2cm, fill: blue.lighten(50%), ..args) #let file-object(coord, hash, name, ..args) = commit-object(coord, hash, name, width: 2cm, fill: gray.lighten(50%), ..args) @@ -91,47 +91,49 @@ commit-node((rel: (0, -1), to: ), E2h, name: ) commit-node((rel: (0, -1), to: ), E3h, fill: none, stroke: thindashed, name: ) // branches - node((rel: (-1, 0), to: ), [main], shape: hexagon, stroke: branch-color, name:
) + node((rel: (-1, 0), to: ), [main], shape: chevron, stroke: branch-color, name:
) edge(
, , "->", stroke: thin) - node((rel: (-2, 0), to: ), [hotfix], shape: hexagon, stroke: branch-color, name: ) + node((rel: (-2, 0), to: ), [hotfix], shape: chevron, stroke: branch-color, name: ) edge(, , "->", stroke: thin) // tags - node((rel: (-1, 0), to: ), [v-1.0], shape: chevron, stroke: tag-color, name: ) - edge(, , "->", stroke: thin) - node((rel: (-1, 0), to: ), [v-1.1], shape: chevron, stroke: tag-color, name: ) - edge(, , "->", stroke: thin) + node((rel: (-1, 0), to: ), [v-2.0], shape: chevron, stroke: tag-color, name: ) + edge(, , "->", stroke: thin) + node((rel: (-1, 0), to: ), [v-1.0], shape: chevron, stroke: tag-color, name: ) + edge(, , "->", stroke: thin) + node((rel: (0.5, 0), to: ), [v-1.1], shape:chevron.with(dir: left), stroke: tag-color, name: ) + edge(, , "->", stroke: thin) // enclose the tree node((rel: (0, -1), to: ), [*Version history*\ - #align(left, text(size: 8pt)[ + #align(left, text(size: 10pt)[ _Directed Acyclic Graph (DAG)_ describes version history. - Commits are nodes in DAG, while an edge connect a commit with its parent. + Commits are nodes in DAG. Commits are connected with parents. ])], stroke:none, width: 5cm, name: ) node(snap: false, enclose: (, , ), stroke: thindashed, width: 3cm, fill: gray.lighten(70%)) // branch cloud - node((rel: (-0.5, -1), to: ), [#text(branch-color.darken(20%), smallcaps[*Branches*])\ references that move along when commiting canges], + node((rel: (-0.5, -1), to: ), [#text(branch-color.darken(20%), smallcaps[*Branches*])\ references that move along when commiting changes], stroke: thin, corner-radius: 10pt, inset: 5pt, width: 4cm, name: ) edge(, , corner: left, stroke: thindotted) edge(,
, corner: left, stroke: thindotted) // tag cloud - node((rel: (-0.5, 1.5), to: ), [#text(tag-color, smallcaps[*Tags*])\ references that don't move], + node((rel: (-0.5, 1.5), to: ), [#text(tag-color, smallcaps[*Tags*])\ references that don't move], stroke: thin, corner-radius: 10pt, inset: 5pt, width: 4cm, name: ) - edge(, , corner: right, stroke: thindotted) - edge(, , corner: left, stroke: thindotted) + edge(, , corner: right, stroke: thindotted) + edge(, , corner: left, stroke: thindotted) // staging area - node((rel: (1, 0), to: ), [#smallcaps[*Staging area*]\ #text(size: 8pt)[filesystem snapshot that will be commited in - the next commit]], stroke: thindashed, corner-radius: 10pt, width: 3cm, name: ) + node((rel: (1, 0), to: ), [#smallcaps[*Staging area*]\ #text(size: 10pt)[filesystem snapshot that will be commited in + the next commit]], stroke: thindashed, corner-radius: 10pt, width: 4.5cm, name: ) edge(, , stroke: thindotted) // commit node((rel: (1, 0.5), to: ), [ - #text(commit-color, smallcaps[*Commit*])\ snapshot of filesystem tree in object store\ + #text(commit-color, smallcaps[*Commit*])\ file tree snapshot with metadata in object store\ #table(columns: 1, fill: commit-color.lighten(50%), align: left, [commit hash: #raw(E1h)], raw(block: true, " tree 65c47fee parent 16f299 -author MV ) @@ -161,7 +163,7 @@ Change foo".replace("16f299", E2h).replace("65c47fee", tree1h) edge(, , "->") edge(, , "->") // merged branch - edge(, , "->", layer: 1, label: [parent of], label-angle: auto) + edge(, , "->", layer: 1, label: [parent], label-angle: auto) edge(, , "->") edge(, , "->") // unmerged branch @@ -169,21 +171,21 @@ Change foo".replace("16f299", E2h).replace("65c47fee", tree1h) edge(, , "->") edge(, , "->", stroke: (dash: "dashed")) // object store - let obj_store = (rel: (-0.5, 1), to: ) - node((rel: (4cm, -2.2cm), to: ), align(left)[Content addressable object store \ #raw(".git/objects")], stroke: none, snap: false ) - commit-object((rel: (1.5, 2), to: ), E1h, [second commit], name: ) - commit-object((rel: (1.5, 3), to: ), "16f29a", [first commit], width: 2.8cm, name: ) - tree-object((rel:(-1, 0), to: ), tree1h, name:) + let bla_h = "d1bc32" + node((rel: (4cm, -2.5cm), to: ), align(center)[Content addressable object store \ #raw(".git/objects")], stroke: none, snap: false ) + commit-object((rel: (1.5, 2), to: ), E1h, [Add bla], name: ) + commit-object((rel: (1.5, 3), to: ), Eh, [Merge commit], name: ) + tree-object((rel:(-1, 0), to: ), tree1h, [tree], name:) edge(, , stroke: thin, "->") - tree-object((rel:(-1, 0), to: ), "e05dcd", name: ) + tree-object((rel:(-1, 0), to: ), "e05dcd",[tree], name: ) edge(, , stroke: thin, "->") - file-object((rel:(-1, -1), to: ), "cb48cd", [`new content`], name: ) - file-object((rel:(-1, 0), to: ), "077231", [`unchanged`], name: ) - file-object((rel:(-1, 1), to: ), "d1bc32", [`first content`], name: ) - edge(, , [`bar.txt`], "->", label-angle: auto, stroke: thin) - edge(, , [`foo.txt`], "->", label-angle: auto, stroke: thin) - edge(, , [`bar.txt`], "->", label-angle: auto, stroke: thin) - edge(, , [`foo.txt`], "->", label-angle: auto, stroke: thin) + file-object((rel:(-1, -0.5), to: ), "cb48cd", [`bla bla`], name: ) + file-object((rel:(-1, 0.5), to: ), "077231", [`lorem`], name: ) + file-object((rel:(-1, 1.5), to: ), bla_h, [`bla`], name: ) + edge(, , [`bar`], "->", label-angle: auto, stroke: thin) + edge(, , [`foo`], "->", label-angle: auto, stroke: thin) + edge(, , [`bar`], "->", label-angle: auto, stroke: thin) + edge(, , [`foo`], "->", label-angle: auto, stroke: thin) node((rel: (0, 0.5), to:), enclose: (, , ), stroke: thindashed, corner-radius: 5pt, fill: gray.lighten(70%), snap: false, layer: -2) // time direction