Add a draft introduction to Git from graphs
12
images/git-graphs/Makefile
Normal file
|
@ -0,0 +1,12 @@
|
|||
INPUTS=$(wildcard *.m4)
|
||||
TARGETS=$(INPUTS:.m4=.svg)
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGETS)
|
||||
|
||||
%.svg: %.m4 master.dot merged.dot feature.dot bugfix.dot
|
||||
m4 $< | dot -Tsvg -o $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(TARGETS)
|
4
images/git-graphs/bugfix.dot
Normal file
|
@ -0,0 +1,4 @@
|
|||
digraph bugfix {
|
||||
node[group=bugfix];
|
||||
b1 -> b2;
|
||||
}
|
4
images/git-graphs/feature.dot
Normal file
|
@ -0,0 +1,4 @@
|
|||
digraph feature {
|
||||
node[group=feature];
|
||||
f1 -> f2 -> f3;
|
||||
}
|
4
images/git-graphs/master.dot
Normal file
|
@ -0,0 +1,4 @@
|
|||
digraph master {
|
||||
node[group=master];
|
||||
m1 -> m2 -> m3 -> m4 -> m5 -> m6 -> m7 -> m8 -> m9 -> m10;
|
||||
}
|
4
images/git-graphs/merged.dot
Normal file
|
@ -0,0 +1,4 @@
|
|||
digraph merged {
|
||||
node[group=merged];
|
||||
m2 -> r1 -> r2 -> m5;
|
||||
}
|
13
images/git-graphs/repo.m4
Normal file
|
@ -0,0 +1,13 @@
|
|||
digraph repo {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`feature.dot')
|
||||
include(`bugfix.dot')
|
||||
m7 -> f1;
|
||||
m9 -> b1;
|
||||
}
|
199
images/git-graphs/repo.svg
Normal file
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo Pages: 1 -->
|
||||
<svg width="487pt" height="77pt"
|
||||
viewBox="0.00 0.00 486.80 76.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 72.8)">
|
||||
<title>repo</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-63.4C18.445,-63.4 31.2437,-63.4 40.6149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-65.5001 46.7053,-63.4 40.7053,-61.3001 40.7054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-63.4C65.245,-63.4 78.0437,-63.4 87.4149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-65.5001 93.5053,-63.4 87.5053,-61.3001 87.5054,-65.5001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-60.5133C64.3573,-55.8666 79.2669,-46.6278 89.1887,-40.4797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-42.2205 94.3604,-37.275 88.154,-38.6503 90.3663,-42.2205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-63.4C112.045,-63.4 124.8437,-63.4 134.2149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-65.5001 140.3053,-63.4 134.3053,-61.3001 134.3054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-63.4C158.845,-63.4 171.6437,-63.4 181.0149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-65.5001 187.1053,-63.4 181.1053,-61.3001 181.1054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-63.4C205.645,-63.4 218.4437,-63.4 227.8149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-65.5001 233.9053,-63.4 227.9053,-61.3001 227.9054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-63.4C252.445,-63.4 265.2437,-63.4 274.6149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-65.5001 280.7053,-63.4 274.7053,-61.3001 274.7054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-63.4C299.245,-63.4 312.0437,-63.4 321.4149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-65.5001 327.5053,-63.4 321.5053,-61.3001 321.5054,-65.5001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M289.8723,-58.8488C297.565,-49.3152 315.4978,-27.0908 325.6505,-14.5083"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="327.3393,-15.7595 329.4728,-9.7713 324.0707,-13.1221 327.3393,-15.7595"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-63.4C346.045,-63.4 358.8437,-63.4 368.2149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-65.5001 374.3053,-63.4 368.3053,-61.3001 368.3054,-65.5001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-63.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-63.4C392.845,-63.4 405.6437,-63.4 415.0149,-63.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-65.5001 421.1053,-63.4 415.1053,-61.3001 415.1054,-65.5001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node16" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-60.5133C391.9573,-55.8666 406.8669,-46.6278 416.7887,-40.4797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="417.9663,-42.2205 421.9604,-37.275 415.754,-38.6503 417.9663,-42.2205"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-34.4C112.045,-34.4 124.8437,-34.4 134.2149,-34.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-36.5001 140.3053,-34.4 134.3053,-32.3001 134.3054,-36.5001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-37.2867C157.9573,-41.9334 172.8669,-51.1722 182.7887,-57.3203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-59.1497 187.9604,-60.525 183.9663,-55.5795 181.754,-59.1497"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-5.4C346.045,-5.4 358.8437,-5.4 368.2149,-5.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-7.5001 374.3053,-5.4 368.3053,-3.3001 368.3054,-7.5001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-5.4C392.845,-5.4 405.6437,-5.4 415.0149,-5.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-7.5001 421.1053,-5.4 415.1053,-3.3001 415.1054,-7.5001"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node17" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-34.4C439.645,-34.4 452.4437,-34.4 461.8149,-34.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-36.5001 467.9053,-34.4 461.9053,-32.3001 461.9054,-36.5001"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8 KiB |
27
images/git-graphs/repo_labels.m4
Normal file
|
@ -0,0 +1,27 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`feature.dot')
|
||||
include(`bugfix.dot')
|
||||
m7 -> f1;
|
||||
m9 -> b1;
|
||||
|
||||
node[shape=box, fontname="monospace"];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
HEAD [style=dashed];
|
||||
master;
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
m10 -> HEAD;
|
||||
m10 -> master;
|
||||
f3 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
243
images/git-graphs/repo_labels.svg
Normal file
|
@ -0,0 +1,243 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="597pt" height="154pt"
|
||||
viewBox="0.00 0.00 596.80 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-90.5C18.445,-90.5 31.2437,-90.5 40.6149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-92.6001 46.7053,-90.5 40.7053,-88.4001 40.7054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-90.5C65.245,-90.5 78.0437,-90.5 87.4149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-92.6001 93.5053,-90.5 87.5053,-88.4001 87.5054,-92.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-61.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-87.6133C64.3573,-82.9666 79.2669,-73.7278 89.1887,-67.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-69.3205 94.3604,-64.375 88.154,-65.7503 90.3663,-69.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-90.5C112.045,-90.5 124.8437,-90.5 134.2149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-92.6001 140.3053,-90.5 134.3053,-88.4001 134.3054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-90.5C158.845,-90.5 171.6437,-90.5 181.0149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-92.6001 187.1053,-90.5 181.1053,-88.4001 181.1054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-90.5C205.645,-90.5 218.4437,-90.5 227.8149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-92.6001 233.9053,-90.5 227.9053,-88.4001 227.9054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-90.5C252.445,-90.5 265.2437,-90.5 274.6149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-92.6001 280.7053,-90.5 274.7053,-88.4001 274.7054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-90.5C299.245,-90.5 312.0437,-90.5 321.4149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-92.6001 327.5053,-90.5 321.5053,-88.4001 321.5054,-92.6001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M289.2707,-85.9071C296.7389,-74.7367 315.9921,-45.9392 326.2815,-30.5491"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="328.2676,-31.3567 329.8567,-25.2016 324.7761,-29.0223 328.2676,-31.3567"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-90.5C346.045,-90.5 358.8437,-90.5 368.2149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-92.6001 374.3053,-90.5 368.3053,-88.4001 368.3054,-92.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-90.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-90.5C392.845,-90.5 405.6437,-90.5 415.0149,-90.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-92.6001 421.1053,-90.5 415.1053,-88.4001 415.1054,-92.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node16" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-87.0161C392.1054,-81.2972 407.4587,-69.8151 417.3706,-62.4023"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="418.6867,-64.0404 422.234,-58.7652 416.1713,-60.6769 418.6867,-64.0404"/>
|
||||
</g>
|
||||
<!-- HEAD -->
|
||||
<g id="node18" class="node">
|
||||
<title>HEAD</title>
|
||||
<polygon fill="none" stroke="#ffffff" stroke-dasharray="5,2" points="576.8,-146 526.8,-146 526.8,-123 576.8,-123 576.8,-146"/>
|
||||
<text text-anchor="middle" x="551.8" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">HEAD</text>
|
||||
</g>
|
||||
<!-- m10->HEAD -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>m10->HEAD</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M431.6703,-92.5468C439.4468,-95.6663 454.8052,-101.7488 468,-106.5 487.6277,-113.5676 510.0515,-121.0282 526.7612,-126.4696"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node19" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-105 518.8,-105 518.8,-82 584.8,-82 584.8,-105"/>
|
||||
<text text-anchor="middle" x="551.8" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3049,-90.6367C447.3259,-90.9966 488.8665,-91.992 518.7491,-92.708"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-61.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-61.5C112.045,-61.5 124.8437,-61.5 134.2149,-61.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-63.6001 140.3053,-61.5 134.3053,-59.4001 134.3054,-63.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-64.3867C157.9573,-69.0334 172.8669,-78.2722 182.7887,-84.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-86.2497 187.9604,-87.625 183.9663,-82.6795 181.754,-86.2497"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-20.5C346.045,-20.5 358.8437,-20.5 368.2149,-20.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-22.6001 374.3053,-20.5 368.3053,-18.4001 368.3054,-22.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-20.5C392.845,-20.5 405.6437,-20.5 415.0149,-20.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-22.6001 421.1053,-20.5 415.1053,-18.4001 415.1054,-22.6001"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node20" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="588.8,-23 514.8,-23 514.8,0 588.8,0 588.8,-23"/>
|
||||
<text text-anchor="middle" x="551.8" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f3->feature -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>f3->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3049,-20.0899C446.6562,-19.0583 485.2149,-16.2865 514.6859,-14.1679"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node17" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-55.5C439.645,-55.5 452.4437,-55.5 461.8149,-55.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-57.6001 467.9053,-55.5 461.9053,-53.4001 461.9054,-57.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node21" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-64 518.8,-64 518.8,-41 584.8,-41 584.8,-64"/>
|
||||
<text text-anchor="middle" x="551.8" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0383,-55.2842C487.3946,-54.9645 503.7044,-54.3404 518.7679,-53.764"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
37
images/git-graphs/repo_labels_alice.m4
Normal file
|
@ -0,0 +1,37 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
include(`feature.dot')
|
||||
m7 -> f1;
|
||||
f3 -> f4;
|
||||
|
||||
node[color=green];
|
||||
edge[color=green];
|
||||
node[group=feature];
|
||||
bobf1 -> bobf2 -> bobf3 -> bobf4;
|
||||
m7 -> bobf1;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
//HEAD [style=dashed];
|
||||
master;
|
||||
"bob/feature";
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
//m10 -> HEAD;
|
||||
m10 -> master;
|
||||
bobf4 -> "bob/feature";
|
||||
f4 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
298
images/git-graphs/repo_labels_alice.svg
Normal file
|
@ -0,0 +1,298 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="630pt" height="154pt"
|
||||
viewBox="0.00 0.00 629.80 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-116.5C18.445,-116.5 31.2437,-116.5 40.6149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-118.6001 46.7053,-116.5 40.7053,-114.4001 40.7054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-116.5C65.245,-116.5 78.0437,-116.5 87.4149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-118.6001 93.5053,-116.5 87.5053,-114.4001 87.5054,-118.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-113.6133C64.3573,-108.9666 79.2669,-99.7278 89.1887,-93.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-95.3205 94.3604,-90.375 88.154,-91.7503 90.3663,-95.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-116.5C112.045,-116.5 124.8437,-116.5 134.2149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-118.6001 140.3053,-116.5 134.3053,-114.4001 134.3054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-116.5C158.845,-116.5 171.6437,-116.5 181.0149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-118.6001 187.1053,-116.5 181.1053,-114.4001 181.1054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-116.5C205.645,-116.5 218.4437,-116.5 227.8149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-118.6001 233.9053,-116.5 227.9053,-114.4001 227.9054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-116.5C252.445,-116.5 265.2437,-116.5 274.6149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-118.6001 280.7053,-116.5 274.7053,-114.4001 274.7054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-116.5C299.245,-116.5 312.0437,-116.5 321.4149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-118.6001 327.5053,-116.5 321.5053,-114.4001 321.5054,-118.6001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M289.5657,-112.113C297.1213,-102.2649 315.57,-78.2185 325.8264,-64.8502"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="327.6786,-65.8859 329.6648,-59.8472 324.3464,-63.3293 327.6786,-65.8859"/>
|
||||
</g>
|
||||
<!-- bobf1 -->
|
||||
<g id="node19" class="node">
|
||||
<title>bobf1</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="333" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->bobf1 -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>m7->bobf1</title>
|
||||
<path fill="none" stroke="#00ff00" d="M288.4573,-111.4356C295.6672,-95.2595 318.2505,-44.5919 328.2055,-22.257"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="330.1305,-23.0961 330.6551,-16.7609 326.2943,-21.3862 330.1305,-23.0961"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-116.5C346.045,-116.5 358.8437,-116.5 368.2149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-118.6001 374.3053,-116.5 368.3053,-114.4001 368.3054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-116.5C392.845,-116.5 405.6437,-116.5 415.0149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-118.6001 421.1053,-116.5 415.1053,-114.4001 415.1054,-118.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-113.6133C391.9573,-108.9666 406.8669,-99.7278 416.7887,-93.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="417.9663,-95.3205 421.9604,-90.375 415.754,-91.7503 417.9663,-95.3205"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node23" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="601.3,-146 535.3,-146 535.3,-123 601.3,-123 601.3,-146"/>
|
||||
<text text-anchor="middle" x="568.3" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge23" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M431.9818,-117.1836C448.6643,-119.3028 500.4714,-125.8838 535.195,-130.2947"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-87.5C112.045,-87.5 124.8437,-87.5 134.2149,-87.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-89.6001 140.3053,-87.5 134.3053,-85.4001 134.3054,-89.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-90.3867C157.9573,-95.0334 172.8669,-104.2722 182.7887,-110.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-112.2497 187.9604,-113.625 183.9663,-108.6795 181.754,-112.2497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-87.5C439.645,-87.5 452.4437,-87.5 461.8149,-87.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-89.6001 467.9053,-87.5 461.9053,-85.4001 461.9054,-89.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node26" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="601.3,-105 535.3,-105 535.3,-82 601.3,-82 601.3,-105"/>
|
||||
<text text-anchor="middle" x="568.3" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge26" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0522,-87.8574C489.9058,-88.5436 514.4155,-90.0932 535.0086,-91.3952"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node16" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-55.5C346.045,-55.5 358.8437,-55.5 368.2149,-55.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-57.6001 374.3053,-55.5 368.3053,-53.4001 368.3054,-57.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node17" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-55.5C392.845,-55.5 405.6437,-55.5 415.0149,-55.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-57.6001 421.1053,-55.5 415.1053,-53.4001 415.1054,-57.6001"/>
|
||||
</g>
|
||||
<!-- f4 -->
|
||||
<g id="node18" class="node">
|
||||
<title>f4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-53.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f3->f4 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>f3->f4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-55.2548C439.645,-54.9425 452.4437,-54.3956 461.8149,-53.9951"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="462.0005,-56.0892 467.9053,-53.7348 461.8211,-51.893 462.0005,-56.0892"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node25" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="605.3,-64 531.3,-64 531.3,-41 605.3,-41 605.3,-64"/>
|
||||
<text text-anchor="middle" x="568.3" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f4->feature -->
|
||||
<g id="edge25" class="edge">
|
||||
<title>f4->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0522,-53.4404C489.1875,-53.3336 511.2314,-53.1014 530.8739,-52.8944"/>
|
||||
</g>
|
||||
<!-- bobf2 -->
|
||||
<g id="node20" class="node">
|
||||
<title>bobf2</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="379.8" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- bobf1->bobf2 -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>bobf1->bobf2</title>
|
||||
<path fill="none" stroke="#00ff00" d="M338.7386,-11.5C346.045,-11.5 358.8437,-11.5 368.2149,-11.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="368.3054,-13.6001 374.3053,-11.5 368.3053,-9.4001 368.3054,-13.6001"/>
|
||||
</g>
|
||||
<!-- bobf3 -->
|
||||
<g id="node21" class="node">
|
||||
<title>bobf3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="426.6" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- bobf2->bobf3 -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>bobf2->bobf3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M385.5386,-11.5C392.845,-11.5 405.6437,-11.5 415.0149,-11.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="415.1054,-13.6001 421.1053,-11.5 415.1053,-9.4001 415.1054,-13.6001"/>
|
||||
</g>
|
||||
<!-- bobf4 -->
|
||||
<g id="node22" class="node">
|
||||
<title>bobf4</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- bobf3->bobf4 -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>bobf3->bobf4</title>
|
||||
<path fill="none" stroke="#00ff00" d="M432.3386,-11.5C439.645,-11.5 452.4437,-11.5 461.8149,-11.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="461.9054,-13.6001 467.9053,-11.5 461.9053,-9.4001 461.9054,-13.6001"/>
|
||||
</g>
|
||||
<!-- bob/feature -->
|
||||
<g id="node24" class="node">
|
||||
<title>bob/feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="621.8,-23 514.8,-23 514.8,0 621.8,0 621.8,-23"/>
|
||||
<text text-anchor="middle" x="568.3" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">bob/feature</text>
|
||||
</g>
|
||||
<!-- bobf4->bob/feature -->
|
||||
<g id="edge24" class="edge">
|
||||
<title>bobf4->bob/feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0522,-11.5C486.3943,-11.5 499.9857,-11.5 514.3864,-11.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
30
images/git-graphs/repo_labels_bob.m4
Normal file
|
@ -0,0 +1,30 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
node[color=green];
|
||||
edge[color=green];
|
||||
include(`feature.dot')
|
||||
m7 -> f1;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
//HEAD [style=dashed];
|
||||
master;
|
||||
"alice/feature";
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
//m10 -> HEAD;
|
||||
m10 -> master;
|
||||
f3 -> "alice/feature";
|
||||
b2 -> bugfix;
|
||||
}
|
232
images/git-graphs/repo_labels_bob.svg
Normal file
|
@ -0,0 +1,232 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="647pt" height="113pt"
|
||||
viewBox="0.00 0.00 646.80 113.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 109)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-81.5C18.445,-81.5 31.2437,-81.5 40.6149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-83.6001 46.7053,-81.5 40.7053,-79.4001 40.7054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-81.5C65.245,-81.5 78.0437,-81.5 87.4149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-83.6001 93.5053,-81.5 87.5053,-79.4001 87.5054,-83.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-78.6133C64.3573,-73.9666 79.2669,-64.7278 89.1887,-58.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-60.3205 94.3604,-55.375 88.154,-56.7503 90.3663,-60.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-81.5C112.045,-81.5 124.8437,-81.5 134.2149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-83.6001 140.3053,-81.5 134.3053,-79.4001 134.3054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-81.5C158.845,-81.5 171.6437,-81.5 181.0149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-83.6001 187.1053,-81.5 181.1053,-79.4001 181.1054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-81.5C205.645,-81.5 218.4437,-81.5 227.8149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-83.6001 233.9053,-81.5 227.9053,-79.4001 227.9054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-81.5C252.445,-81.5 265.2437,-81.5 274.6149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-83.6001 280.7053,-81.5 274.7053,-79.4001 274.7054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-81.5C299.245,-81.5 312.0437,-81.5 321.4149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-83.6001 327.5053,-81.5 321.5053,-79.4001 321.5054,-83.6001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="333" cy="-17.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#00ff00" d="M289.5657,-76.8973C297.1888,-66.4726 315.9003,-40.8841 326.0991,-26.9371"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="327.8182,-28.1439 329.6648,-22.061 324.428,-25.6647 327.8182,-28.1439"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-81.5C346.045,-81.5 358.8437,-81.5 368.2149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-83.6001 374.3053,-81.5 368.3053,-79.4001 368.3054,-83.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-81.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-81.5C392.845,-81.5 405.6437,-81.5 415.0149,-81.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-83.6001 421.1053,-81.5 415.1053,-79.4001 415.1054,-83.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-78.6133C391.9573,-73.9666 406.8669,-64.7278 416.7887,-58.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="417.9663,-60.3205 421.9604,-55.375 415.754,-56.7503 417.9663,-60.3205"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node18" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="609.8,-105 543.8,-105 543.8,-82 609.8,-82 609.8,-105"/>
|
||||
<text text-anchor="middle" x="576.8" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3046,-81.9558C450.3094,-83.3942 506.9119,-87.9164 543.6985,-90.8554"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-52.5C112.045,-52.5 124.8437,-52.5 134.2149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-54.6001 140.3053,-52.5 134.3053,-50.4001 134.3054,-54.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-55.3867C157.9573,-60.0334 172.8669,-69.2722 182.7887,-75.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-77.2497 187.9604,-78.625 183.9663,-73.6795 181.754,-77.2497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-52.5C439.645,-52.5 452.4437,-52.5 461.8149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-54.6001 467.9053,-52.5 461.9053,-50.4001 461.9054,-54.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node20" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="609.8,-64 543.8,-64 543.8,-41 609.8,-41 609.8,-64"/>
|
||||
<text text-anchor="middle" x="576.8" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.9592,-52.5C490.9563,-52.5 520.0793,-52.5 543.452,-52.5"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node16" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="379.8" cy="-17.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#00ff00" d="M338.7386,-17.5C346.045,-17.5 358.8437,-17.5 368.2149,-17.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="368.3054,-19.6001 374.3053,-17.5 368.3053,-15.4001 368.3054,-19.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node17" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="426.6" cy="-17.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M385.5386,-17.5C392.845,-17.5 405.6437,-17.5 415.0149,-17.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="415.1054,-19.6001 421.1053,-17.5 415.1053,-15.4001 415.1054,-19.6001"/>
|
||||
</g>
|
||||
<!-- alice/feature -->
|
||||
<g id="node19" class="node">
|
||||
<title>alice/feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="638.8,-23 514.8,-23 514.8,0 638.8,0 638.8,-23"/>
|
||||
<text text-anchor="middle" x="576.8" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">alice/feature</text>
|
||||
</g>
|
||||
<!-- f3->alice/feature -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>f3->alice/feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3046,-17.2721C445.9689,-16.7263 481.8645,-15.2924 514.4574,-13.9904"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.6 KiB |
39
images/git-graphs/repo_labels_bob2.m4
Normal file
|
@ -0,0 +1,39 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
include(`feature.dot')
|
||||
m7 -> f1;
|
||||
node[color=red];
|
||||
edge[color=red];
|
||||
f3 -> f4;
|
||||
|
||||
node[color=green];
|
||||
edge[color=green];
|
||||
node[group=feature];
|
||||
alicef1 -> alicef2 -> alicef3;
|
||||
m7 -> alicef1;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
//HEAD [style=dashed];
|
||||
master;
|
||||
"alice/feature";
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
//m10 -> HEAD;
|
||||
m10 -> master;
|
||||
alicef3 -> "alice/feature";
|
||||
f4 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
287
images/git-graphs/repo_labels_bob2.svg
Normal file
|
@ -0,0 +1,287 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="647pt" height="154pt"
|
||||
viewBox="0.00 0.00 646.80 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-116.5C18.445,-116.5 31.2437,-116.5 40.6149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-118.6001 46.7053,-116.5 40.7053,-114.4001 40.7054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-116.5C65.245,-116.5 78.0437,-116.5 87.4149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-118.6001 93.5053,-116.5 87.5053,-114.4001 87.5054,-118.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-113.6133C64.3573,-108.9666 79.2669,-99.7278 89.1887,-93.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-95.3205 94.3604,-90.375 88.154,-91.7503 90.3663,-95.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-116.5C112.045,-116.5 124.8437,-116.5 134.2149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-118.6001 140.3053,-116.5 134.3053,-114.4001 134.3054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-116.5C158.845,-116.5 171.6437,-116.5 181.0149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-118.6001 187.1053,-116.5 181.1053,-114.4001 181.1054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-116.5C205.645,-116.5 218.4437,-116.5 227.8149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-118.6001 233.9053,-116.5 227.9053,-114.4001 227.9054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-116.5C252.445,-116.5 265.2437,-116.5 274.6149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-118.6001 280.7053,-116.5 274.7053,-114.4001 274.7054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-116.5C299.245,-116.5 312.0437,-116.5 321.4149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-118.6001 327.5053,-116.5 321.5053,-114.4001 321.5054,-118.6001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M289.5657,-112.113C297.1213,-102.2649 315.57,-78.2185 325.8264,-64.8502"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="327.6786,-65.8859 329.6648,-59.8472 324.3464,-63.3293 327.6786,-65.8859"/>
|
||||
</g>
|
||||
<!-- alicef1 -->
|
||||
<g id="node19" class="node">
|
||||
<title>alicef1</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="379.8" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->alicef1 -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>m7->alicef1</title>
|
||||
<path fill="none" stroke="#00ff00" d="M287.9979,-111.1521C292.6703,-97.9163 306.3317,-63.1382 327.6,-41.5 339.5935,-29.2979 357.591,-20.4348 369.011,-15.6295"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="369.8161,-17.5692 374.599,-13.3819 368.2487,-13.6726 369.8161,-17.5692"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-116.5C346.045,-116.5 358.8437,-116.5 368.2149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-118.6001 374.3053,-116.5 368.3053,-114.4001 368.3054,-118.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-116.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-116.5C392.845,-116.5 405.6437,-116.5 415.0149,-116.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-118.6001 421.1053,-116.5 415.1053,-114.4001 415.1054,-118.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-113.6133C391.9573,-108.9666 406.8669,-99.7278 416.7887,-93.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="417.9663,-95.3205 421.9604,-90.375 415.754,-91.7503 417.9663,-95.3205"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node22" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="609.8,-146 543.8,-146 543.8,-123 609.8,-123 609.8,-146"/>
|
||||
<text text-anchor="middle" x="576.8" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3046,-117.1836C450.3094,-119.3413 506.9119,-126.1246 543.6985,-130.5331"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-87.5C112.045,-87.5 124.8437,-87.5 134.2149,-87.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-89.6001 140.3053,-87.5 134.3053,-85.4001 134.3054,-89.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-90.3867C157.9573,-95.0334 172.8669,-104.2722 182.7887,-110.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-112.2497 187.9604,-113.625 183.9663,-108.6795 181.754,-112.2497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-87.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-87.5C439.645,-87.5 452.4437,-87.5 461.8149,-87.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-89.6001 467.9053,-87.5 461.9053,-85.4001 461.9054,-89.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node25" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="609.8,-105 543.8,-105 543.8,-82 609.8,-82 609.8,-105"/>
|
||||
<text text-anchor="middle" x="576.8" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge25" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.9592,-87.8226C490.9563,-88.5187 520.0793,-90.2087 543.452,-91.5649"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node16" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-55.5C346.045,-55.5 358.8437,-55.5 368.2149,-55.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-57.6001 374.3053,-55.5 368.3053,-53.4001 368.3054,-57.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node17" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-55.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-55.5C392.845,-55.5 405.6437,-55.5 415.0149,-55.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-57.6001 421.1053,-55.5 415.1053,-53.4001 415.1054,-57.6001"/>
|
||||
</g>
|
||||
<!-- f4 -->
|
||||
<g id="node18" class="node">
|
||||
<title>f4</title>
|
||||
<ellipse fill="#ff0000" stroke="#ff0000" cx="473.4" cy="-53.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f3->f4 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>f3->f4</title>
|
||||
<path fill="none" stroke="#ff0000" d="M432.3386,-55.2548C439.645,-54.9425 452.4437,-54.3956 461.8149,-53.9951"/>
|
||||
<polygon fill="#ff0000" stroke="#ff0000" points="462.0005,-56.0892 467.9053,-53.7348 461.8211,-51.893 462.0005,-56.0892"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node24" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="613.8,-64 539.8,-64 539.8,-41 613.8,-41 613.8,-64"/>
|
||||
<text text-anchor="middle" x="576.8" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f4->feature -->
|
||||
<g id="edge24" class="edge">
|
||||
<title>f4->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.9592,-53.4462C490.3271,-53.3363 517.0716,-53.0776 539.7304,-52.8585"/>
|
||||
</g>
|
||||
<!-- alicef2 -->
|
||||
<g id="node20" class="node">
|
||||
<title>alicef2</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="426.6" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- alicef1->alicef2 -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>alicef1->alicef2</title>
|
||||
<path fill="none" stroke="#00ff00" d="M385.5386,-11.5C392.845,-11.5 405.6437,-11.5 415.0149,-11.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="415.1054,-13.6001 421.1053,-11.5 415.1053,-9.4001 415.1054,-13.6001"/>
|
||||
</g>
|
||||
<!-- alicef3 -->
|
||||
<g id="node21" class="node">
|
||||
<title>alicef3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-11.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- alicef2->alicef3 -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>alicef2->alicef3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M432.3386,-11.5C439.645,-11.5 452.4437,-11.5 461.8149,-11.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="461.9054,-13.6001 467.9053,-11.5 461.9053,-9.4001 461.9054,-13.6001"/>
|
||||
</g>
|
||||
<!-- alice/feature -->
|
||||
<g id="node23" class="node">
|
||||
<title>alice/feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="638.8,-23 514.8,-23 514.8,0 638.8,0 638.8,-23"/>
|
||||
<text text-anchor="middle" x="576.8" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">alice/feature</text>
|
||||
</g>
|
||||
<!-- alicef3->alice/feature -->
|
||||
<g id="edge23" class="edge">
|
||||
<title>alicef3->alice/feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.9592,-11.5C486.2581,-11.5 499.8961,-11.5 514.7215,-11.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
31
images/git-graphs/repo_labels_commit.m4
Normal file
|
@ -0,0 +1,31 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`feature.dot')
|
||||
include(`bugfix.dot')
|
||||
m7 -> f1;
|
||||
m9 -> b1;
|
||||
node[group=master, color=green];
|
||||
edge[color=green];
|
||||
m10 -> m11;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
HEAD [style=dashed];
|
||||
master;
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
m11 -> HEAD;
|
||||
m11 -> master;
|
||||
f3 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
254
images/git-graphs/repo_labels_commit.svg
Normal file
|
@ -0,0 +1,254 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="597pt" height="154pt"
|
||||
viewBox="0.00 0.00 596.80 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-93.5C18.445,-93.5 31.2437,-93.5 40.6149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-95.6001 46.7053,-93.5 40.7053,-91.4001 40.7054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-93.5C65.245,-93.5 78.0437,-93.5 87.4149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-95.6001 93.5053,-93.5 87.5053,-91.4001 87.5054,-95.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-64.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-90.6133C64.3573,-85.9666 79.2669,-76.7278 89.1887,-70.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-72.3205 94.3604,-67.375 88.154,-68.7503 90.3663,-72.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-93.5C112.045,-93.5 124.8437,-93.5 134.2149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-95.6001 140.3053,-93.5 134.3053,-91.4001 134.3054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-93.5C158.845,-93.5 171.6437,-93.5 181.0149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-95.6001 187.1053,-93.5 181.1053,-91.4001 181.1054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-93.5C205.645,-93.5 218.4437,-93.5 227.8149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-95.6001 233.9053,-93.5 227.9053,-91.4001 227.9054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-93.5C252.445,-93.5 265.2437,-93.5 274.6149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-95.6001 280.7053,-93.5 274.7053,-91.4001 274.7054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-93.5C299.245,-93.5 312.0437,-93.5 321.4149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-95.6001 327.5053,-93.5 321.5053,-91.4001 321.5054,-95.6001"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->f1 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>m7->f1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M289.2707,-88.7103C296.805,-76.9581 316.3337,-46.4965 326.5525,-30.557"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="328.3863,-31.5876 329.8567,-25.4031 324.8505,-29.3208 328.3863,-31.5876"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-93.5C346.045,-93.5 358.8437,-93.5 368.2149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-95.6001 374.3053,-93.5 368.3053,-91.4001 368.3054,-95.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-93.5C392.845,-93.5 405.6437,-93.5 415.0149,-93.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-95.6001 421.1053,-93.5 415.1053,-91.4001 415.1054,-95.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node16" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-58.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-90.0161C392.1054,-84.2972 407.4587,-72.8151 417.3706,-65.4023"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="418.6867,-67.0404 422.234,-61.7652 416.1713,-63.6769 418.6867,-67.0404"/>
|
||||
</g>
|
||||
<!-- m11 -->
|
||||
<g id="node18" class="node">
|
||||
<title>m11</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m10->m11 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>m10->m11</title>
|
||||
<path fill="none" stroke="#00ff00" d="M432.3386,-93.5C439.645,-93.5 452.4437,-93.5 461.8149,-93.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="461.9054,-95.6001 467.9053,-93.5 461.9053,-91.4001 461.9054,-95.6001"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-64.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-64.5C112.045,-64.5 124.8437,-64.5 134.2149,-64.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-66.6001 140.3053,-64.5 134.3053,-62.4001 134.3054,-66.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-67.3867C157.9573,-72.0334 172.8669,-81.2722 182.7887,-87.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-89.2497 187.9604,-90.625 183.9663,-85.6795 181.754,-89.2497"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-20.5C346.045,-20.5 358.8437,-20.5 368.2149,-20.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-22.6001 374.3053,-20.5 368.3053,-18.4001 368.3054,-22.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-20.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-20.5C392.845,-20.5 405.6437,-20.5 415.0149,-20.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-22.6001 421.1053,-20.5 415.1053,-18.4001 415.1054,-22.6001"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node21" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="588.8,-23 514.8,-23 514.8,0 588.8,0 588.8,-23"/>
|
||||
<text text-anchor="middle" x="551.8" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f3->feature -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>f3->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3049,-20.0899C446.6562,-19.0583 485.2149,-16.2865 514.6859,-14.1679"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node17" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-58.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-58.5C439.645,-58.5 452.4437,-58.5 461.8149,-58.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-60.6001 467.9053,-58.5 461.9053,-56.4001 461.9054,-60.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node22" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-64 518.8,-64 518.8,-41 584.8,-41 584.8,-64"/>
|
||||
<text text-anchor="middle" x="551.8" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.7887,-58.0876C487.0224,-57.4575 503.3776,-56.2058 518.5247,-55.0466"/>
|
||||
</g>
|
||||
<!-- HEAD -->
|
||||
<g id="node19" class="node">
|
||||
<title>HEAD</title>
|
||||
<polygon fill="none" stroke="#ffffff" stroke-dasharray="5,2" points="576.8,-146 526.8,-146 526.8,-123 576.8,-123 576.8,-146"/>
|
||||
<text text-anchor="middle" x="551.8" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">HEAD</text>
|
||||
</g>
|
||||
<!-- m11->HEAD -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>m11->HEAD</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.544,-96.1901C488.7639,-101.5347 512.1578,-113.7687 529.7787,-122.9838"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node20" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-105 518.8,-105 518.8,-82 584.8,-82 584.8,-105"/>
|
||||
<text text-anchor="middle" x="551.8" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m11->master -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>m11->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0383,-93.5C487.3946,-93.5 503.7044,-93.5 518.7679,-93.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
30
images/git-graphs/repo_labels_ff.m4
Normal file
|
@ -0,0 +1,30 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
node[color=green];
|
||||
edge[color=green];
|
||||
include(`feature.dot')
|
||||
m10 -> f1;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
HEAD [style=dashed];
|
||||
master;
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
f3 -> HEAD;
|
||||
f3 -> master;
|
||||
f3 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
243
images/git-graphs/repo_labels_ff.svg
Normal file
|
@ -0,0 +1,243 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="690pt" height="154pt"
|
||||
viewBox="0.00 0.00 690.40 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-69.5C18.445,-69.5 31.2437,-69.5 40.6149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-71.6001 46.7053,-69.5 40.7053,-67.4001 40.7054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-69.5C65.245,-69.5 78.0437,-69.5 87.4149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-71.6001 93.5053,-69.5 87.5053,-67.4001 87.5054,-71.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-40.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-66.6133C64.3573,-61.9666 79.2669,-52.7278 89.1887,-46.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-48.3205 94.3604,-43.375 88.154,-44.7503 90.3663,-48.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-69.5C112.045,-69.5 124.8437,-69.5 134.2149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-71.6001 140.3053,-69.5 134.3053,-67.4001 134.3054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-69.5C158.845,-69.5 171.6437,-69.5 181.0149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-71.6001 187.1053,-69.5 181.1053,-67.4001 181.1054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-69.5C205.645,-69.5 218.4437,-69.5 227.8149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-71.6001 233.9053,-69.5 227.9053,-67.4001 227.9054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-69.5C252.445,-69.5 265.2437,-69.5 274.6149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-71.6001 280.7053,-69.5 274.7053,-67.4001 274.7054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-69.5C299.245,-69.5 312.0437,-69.5 321.4149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-71.6001 327.5053,-69.5 321.5053,-67.4001 321.5054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-69.5C346.045,-69.5 358.8437,-69.5 368.2149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-71.6001 374.3053,-69.5 368.3053,-67.4001 368.3054,-71.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-69.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-69.5C392.845,-69.5 405.6437,-69.5 415.0149,-69.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-71.6001 421.1053,-69.5 415.1053,-67.4001 415.1054,-71.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-37.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-66.3147C391.9573,-61.1873 406.8669,-50.9928 416.7887,-44.2086"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="418.1928,-45.7925 421.9604,-40.6724 415.8222,-42.3255 418.1928,-45.7925"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-72.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m10->f1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m10->f1</title>
|
||||
<path fill="none" stroke="#00ff00" d="M432.3386,-69.8679C439.645,-70.3362 452.4437,-71.1566 461.8149,-71.7574"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="461.7833,-73.8596 467.9053,-72.1478 462.052,-69.6682 461.7833,-73.8596"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-40.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-40.5C112.045,-40.5 124.8437,-40.5 134.2149,-40.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-42.6001 140.3053,-40.5 134.3053,-38.4001 134.3054,-42.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-43.3867C157.9573,-48.0334 172.8669,-57.2722 182.7887,-63.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-65.2497 187.9604,-66.625 183.9663,-61.6795 181.754,-65.2497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-37.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-37.5C439.645,-37.5 452.4437,-37.5 461.8149,-37.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-39.6001 467.9053,-37.5 461.9053,-35.4001 461.9054,-39.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node21" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="678.4,-23 612.4,-23 612.4,0 678.4,0 678.4,-23"/>
|
||||
<text text-anchor="middle" x="645.4" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.1227,-36.6349C499.5244,-33.551 569.7346,-22.9378 612.122,-16.5304"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node16" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="520.2" cy="-72.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#00ff00" d="M479.1386,-72.5C486.445,-72.5 499.2437,-72.5 508.6149,-72.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="508.7054,-74.6001 514.7053,-72.5 508.7053,-70.4001 508.7054,-74.6001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node17" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="567" cy="-72.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M525.9386,-72.5C533.245,-72.5 546.0437,-72.5 555.4149,-72.5"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="555.5054,-74.6001 561.5053,-72.5 555.5053,-70.4001 555.5054,-74.6001"/>
|
||||
</g>
|
||||
<!-- HEAD -->
|
||||
<g id="node18" class="node">
|
||||
<title>HEAD</title>
|
||||
<polygon fill="none" stroke="#ffffff" stroke-dasharray="5,2" points="670.4,-146 620.4,-146 620.4,-123 670.4,-123 670.4,-146"/>
|
||||
<text text-anchor="middle" x="645.4" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">HEAD</text>
|
||||
</g>
|
||||
<!-- f3->HEAD -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>f3->HEAD</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M570.5213,-76.8493C577.2526,-84.9731 592.6803,-102.6962 608.4,-114.5 612.3706,-117.4815 616.8424,-120.2902 621.269,-122.8075"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node19" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="678.4,-105 612.4,-105 612.4,-82 678.4,-82 678.4,-105"/>
|
||||
<text text-anchor="middle" x="645.4" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- f3->master -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>f3->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M572.3887,-73.9434C580.6224,-76.1489 596.9776,-80.5297 612.1247,-84.587"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node20" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="682.4,-64 608.4,-64 608.4,-41 682.4,-41 682.4,-64"/>
|
||||
<text text-anchor="middle" x="645.4" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f3->feature -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>f3->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M572.3887,-71.1253C579.9305,-69.2014 594.2862,-65.5392 608.286,-61.9678"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
36
images/git-graphs/repo_labels_rebase.m4
Normal file
|
@ -0,0 +1,36 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
|
||||
node[group=featurebefore, color=red];
|
||||
edge[color=red];
|
||||
fb1 -> fb2 -> fb3;
|
||||
m7 -> fb1;
|
||||
|
||||
node[group=feature, color=green];
|
||||
edge[color=green];
|
||||
f1 -> f2 -> f3;
|
||||
m10 -> f1;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
HEAD [style=dashed];
|
||||
master;
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
f3 -> HEAD;
|
||||
m10 -> master;
|
||||
f3 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
276
images/git-graphs/repo_labels_rebase.svg
Normal file
|
@ -0,0 +1,276 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="690pt" height="169pt"
|
||||
viewBox="0.00 0.00 690.40 168.90" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 164.9)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-65.4C18.445,-65.4 31.2437,-65.4 40.6149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-67.5001 46.7053,-65.4 40.7053,-63.3001 40.7054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-65.4C65.245,-65.4 78.0437,-65.4 87.4149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-67.5001 93.5053,-65.4 87.5053,-63.3001 87.5054,-67.5001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-36.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-62.5133C64.3573,-57.8666 79.2669,-48.6278 89.1887,-42.4797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-44.2205 94.3604,-39.275 88.154,-40.6503 90.3663,-44.2205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-65.4C112.045,-65.4 124.8437,-65.4 134.2149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-67.5001 140.3053,-65.4 134.3053,-63.3001 134.3054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-65.4C158.845,-65.4 171.6437,-65.4 181.0149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-67.5001 187.1053,-65.4 181.1053,-63.3001 181.1054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-65.4C205.645,-65.4 218.4437,-65.4 227.8149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-67.5001 233.9053,-65.4 227.9053,-63.3001 227.9054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-65.4C252.445,-65.4 265.2437,-65.4 274.6149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-67.5001 280.7053,-65.4 274.7053,-63.3001 274.7054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-65.4C299.245,-65.4 312.0437,-65.4 321.4149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-67.5001 327.5053,-65.4 321.5053,-63.3001 321.5054,-67.5001"/>
|
||||
</g>
|
||||
<!-- fb1 -->
|
||||
<g id="node15" class="node">
|
||||
<title>fb1</title>
|
||||
<ellipse fill="#ff0000" stroke="#ff0000" cx="333" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->fb1 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m7->fb1</title>
|
||||
<path fill="none" stroke="#ff0000" d="M289.5657,-61.0849C297.1213,-51.3983 315.57,-27.7461 325.8264,-14.5969"/>
|
||||
<polygon fill="#ff0000" stroke="#ff0000" points="327.6304,-15.6986 329.6648,-9.676 324.3187,-13.1154 327.6304,-15.6986"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-65.4C346.045,-65.4 358.8437,-65.4 368.2149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-67.5001 374.3053,-65.4 368.3053,-63.3001 368.3054,-67.5001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-65.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-65.4C392.845,-65.4 405.6437,-65.4 415.0149,-65.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-67.5001 421.1053,-65.4 415.1053,-63.3001 415.1054,-67.5001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.4585,-62.3143C391.9573,-57.3471 406.8669,-47.4711 416.7887,-40.899"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="418.1179,-42.5374 421.9604,-37.4733 415.7985,-39.0359 418.1179,-42.5374"/>
|
||||
</g>
|
||||
<!-- f1 -->
|
||||
<g id="node18" class="node">
|
||||
<title>f1</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-108.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m10->f1 -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>m10->f1</title>
|
||||
<path fill="none" stroke="#00ff00" d="M430.5901,-69.0662C438.1195,-75.9842 454.5783,-91.1065 464.7528,-100.4549"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="463.5809,-102.23 469.42,-104.7431 466.4225,-99.1372 463.5809,-102.23"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node22" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="678.4,-78.9 612.4,-78.9 612.4,-55.9 678.4,-55.9 678.4,-78.9"/>
|
||||
<text text-anchor="middle" x="645.4" y="-63.7" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.0086,-65.4494C456.5547,-65.6738 558.5907,-66.6065 612.1839,-67.0964"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-36.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-36.4C112.045,-36.4 124.8437,-36.4 134.2149,-36.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-38.5001 140.3053,-36.4 134.3053,-34.3001 134.3054,-38.5001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-39.2867C157.9573,-43.9334 172.8669,-53.1722 182.7887,-59.3203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-61.1497 187.9604,-62.525 183.9663,-57.5795 181.754,-61.1497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-34.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-34.4C439.645,-34.4 452.4437,-34.4 461.8149,-34.4"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-36.5001 467.9053,-34.4 461.9053,-32.3001 461.9054,-36.5001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node24" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="678.4,-37.9 612.4,-37.9 612.4,-14.9 678.4,-14.9 678.4,-37.9"/>
|
||||
<text text-anchor="middle" x="645.4" y="-22.7" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge24" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.1227,-34.1338C499.5244,-33.1849 569.7346,-29.9193 612.122,-27.9478"/>
|
||||
</g>
|
||||
<!-- fb2 -->
|
||||
<g id="node16" class="node">
|
||||
<title>fb2</title>
|
||||
<ellipse fill="#ff0000" stroke="#ff0000" cx="379.8" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- fb1->fb2 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>fb1->fb2</title>
|
||||
<path fill="none" stroke="#ff0000" d="M338.7386,-5.4C346.045,-5.4 358.8437,-5.4 368.2149,-5.4"/>
|
||||
<polygon fill="#ff0000" stroke="#ff0000" points="368.3054,-7.5001 374.3053,-5.4 368.3053,-3.3001 368.3054,-7.5001"/>
|
||||
</g>
|
||||
<!-- fb3 -->
|
||||
<g id="node17" class="node">
|
||||
<title>fb3</title>
|
||||
<ellipse fill="#ff0000" stroke="#ff0000" cx="426.6" cy="-5.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- fb2->fb3 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>fb2->fb3</title>
|
||||
<path fill="none" stroke="#ff0000" d="M385.5386,-5.4C392.845,-5.4 405.6437,-5.4 415.0149,-5.4"/>
|
||||
<polygon fill="#ff0000" stroke="#ff0000" points="415.1054,-7.5001 421.1053,-5.4 415.1053,-3.3001 415.1054,-7.5001"/>
|
||||
</g>
|
||||
<!-- f2 -->
|
||||
<g id="node19" class="node">
|
||||
<title>f2</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="520.2" cy="-108.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f1->f2 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>f1->f2</title>
|
||||
<path fill="none" stroke="#00ff00" d="M479.1386,-108.4C486.445,-108.4 499.2437,-108.4 508.6149,-108.4"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="508.7054,-110.5001 514.7053,-108.4 508.7053,-106.3001 508.7054,-110.5001"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node20" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="567" cy="-108.4" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- f2->f3 -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>f2->f3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M525.9386,-108.4C533.245,-108.4 546.0437,-108.4 555.4149,-108.4"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="555.5054,-110.5001 561.5053,-108.4 555.5053,-106.3001 555.5054,-110.5001"/>
|
||||
</g>
|
||||
<!-- HEAD -->
|
||||
<g id="node21" class="node">
|
||||
<title>HEAD</title>
|
||||
<polygon fill="none" stroke="#ffffff" stroke-dasharray="5,2" points="670.4,-160.9 620.4,-160.9 620.4,-137.9 670.4,-137.9 670.4,-160.9"/>
|
||||
<text text-anchor="middle" x="645.4" y="-145.7" font-family="monospace" font-size="14.00" fill="#ffffff">HEAD</text>
|
||||
</g>
|
||||
<!-- f3->HEAD -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>f3->HEAD</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M572.144,-111.0901C582.3639,-116.4347 605.7578,-128.6687 623.3787,-137.8838"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node23" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="682.4,-119.9 608.4,-119.9 608.4,-96.9 682.4,-96.9 682.4,-119.9"/>
|
||||
<text text-anchor="middle" x="645.4" y="-104.7" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f3->feature -->
|
||||
<g id="edge23" class="edge">
|
||||
<title>f3->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M572.6383,-108.4C580.2221,-108.4 594.3571,-108.4 608.166,-108.4"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
30
images/git-graphs/repo_labels_squash.m4
Normal file
|
@ -0,0 +1,30 @@
|
|||
digraph repo_labels {
|
||||
rankdir = "LR";
|
||||
bgcolor = "transparent";
|
||||
node[width=0.15, height=0.15, shape=point, color=white, fontcolor=white];
|
||||
edge[weight=2, arrowhead=normal, arrowsize=0.6, color=white];
|
||||
define(`digraph', `subgraph')
|
||||
include(`master.dot')
|
||||
include(`merged.dot')
|
||||
include(`bugfix.dot')
|
||||
m9 -> b1;
|
||||
|
||||
node[group=feature, color=green];
|
||||
edge[color=green];
|
||||
m10 -> f3;
|
||||
|
||||
node[shape=box, color=white, fontname="monospace"];
|
||||
edge[color=white];
|
||||
subgraph labels {
|
||||
rank = "max";
|
||||
HEAD [style=dashed];
|
||||
master;
|
||||
feature;
|
||||
bugfix;
|
||||
}
|
||||
edge[arrowhead=none, style=dashed];
|
||||
f3 -> HEAD;
|
||||
m10 -> master;
|
||||
f3 -> feature;
|
||||
b2 -> bugfix;
|
||||
}
|
221
images/git-graphs/repo_labels_squash.svg
Normal file
|
@ -0,0 +1,221 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: repo_labels Pages: 1 -->
|
||||
<svg width="597pt" height="154pt"
|
||||
viewBox="0.00 0.00 596.80 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 150)">
|
||||
<title>repo_labels</title>
|
||||
<!-- m1 -->
|
||||
<g id="node1" class="node">
|
||||
<title>m1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="5.4" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2 -->
|
||||
<g id="node2" class="node">
|
||||
<title>m2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="52.2" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m1->m2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>m1->m2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M11.1386,-52.5C18.445,-52.5 31.2437,-52.5 40.6149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="40.7054,-54.6001 46.7053,-52.5 40.7053,-50.4001 40.7054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m3 -->
|
||||
<g id="node3" class="node">
|
||||
<title>m3</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->m3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>m2->m3</title>
|
||||
<path fill="none" stroke="#ffffff" d="M57.9386,-52.5C65.245,-52.5 78.0437,-52.5 87.4149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="87.5054,-54.6001 93.5053,-52.5 87.5053,-50.4001 87.5054,-54.6001"/>
|
||||
</g>
|
||||
<!-- r1 -->
|
||||
<g id="node11" class="node">
|
||||
<title>r1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="99" cy="-23.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m2->r1 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>m2->r1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M56.8585,-49.6133C64.3573,-44.9666 79.2669,-35.7278 89.1887,-29.5797"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="90.3663,-31.3205 94.3604,-26.375 88.154,-27.7503 90.3663,-31.3205"/>
|
||||
</g>
|
||||
<!-- m4 -->
|
||||
<g id="node4" class="node">
|
||||
<title>m4</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m3->m4 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>m3->m4</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-52.5C112.045,-52.5 124.8437,-52.5 134.2149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-54.6001 140.3053,-52.5 134.3053,-50.4001 134.3054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m5 -->
|
||||
<g id="node5" class="node">
|
||||
<title>m5</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="192.6" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m4->m5 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>m4->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M151.5386,-52.5C158.845,-52.5 171.6437,-52.5 181.0149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.1054,-54.6001 187.1053,-52.5 181.1053,-50.4001 181.1054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m6 -->
|
||||
<g id="node6" class="node">
|
||||
<title>m6</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="239.4" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m5->m6 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>m5->m6</title>
|
||||
<path fill="none" stroke="#ffffff" d="M198.3386,-52.5C205.645,-52.5 218.4437,-52.5 227.8149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="227.9054,-54.6001 233.9053,-52.5 227.9053,-50.4001 227.9054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m7 -->
|
||||
<g id="node7" class="node">
|
||||
<title>m7</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="286.2" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m6->m7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>m6->m7</title>
|
||||
<path fill="none" stroke="#ffffff" d="M245.1386,-52.5C252.445,-52.5 265.2437,-52.5 274.6149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="274.7054,-54.6001 280.7053,-52.5 274.7053,-50.4001 274.7054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m8 -->
|
||||
<g id="node8" class="node">
|
||||
<title>m8</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="333" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m7->m8 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>m7->m8</title>
|
||||
<path fill="none" stroke="#ffffff" d="M291.9386,-52.5C299.245,-52.5 312.0437,-52.5 321.4149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="321.5054,-54.6001 327.5053,-52.5 321.5053,-50.4001 321.5054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m9 -->
|
||||
<g id="node9" class="node">
|
||||
<title>m9</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="379.8" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m8->m9 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>m8->m9</title>
|
||||
<path fill="none" stroke="#ffffff" d="M338.7386,-52.5C346.045,-52.5 358.8437,-52.5 368.2149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="368.3054,-54.6001 374.3053,-52.5 368.3053,-50.4001 368.3054,-54.6001"/>
|
||||
</g>
|
||||
<!-- m10 -->
|
||||
<g id="node10" class="node">
|
||||
<title>m10</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-52.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->m10 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>m9->m10</title>
|
||||
<path fill="none" stroke="#ffffff" d="M385.5386,-52.5C392.845,-52.5 405.6437,-52.5 415.0149,-52.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="415.1054,-54.6001 421.1053,-52.5 415.1053,-50.4001 415.1054,-54.6001"/>
|
||||
</g>
|
||||
<!-- b1 -->
|
||||
<g id="node13" class="node">
|
||||
<title>b1</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="426.6" cy="-15.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m9->b1 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>m9->b1</title>
|
||||
<path fill="none" stroke="#ffffff" d="M384.1189,-49.0854C391.6033,-43.1683 407.1457,-30.8805 417.212,-22.9222"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="418.7506,-24.3827 422.155,-19.0142 416.1458,-21.088 418.7506,-24.3827"/>
|
||||
</g>
|
||||
<!-- f3 -->
|
||||
<g id="node15" class="node">
|
||||
<title>f3</title>
|
||||
<ellipse fill="#00ff00" stroke="#00ff00" cx="473.4" cy="-93.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- m10->f3 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>m10->f3</title>
|
||||
<path fill="none" stroke="#00ff00" d="M430.9189,-56.2837C438.5497,-62.9687 454.5568,-76.992 464.5962,-85.7873"/>
|
||||
<polygon fill="#00ff00" stroke="#00ff00" points="463.3293,-87.4693 469.2262,-89.8435 466.097,-84.3101 463.3293,-87.4693"/>
|
||||
</g>
|
||||
<!-- master -->
|
||||
<g id="node17" class="node">
|
||||
<title>master</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-64 518.8,-64 518.8,-41 584.8,-41 584.8,-64"/>
|
||||
<text text-anchor="middle" x="551.8" y="-48.8" font-family="monospace" font-size="14.00" fill="#ffffff">master</text>
|
||||
</g>
|
||||
<!-- m10->master -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>m10->master</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M432.3049,-52.5C447.3259,-52.5 488.8665,-52.5 518.7491,-52.5"/>
|
||||
</g>
|
||||
<!-- r2 -->
|
||||
<g id="node12" class="node">
|
||||
<title>r2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="145.8" cy="-23.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- r1->r2 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>r1->r2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M104.7386,-23.5C112.045,-23.5 124.8437,-23.5 134.2149,-23.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="134.3054,-25.6001 140.3053,-23.5 134.3053,-21.4001 134.3054,-25.6001"/>
|
||||
</g>
|
||||
<!-- r2->m5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>r2->m5</title>
|
||||
<path fill="none" stroke="#ffffff" d="M150.4585,-26.3867C157.9573,-31.0334 172.8669,-40.2722 182.7887,-46.4203"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="181.754,-48.2497 187.9604,-49.625 183.9663,-44.6795 181.754,-48.2497"/>
|
||||
</g>
|
||||
<!-- b2 -->
|
||||
<g id="node14" class="node">
|
||||
<title>b2</title>
|
||||
<ellipse fill="#ffffff" stroke="#ffffff" cx="473.4" cy="-15.5" rx="5.4" ry="5.4"/>
|
||||
</g>
|
||||
<!-- b1->b2 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>b1->b2</title>
|
||||
<path fill="none" stroke="#ffffff" d="M432.3386,-15.5C439.645,-15.5 452.4437,-15.5 461.8149,-15.5"/>
|
||||
<polygon fill="#ffffff" stroke="#ffffff" points="461.9054,-17.6001 467.9053,-15.5 461.9053,-13.4001 461.9054,-17.6001"/>
|
||||
</g>
|
||||
<!-- bugfix -->
|
||||
<g id="node19" class="node">
|
||||
<title>bugfix</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="584.8,-23 518.8,-23 518.8,0 584.8,0 584.8,-23"/>
|
||||
<text text-anchor="middle" x="551.8" y="-7.8" font-family="monospace" font-size="14.00" fill="#ffffff">bugfix</text>
|
||||
</g>
|
||||
<!-- b2->bugfix -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>b2->bugfix</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0383,-15.2123C487.3946,-14.786 503.7044,-13.9539 518.7679,-13.1853"/>
|
||||
</g>
|
||||
<!-- HEAD -->
|
||||
<g id="node16" class="node">
|
||||
<title>HEAD</title>
|
||||
<polygon fill="none" stroke="#ffffff" stroke-dasharray="5,2" points="576.8,-146 526.8,-146 526.8,-123 576.8,-123 576.8,-146"/>
|
||||
<text text-anchor="middle" x="551.8" y="-130.8" font-family="monospace" font-size="14.00" fill="#ffffff">HEAD</text>
|
||||
</g>
|
||||
<!-- f3->HEAD -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>f3->HEAD</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M478.544,-96.1901C488.7639,-101.5347 512.1578,-113.7687 529.7787,-122.9838"/>
|
||||
</g>
|
||||
<!-- feature -->
|
||||
<g id="node18" class="node">
|
||||
<title>feature</title>
|
||||
<polygon fill="none" stroke="#ffffff" points="588.8,-105 514.8,-105 514.8,-82 588.8,-82 588.8,-105"/>
|
||||
<text text-anchor="middle" x="551.8" y="-89.8" font-family="monospace" font-size="14.00" fill="#ffffff">feature</text>
|
||||
</g>
|
||||
<!-- f3->feature -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>f3->feature</title>
|
||||
<path fill="none" stroke="#ffffff" stroke-dasharray="5,2" d="M479.0383,-93.5C486.6221,-93.5 500.7571,-93.5 514.566,-93.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.2 KiB |
295
posts/from-graphs-to-git.org
Normal file
|
@ -0,0 +1,295 @@
|
|||
---
|
||||
title: "From graphs to Git"
|
||||
date: 2021-03-01
|
||||
tags: git
|
||||
toc: true
|
||||
---
|
||||
|
||||
* Introduction
|
||||
|
||||
This is an introduction to Git from a graph theory point of view. In
|
||||
my view, most introductions to Git focus on the actual commands or on
|
||||
Git internals. In my day-to-day work, I realized that I consistently
|
||||
rely on an internal model of the repository as a directed acyclic
|
||||
graph. This is not something very original, many people have said the
|
||||
same thing, to the point that it is a running joke (TODO: insert links
|
||||
here). However, I have not seen a comprehensive introduction to Git
|
||||
from this point of view.
|
||||
|
||||
How to actually use the command line is not the topic of this article,
|
||||
you can refer to the man pages or the excellent [[https://git-scm.com/book/en/v2][/Pro Git/]] book. I will
|
||||
reference the relevant Git commands as margin notes.
|
||||
|
||||
My target audience is basically myself a few years ago: background in
|
||||
maths and computer science, but no direct experience of large-scale
|
||||
codebases in Git. I also assume that we are curious about the internal
|
||||
model of Git: if you only want a quick fix for your latest mistake but
|
||||
don't care about understanding what's going on, this post is not for
|
||||
you.
|
||||
|
||||
This post is also highly opinionated about what I consider important
|
||||
when working on production codebases in a professional setting. Of
|
||||
course, this is highly coloured by my personal experience, and your
|
||||
needs may vary. If there is something essential that you think is
|
||||
missing here, please don't hesitate to [[../contact.html][contact me]]!
|
||||
|
||||
* Concepts: understanding the graph
|
||||
|
||||
** Repository
|
||||
|
||||
The basic object in Git is the /commit/. It is constituted of three
|
||||
things: a set of parent commits (at least one, except for the initial
|
||||
commit), a diff representing changes (some lines are removed, some are
|
||||
added), and a commit message. It also has a name[fn:hash], so that we
|
||||
can refer to it if needed.
|
||||
|
||||
[fn:hash] Actually, each commit gets a SHA-1 hash that identifies it
|
||||
uniquely. The hash is computed from the parents, the messages, and the
|
||||
diff.
|
||||
|
||||
|
||||
A /repository/ is fundamentally just a directed acyclic graph
|
||||
(DAG)[fn:graph], where nodes are commits and links are parent-child
|
||||
relationships. A DAG means that two essential properties are verified
|
||||
at all time by the graph:
|
||||
- it is /oriented/, and the direction always go from parent to child,
|
||||
- it is /acyclic/, otherwise a commit could end up being an ancestor
|
||||
of itself.
|
||||
As you can see, these make perfect sense in the context of a
|
||||
version-tracking system.
|
||||
|
||||
[fn:graph] {-} You can visualize the graph of a repo, or just a subset
|
||||
of it, using [[https://git-scm.com/docs/git-log][=git log=]].
|
||||
|
||||
|
||||
Here is an example of a repo:
|
||||
[[file:/images/git-graphs/repo.svg]]
|
||||
|
||||
In this representation, each commit points to its children, and they
|
||||
were organized from left to right as in a timeline. The /initial
|
||||
commit/ is the first one, the root of the graph, on the far left.
|
||||
|
||||
Note that a commit can have multiple children, and multiple parents
|
||||
(we'll come back to these specific commits later).
|
||||
|
||||
The entirety of Git operations can be understood in terms of
|
||||
manipulations of the graph. In the following sections, we'll list the
|
||||
different actions we can take to modify the graph.
|
||||
|
||||
** Naming things: branches and tags
|
||||
|
||||
Some commits can be annotated: they can have a named label attached to
|
||||
them, that reference a specific commit.
|
||||
|
||||
For instance, =HEAD= references the current commit: your current
|
||||
position in the graph[fn:checkout]. This is just a convenient name for
|
||||
the current commit.[fn::Much like how =.= is a shorthand for the
|
||||
current directory when you're navigating the filesystem.]
|
||||
|
||||
[fn:checkout] {-} Move around the graph (i.e. move the =HEAD=
|
||||
pointer), using [[https://git-scm.com/docs/git-checkout][=git checkout=]]. You can give it commit hashes, branch
|
||||
names, tag names, or relative positions like =HEAD~3= for the
|
||||
great-grandparent of the current commit.
|
||||
|
||||
|
||||
/Branches/ are other labels like this. Each of them has a
|
||||
name and acts a simple pointer to a commit. Once again, this is simply
|
||||
an alias, in order to have meaningful names when navigating the graph.
|
||||
|
||||
[[file:/images/git-graphs/repo_labels.svg]]
|
||||
|
||||
In this example, we have three branches: =master=, =feature=, and
|
||||
=bugfix=[fn::Do not name your real branches like this! Find a
|
||||
meaningful name describing what changes you are making.].
|
||||
|
||||
/Tags/[fn:branch-tag] are another kind of label, once again pointing to a particular
|
||||
commit. The main difference with branches is that branches may move
|
||||
(you can change the commit they point to if you want), whereas tags
|
||||
are fixed forever.
|
||||
|
||||
[fn:branch-tag] {-} Create branches and tags with the
|
||||
appropriately-named [[https://git-scm.com/docs/git-branch][=git branch=]] and [[https://git-scm.com/docs/git-tag][=git tag=]].
|
||||
|
||||
|
||||
** Making changes: creating new commits
|
||||
|
||||
When you make some changes in your files, you will then record them in
|
||||
the repo by committing them[fn:commit]. The action creates a new
|
||||
commit, whose parent will be the current commit. For instance, in the
|
||||
previous case where you were on =master=, the new repo after
|
||||
committing will be (the new commit is in green):
|
||||
|
||||
[fn:commit] {-} To the surprise of absolutely no one, this is done
|
||||
with [[https://git-scm.com/docs/git-commit][=git commit=]].
|
||||
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_commit.svg]]
|
||||
|
||||
Two significant things happened here:
|
||||
- Your position on the graph changed: =HEAD= points to the new commit
|
||||
you just created.
|
||||
- More importantly: =master= moved as well. This is the main property
|
||||
of branches: instead of being "dumb" labels pointing to commits,
|
||||
they will automatically move when you add new commits on top of
|
||||
them. (Note that this won't be the case with tags, which always
|
||||
point to the same commit no matter what.)
|
||||
|
||||
If you can add commits, you can also remove them (if they don't have
|
||||
any children, obviously). However, very often it is better to add a
|
||||
commit that will /revert/[fn:revert] the changes of another commit
|
||||
(i.e. apply the opposite changes). This way, you keep track of what's
|
||||
been done to the repository structure, and you do not lose the
|
||||
reverted changes (should you need to re-apply them in the future).
|
||||
|
||||
[fn:revert] {-} Create a revert commit with [[https://git-scm.com/docs/git-revert][=git revert=]], and remove a
|
||||
commit with [[https://git-scm.com/docs/git-reset][=git reset=]] *(destructive!)*.
|
||||
|
||||
|
||||
** Merging
|
||||
|
||||
There is a special type of commits: /merge commits/, which have more
|
||||
than one parent (for example, the fifth commit from the left in the
|
||||
graph above).[fn:merge:{-} As can be expected, the command is [[https://git-scm.com/docs/git-merge][=git
|
||||
merge=]].]
|
||||
|
||||
At this point, we need to talk about /conflicts/. Until now, every
|
||||
action was simple: we can move around, add names, and add some
|
||||
changes. But now we are trying to reconcile two different versions
|
||||
into a single one. These two versions can be incompatible, and in this
|
||||
case the merge commit will have to choose which lines of each version
|
||||
to keep. If however, there is no conflict, the merge commit will be
|
||||
empty: it will have two parents, but will not contain any changes
|
||||
itself.
|
||||
|
||||
** Moving commits: rebasing and squashing
|
||||
|
||||
Until now, all the actions we've seen were append-only. We were only
|
||||
adding stuff, and it would be easy to just remove a node from the
|
||||
graph, and to move the various labels accordingly, to return to the
|
||||
previous state.
|
||||
|
||||
But sometimes, we want to do more complex manipulation of the graph:
|
||||
moving a commit and all its descendants to another location in the
|
||||
graph. This is called a /rebase/.[fn:rebase:{-} That you can perform
|
||||
with [[https://git-scm.com/docs/git-rebase][=git rebase=]] *(destructive!)*.]
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_rebase.svg]]
|
||||
|
||||
In this case, we moved the branch =feature= from its old position (in
|
||||
red) to a new one on top of =master= (in green).
|
||||
|
||||
When I say "move the branch =feature=", I actually mean something
|
||||
slightly different than before. Here, we don't just move the label
|
||||
=feature=, but also the entire chain of commits starting from the one
|
||||
pointed by =feature= up to the common ancestor of =feature= and its
|
||||
base branch (here =master=).
|
||||
|
||||
In practice, what we have done is deleted three commits, and added
|
||||
three brand new commits. Git actually helps us here by creating
|
||||
commits with the exact same changes. Sometimes, it is not possible to
|
||||
apply the same changes exactly because the original version is not the
|
||||
same. For instance, if one of the commits changed a line that no
|
||||
longer exist in the new base, there will be a conflict. When rebasing,
|
||||
you may have to manually resolve these conflicts, similarly to a
|
||||
merge.
|
||||
|
||||
It is often interesting to rebase before merging, because then we can
|
||||
avoid merge commits entirely. Since =feature= has been rebased on top
|
||||
of =master=, when merging =feature= onto =master=, we can just
|
||||
/fast-forward/ =master=, in effect just moving the =master= label
|
||||
where =feature= is:[fn:fastforward]
|
||||
|
||||
[fn:fastforward] {-} You can control whether or not =git merge= does a
|
||||
fast-forward with the =--ff-only= and =--no-ff= flags.
|
||||
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_ff.svg]]
|
||||
|
||||
Another manipulation that we can do on the graph is /squashing/,
|
||||
i.e. lumping several commits together in a single one.[fn:squash:{-}
|
||||
Use [[https://git-scm.com/docs/git-squash][=git squash=]] *(destructive!)*.]
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_squash.svg]]
|
||||
|
||||
Here, the three commits of the =feature= branch have been condensed
|
||||
into a single one. No conflict can happen, but we lose the history of
|
||||
the changes. Squashing may be useful to clean up a complex history.
|
||||
|
||||
Squashing and rebasing, taken together, can be extremely powerful
|
||||
tools to entirely rewrite the history of a repo. With them, you can
|
||||
reorder commits, squash them together, moving them elsewhere, and so
|
||||
on. However, these commands are also extremely dangerous: since you
|
||||
overwrite the history, there is a lot of potential for conflicts and
|
||||
general mistakes. By contrast, merges are very safe: even if there are
|
||||
conflicts and you have messed them up, you can always remove the merge
|
||||
commit and go back to the previous state. But when you rebase a set of
|
||||
commits and mess up the conflict resolution, there is no going back:
|
||||
the history has been lost forever, and you generally cannot recover
|
||||
the original state of the repository.
|
||||
|
||||
* Remotes: sharing your work with others
|
||||
|
||||
You can use Git as a simple version tracking system for your own
|
||||
projects, on your own computer. But most of the time, Git is used to
|
||||
collaborate with other people. For this reason, Git has an elaborate
|
||||
system for sharing changes with others. The good news is: everything
|
||||
is still represented in the graph! There is nothing fundamentally
|
||||
different to understand.
|
||||
|
||||
When two different people work on the same project, each will have a
|
||||
version of the repository locally. Let's say that Alice and Bob are
|
||||
both working on our project.
|
||||
|
||||
Alice has made a significant improvement to the project, and has
|
||||
created several commits, that are tracked in the =feature= branch she
|
||||
has created locally. The graph above (after rebasing) represents
|
||||
Alice's repository. Bob, meanwhile, has the same repository but
|
||||
without the =feature= branch. How can they share their work? Alice can
|
||||
send the commits from =feature= to the common ancestor of =master= and
|
||||
=feature= to Bob. Bob will see this branch as part of a /remote/
|
||||
graph, that will be superimposed on his graph: [fn:remote]
|
||||
|
||||
[fn:remote] {-} You can add, remove, rename, and generally manage
|
||||
remotes with [[https://git-scm.com/docs/git-remote][=git remote=]]. To transfer data between you and a remote,
|
||||
use [[https://git-scm.com/docs/git-fetch][=git fetch=]], [[https://git-scm.com/docs/git-pull][=git pull=]] (which fetches and merges in your local
|
||||
branch automatically), and [[https://git-scm.com/docs/git-push][=git push=]].
|
||||
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_bob.svg]]
|
||||
|
||||
The branch name he just got from Alice is prefixed by the name of the
|
||||
remote, in this case =alice=. These are just ordinary commits, and an
|
||||
ordinary branch (i.e. just a label on a specific commit).
|
||||
|
||||
Now Bob can see Alice's work, and has some idea to improve on it. So
|
||||
he wants to make a new commit on top of Alice's changes. But the
|
||||
=alice/feature= branch is here to track the state of Alice's
|
||||
repository, so he just creates a new branch just for him named
|
||||
=feature=, where he add a commit:
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_bob2.svg]]
|
||||
|
||||
Similarly, Alice can now retrieve Bob's work, and will have a new
|
||||
branch =bob/feature= with the additional commit. If she wants, she can
|
||||
now incorporate the new commit to her own branch =feature=, making her
|
||||
branches =feature= and =bob/feature= identical:
|
||||
|
||||
[[file:/images/git-graphs/repo_labels_alice.svg]]
|
||||
|
||||
As you can see, sharing work in Git is just a matter of having
|
||||
additional branches that represent the graph of other people. Some
|
||||
branches are shared among different people, and in this case you will
|
||||
have several branches, each prefixed with the name of the
|
||||
remote. Everything is still represented simply in a single graph.
|
||||
|
||||
* Additional concepts
|
||||
|
||||
Unfortunately, some things are not captured in the graph
|
||||
directly. Most notably, the [[https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository][staging area]] used for selecting changes
|
||||
for committing, [[https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning][stashing]], and [[https://git-scm.com/book/en/v2/Git-Tools-Submodules][submodules]] greatly extend the
|
||||
capabilities of Git beyond simple graph manipulations. You can read
|
||||
about all of these in /Pro Git/.
|
||||
|
||||
* Internals
|
||||
|
||||
* References
|