diff --git a/git-figure.pdf b/git-figure.pdf
new file mode 100644
index 0000000..818188d
Binary files /dev/null and b/git-figure.pdf differ
diff --git a/git-figure.typ b/git-figure.typ
index d28f519..e5bbf46 100644
--- a/git-figure.typ
+++ b/git-figure.typ
@@ -42,11 +42,10 @@
let (A, B, C, D, E, F, G) = ((2, 6), (2, 5), (2, 4), (2, 3), (2, 2), (2, 1), (2, 0))
let (B1, B2) = ((3, 4.5), (3, 3.5))
let (E1, E2, E3) = ((3, 1.5), (3, 0.5), (3, -0.5))
- let (Br1, Br2) = ((F.at(0)-1, F.at(1)), (E2.at(0)-1, E2.at(1)))
- let (T1, T2) = ((E.at(0)-1, E.at(1)), (B.at(0)-1, B.at(1)))
let (Ah, Bh, Ch, Dh, Eh, Fh, Gh) = ("0a3d36", "ce2d1d", "0459b3", "b62527", "93f4ee", "7b67bd", "a6eb69")
let (B1h, B2h) = ("2e4289", "7ed6de")
let (E1h, E2h, E3h) = ("aa083c", "3f28d1", "2e9986")
+ let tree1h = "43e2f7"
//e05dcdcb48cd0772313f")
/*
let refs = (12cm, store.at(1))
@@ -55,7 +54,6 @@
let branches = (0.5, 0)
let stage =(3.7, 0)
let mc = (2.5, D.at(1)-0.5)
- node(store, [Content addressable object store], stroke: none, width: 4cm)
commit-object(co1, "e264a1", [second commit])
commit-object(co2, "16f29", [first commit], width: 2.8cm)
tree-object(tree1, "16f29")
@@ -63,10 +61,7 @@
file-object(f1, "16f29", [`new content`])
file-object(f2, "16f29", [`unchanged`])
file-object(f3, "16f29", [`first content`])
- edge(tree1, f2, [`bar.txt`], "->", label-angle: auto)
- edge(tree1, f1, [`foo.txt`], "->", label-angle: auto)
- edge(tree2, f2, [`bar.txt`], "->", label-angle: auto)
- edge(tree2, f3, [`foo.txt`], "->", label-angle: auto)
+
edge(co2, tree2, "->")
edge(co1, tree1, "->")
@@ -74,13 +69,18 @@
node(store, stroke: thin, enclose:(co1, f3, f1))
*/
commit-node(A, Ah, name: )
+ node((rel:(-1, 0), to: ), [Initial commit], corner-radius: 10pt, stroke: thin, name:)
+ edge(, , stroke: thindotted)
commit-node(B, Bh, name: )
commit-node(C, Ch, name: )
commit-node(D, Dh, name: )
+ node((rel: (0.5, -0.5), to: ), [Merge commit\ #text(size: 8pt)[commit with two parents]], stroke: thin,
+ corner-radius: 10pt, name: )
+ edge(, , stroke: thindotted)
+
commit-node(E, Eh, name: )
commit-node(F, Fh, name: )
// merge commit
- //node(mc, [Merge commit\ #text(size: 8pt)[commit with two parents]], stroke: thin, corner-radius: 10pt)
// merged branch
commit-node((rel: (1, -0.5), to: ), B1h, name: )
commit-node((rel: (0, -1), to: ), B2h, name: )
@@ -105,6 +105,35 @@
Commits are nodes in DAG, while an edge connect a commit with its parent.
])], 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 moves along when commiting canges],
+ 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],
+ stroke: thin, corner-radius: 10pt, inset: 5pt, width: 4cm, name: )
+ 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: )
+ edge(, , stroke: thindotted)
+ // commit
+ node((rel: (1, 0.5), to: ), [
+ #text(commit-color, smallcaps[*Commit*])\ #align(left)[snapshot of filesystem tree 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 )
+ edge(, , corner: right, stroke: thindotted)
// refs
/*
node(refs, stroke: thin, inset:5pt, snap: false, enclose: (refs, (refs.at(0)+1cm, refs.at(1)+1cm)),
@@ -114,27 +143,13 @@
`hotfix`: `8dd6d4b...`
])
)
- node(branches, [#text(branch-color.darken(20%))[*BRANCH*]\ #text[reference that moves along when commiting canges]],
- stroke: thin, corner-radius: 10pt, inset: 5pt, width: 4cm) /*, enclose: (
+ /*, enclose: (
(branches.at(0)-0.5, branches.at(1)),
(branches.at(0)+1, branches.at(1))))*/
- node(tags, [#text(tag-color)[*TAG*]\ reference that don't move],
- stroke: thin, corner-radius: 10pt, inset: 5pt, width: 4cm)/*, enclose: ((tags.at(0)-0.5, tags.at(1)), (tags.at(0)+1, tags.at(1))))*/
- node(stage, [*Staging area*\ #text(size: 8pt)[filesystem snapshot that will be commited in the next commit]], stroke: thindashed, corner-radius: 10pt, width: 3cm)
- node(commit, [
- #text(commit-color)[*COMMIT*]\ snapshot of filesystem tree in object store\
- #rect[
- ```
-tree 65c47fee...
-parent 16f299...
-author MV , , "->")
edge(, , "->")
edge(, , "->", stroke: (dash: "dashed"))
- // refs
- /*
- edge(Br1, branches, stroke: thindotted)
- edge(Br2, branches, stroke: thindotted)
- edge(T1, tags, stroke: thindotted)
- edge(T2, tags, stroke: thindotted)
- edge(commit, E, stroke: thindotted)
- edge(stage, E3, stroke: thindotted)
- edge((-0.5, A.at(1)), (-0.5, G.at(1)), "->", label: [time], label-side: left, label-angle: 90deg)
- edge(mc, D, stroke: thindotted)
- */
+ // 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:)
+ edge(, , stroke: thin, "->")
+ tree-object((rel:(-1, 0), to: ), "e05dcd", 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)
+ node((rel: (0, 0.5), to:), enclose: (, , ), stroke: thindashed, corner-radius: 5pt,
+ fill: gray.lighten(70%), snap: false, layer: -2)
+ // time direction
+ edge((0.2, 2.5), (0.2, 1), "->", label: [time], label-side: left, label-angle: 90deg,
+ stroke: thindashed)
+ edge(, , stroke: thin, "->", corner: right)
}
)
\ No newline at end of file