hgbook
changeset 112:2fcead053b7a
More. Concept. Fun.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Mon Nov 13 13:21:29 2006 -0800 (2006-11-13) |
parents | 34b8b7a15ea1 |
children | a0f57b3e677e |
files | en/Makefile en/concepts.tex en/revlog.svg |
line diff
1.1 --- a/en/Makefile Fri Nov 10 15:32:33 2006 -0800 1.2 +++ b/en/Makefile Mon Nov 13 13:21:29 2006 -0800 1.3 @@ -25,6 +25,7 @@ 1.4 kdiff3.png \ 1.5 metadata.svg \ 1.6 mq-stack.svg \ 1.7 + revlog.svg \ 1.8 snapshot.svg \ 1.9 tour-history.svg \ 1.10 tour-merge-conflict.svg \
2.1 --- a/en/concepts.tex Fri Nov 10 15:32:33 2006 -0800 2.2 +++ b/en/concepts.tex Mon Nov 13 13:21:29 2006 -0800 2.3 @@ -12,6 +12,10 @@ 2.4 the software is doing when I perform a revision control task, I'm less 2.5 likely to be surprised by its behaviour. 2.6 2.7 +In this chapter, we'll initially cover the core concepts behind 2.8 +Mercurial's design, then continue to discuss some of the interesting 2.9 +details of its implementation. 2.10 + 2.11 \section{Mercurial's historical record} 2.12 2.13 \subsection{Tracking the history of a single file} 2.14 @@ -174,19 +178,23 @@ 2.15 the next key frame is received. Also, the accumulation of encoding 2.16 errors restarts anew with each key frame. 2.17 2.18 -\subsection{Strong integrity} 2.19 +\subsection{Identification and strong integrity} 2.20 2.21 Along with delta or snapshot information, a revlog entry contains a 2.22 cryptographic hash of the data that it represents. This makes it 2.23 difficult to forge the contents of a revision, and easy to detect 2.24 -accidental corruption. The hash that Mercurial uses is SHA-1, which 2.25 -is 160 bits long. Although all revision data is hashed, the changeset 2.26 +accidental corruption. 2.27 + 2.28 +Hashes provide more than a mere check against corruption; they are 2.29 +used as the identifiers for revisions. The changeset identification 2.30 hashes that you see as an end user are from revisions of the 2.31 -changelog. Manifest and file hashes are only used behind the scenes. 2.32 - 2.33 -Mercurial checks these hashes when retrieving file revisions and when 2.34 -pulling changes from a repository. If it encounters an integrity 2.35 -problem, it will complain and stop whatever it's doing. 2.36 +changelog. Although filelogs and the manifest also use hashes, 2.37 +Mercurial only uses these behind the scenes. 2.38 + 2.39 +Mercurial verifies that hashes are correct when it retrieves file 2.40 +revisions and when it pulls changes from another repository. If it 2.41 +encounters an integrity problem, it will complain and stop whatever 2.42 +it's doing. 2.43 2.44 In addition to the effect it has on retrieval efficiency, Mercurial's 2.45 use of periodic snapshots makes it more robust against partial data 2.46 @@ -220,6 +228,35 @@ 2.47 amount of data that Mercurial needs to read, which yields large 2.48 performance improvements compared to other revision control systems. 2.49 2.50 +\section{Revision history, branching, 2.51 + and merging} 2.52 + 2.53 +Every entry in a Mercurial revlog knows the identity of its immediate 2.54 +ancestor revision, usually referred to as its \emph{parent}. In fact, 2.55 +a revision contains room for not one parent, but two. Mercurial uses 2.56 +a special hash, called the ``null ID'', to represent the idea ``there 2.57 +is no parent here''. This hash is simply a string of zeroes. 2.58 + 2.59 +In figure~\ref{fig:concepts:revlog}, you can see an example of the 2.60 +conceptual structure of a revlog. Filelogs, manifests, and changelogs 2.61 +all have this same structure; they differ only in the kind of data 2.62 +stored in each delta or snapshot. 2.63 + 2.64 +The first revision in a revlog (at the bottom of the image) has the 2.65 +null ID in both of its parent slots. For a ``normal'' revision, its 2.66 +first parent slot contains the ID of its parent revision, and its 2.67 +second contains the null ID, indicating that the revision has only one 2.68 +real parent. Any two revisions that have the same parent ID are 2.69 +branches. A revision that represents a merge between branches has two 2.70 +normal revision IDs in its parent slots. 2.71 + 2.72 +\begin{figure}[ht] 2.73 + \centering 2.74 + \grafix{revlog} 2.75 + \caption{} 2.76 + \label{fig:concepts:revlog} 2.77 +\end{figure} 2.78 + 2.79 \section{Other interesting design features} 2.80 2.81 In the sections above, I've tried to highlight some of the most
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/en/revlog.svg Mon Nov 13 13:21:29 2006 -0800 3.3 @@ -0,0 +1,1155 @@ 3.4 +<?xml version="1.0" encoding="UTF-8" standalone="no"?> 3.5 +<!-- Created with Inkscape (http://www.inkscape.org/) --> 3.6 +<svg 3.7 + xmlns:dc="http://purl.org/dc/elements/1.1/" 3.8 + xmlns:cc="http://web.resource.org/cc/" 3.9 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 3.10 + xmlns:svg="http://www.w3.org/2000/svg" 3.11 + xmlns="http://www.w3.org/2000/svg" 3.12 + xmlns:xlink="http://www.w3.org/1999/xlink" 3.13 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 3.14 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 3.15 + width="744.09448819" 3.16 + height="1052.3622047" 3.17 + id="svg2" 3.18 + sodipodi:version="0.32" 3.19 + inkscape:version="0.44.1" 3.20 + sodipodi:docbase="/home/bos/hg/hgbook/en" 3.21 + sodipodi:docname="revlog.svg"> 3.22 + <defs 3.23 + id="defs4"> 3.24 + <marker 3.25 + inkscape:stockid="Arrow1Mend" 3.26 + orient="auto" 3.27 + refY="0.0" 3.28 + refX="0.0" 3.29 + id="Arrow1Mend" 3.30 + style="overflow:visible;"> 3.31 + <path 3.32 + id="path4852" 3.33 + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " 3.34 + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" 3.35 + transform="scale(0.4) rotate(180) translate(10,0)" /> 3.36 + </marker> 3.37 + <linearGradient 3.38 + id="linearGradient3092"> 3.39 + <stop 3.40 + style="stop-color:#44436f;stop-opacity:1;" 3.41 + offset="0" 3.42 + id="stop3094" /> 3.43 + <stop 3.44 + style="stop-color:#abade5;stop-opacity:1;" 3.45 + offset="1" 3.46 + id="stop3096" /> 3.47 + </linearGradient> 3.48 + <linearGradient 3.49 + inkscape:collect="always" 3.50 + xlink:href="#linearGradient3092" 3.51 + id="linearGradient3118" 3.52 + gradientUnits="userSpaceOnUse" 3.53 + x1="176.16635" 3.54 + y1="405.21934" 3.55 + x2="417.11935" 3.56 + y2="405.21934" /> 3.57 + <linearGradient 3.58 + inkscape:collect="always" 3.59 + xlink:href="#linearGradient3092" 3.60 + id="linearGradient3120" 3.61 + gradientUnits="userSpaceOnUse" 3.62 + x1="176.16635" 3.63 + y1="405.21934" 3.64 + x2="417.11935" 3.65 + y2="405.21934" /> 3.66 + <linearGradient 3.67 + inkscape:collect="always" 3.68 + xlink:href="#linearGradient3092" 3.69 + id="linearGradient3129" 3.70 + gradientUnits="userSpaceOnUse" 3.71 + x1="176.16635" 3.72 + y1="405.21934" 3.73 + x2="417.11935" 3.74 + y2="405.21934" 3.75 + gradientTransform="translate(-0.928574,-1.428574)" /> 3.76 + <linearGradient 3.77 + inkscape:collect="always" 3.78 + xlink:href="#linearGradient3092" 3.79 + id="linearGradient3133" 3.80 + gradientUnits="userSpaceOnUse" 3.81 + x1="176.16635" 3.82 + y1="405.21934" 3.83 + x2="417.11935" 3.84 + y2="405.21934" 3.85 + gradientTransform="translate(-0.928574,-1.428574)" /> 3.86 + <linearGradient 3.87 + inkscape:collect="always" 3.88 + xlink:href="#linearGradient3092" 3.89 + id="linearGradient3708" 3.90 + gradientUnits="userSpaceOnUse" 3.91 + gradientTransform="matrix(0.423343,0,0,0.423343,138.874,-67.01732)" 3.92 + x1="175.23776" 3.93 + y1="509.98154" 3.94 + x2="416.29077" 3.95 + y2="297.49997" /> 3.96 + <linearGradient 3.97 + inkscape:collect="always" 3.98 + xlink:href="#linearGradient3092" 3.99 + id="linearGradient5164" 3.100 + gradientUnits="userSpaceOnUse" 3.101 + gradientTransform="matrix(0.423343,0,0,0.423343,198.249,247.4358)" 3.102 + x1="175.23776" 3.103 + y1="509.98154" 3.104 + x2="416.29077" 3.105 + y2="297.49997" /> 3.106 + <linearGradient 3.107 + inkscape:collect="always" 3.108 + xlink:href="#linearGradient3092" 3.109 + id="linearGradient5584" 3.110 + gradientUnits="userSpaceOnUse" 3.111 + gradientTransform="matrix(0.423343,0,0,0.423343,143.9081,371.2915)" 3.112 + x1="175.23776" 3.113 + y1="509.98154" 3.114 + x2="416.29077" 3.115 + y2="297.49997" /> 3.116 + <linearGradient 3.117 + inkscape:collect="always" 3.118 + xlink:href="#linearGradient3092" 3.119 + id="linearGradient5784" 3.120 + gradientUnits="userSpaceOnUse" 3.121 + gradientTransform="matrix(0.423343,0,0,0.423343,76.37397,152.137)" 3.122 + x1="175.23776" 3.123 + y1="509.98154" 3.124 + x2="416.29077" 3.125 + y2="297.49997" /> 3.126 + <linearGradient 3.127 + inkscape:collect="always" 3.128 + xlink:href="#linearGradient3092" 3.129 + id="linearGradient5786" 3.130 + gradientUnits="userSpaceOnUse" 3.131 + gradientTransform="matrix(0.423343,0,0,0.423343,198.249,152.137)" 3.132 + x1="175.23776" 3.133 + y1="509.98154" 3.134 + x2="416.29077" 3.135 + y2="297.49997" /> 3.136 + <linearGradient 3.137 + inkscape:collect="always" 3.138 + xlink:href="#linearGradient3092" 3.139 + id="linearGradient5895" 3.140 + gradientUnits="userSpaceOnUse" 3.141 + gradientTransform="matrix(0.423343,0,0,0.423343,198.0215,261.7142)" 3.142 + x1="175.23776" 3.143 + y1="509.98154" 3.144 + x2="416.29077" 3.145 + y2="297.49997" /> 3.146 + <linearGradient 3.147 + inkscape:collect="always" 3.148 + xlink:href="#linearGradient3092" 3.149 + id="linearGradient5958" 3.150 + gradientUnits="userSpaceOnUse" 3.151 + gradientTransform="matrix(0.423343,0,0,0.423343,137.1978,42.55987)" 3.152 + x1="175.23776" 3.153 + y1="509.98154" 3.154 + x2="416.29077" 3.155 + y2="297.49997" /> 3.156 + </defs> 3.157 + <sodipodi:namedview 3.158 + id="base" 3.159 + pagecolor="#ffffff" 3.160 + bordercolor="#666666" 3.161 + borderopacity="1.0" 3.162 + gridtolerance="10000" 3.163 + guidetolerance="10" 3.164 + objecttolerance="10" 3.165 + inkscape:pageopacity="0.0" 3.166 + inkscape:pageshadow="2" 3.167 + inkscape:zoom="0.64" 3.168 + inkscape:cx="566.02368" 3.169 + inkscape:cy="688.16826" 3.170 + inkscape:document-units="px" 3.171 + inkscape:current-layer="layer1" 3.172 + inkscape:window-width="906" 3.173 + inkscape:window-height="620" 3.174 + inkscape:window-x="29" 3.175 + inkscape:window-y="79" 3.176 + inkscape:connector-spacing="11" /> 3.177 + <metadata 3.178 + id="metadata7"> 3.179 + <rdf:RDF> 3.180 + <cc:Work 3.181 + rdf:about=""> 3.182 + <dc:format>image/svg+xml</dc:format> 3.183 + <dc:type 3.184 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 3.185 + </cc:Work> 3.186 + </rdf:RDF> 3.187 + </metadata> 3.188 + <g 3.189 + inkscape:label="Layer 1" 3.190 + inkscape:groupmode="layer" 3.191 + id="layer1"> 3.192 + <rect 3.193 + y="168.74846" 3.194 + x="211.58516" 3.195 + height="89.506805" 3.196 + width="101.60232" 3.197 + id="rect3068" 3.198 + style="fill:url(#linearGradient5958);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.199 + <g 3.200 + id="g3215" 3.201 + transform="matrix(0.423343,0,0,0.423343,137.1977,42.55985)"> 3.202 + <rect 3.203 + y="447.71451" 3.204 + x="299.67859" 3.205 + height="48.571426" 3.206 + width="103.14286" 3.207 + id="rect2899" 3.208 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.209 + <text 3.210 + id="text2903" 3.211 + y="464.8139" 3.212 + x="308.89639" 3.213 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.214 + xml:space="preserve"><tspan 3.215 + y="464.8139" 3.216 + x="308.89639" 3.217 + sodipodi:role="line" 3.218 + id="tspan2905">Second parent</tspan></text> 3.219 + <text 3.220 + id="text2907" 3.221 + y="485.50256" 3.222 + x="308.20175" 3.223 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.224 + xml:space="preserve"><tspan 3.225 + style="font-family:Courier" 3.226 + y="485.50256" 3.227 + x="308.20175" 3.228 + id="tspan2909" 3.229 + sodipodi:role="line">32bf9a5f22c0</tspan></text> 3.230 + </g> 3.231 + <g 3.232 + id="g3250" 3.233 + transform="matrix(0.423343,0,0,0.423343,137.1977,42.55986)"> 3.234 + <rect 3.235 + y="311.28598" 3.236 + x="188.6071" 3.237 + height="48.571426" 3.238 + width="103.14286" 3.239 + id="rect2936" 3.240 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.241 + <text 3.242 + id="text2940" 3.243 + y="328.38538" 3.244 + x="197.82495" 3.245 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.246 + xml:space="preserve"><tspan 3.247 + y="328.38538" 3.248 + x="197.82495" 3.249 + sodipodi:role="line" 3.250 + id="tspan2942">Revision hash</tspan></text> 3.251 + <text 3.252 + id="text2944" 3.253 + y="349.07404" 3.254 + x="197.13031" 3.255 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.256 + xml:space="preserve"><tspan 3.257 + style="font-family:Courier" 3.258 + y="349.07404" 3.259 + x="197.13031" 3.260 + id="tspan2946" 3.261 + sodipodi:role="line">34b8b7a15ea1</tspan></text> 3.262 + </g> 3.263 + <g 3.264 + id="g3243" 3.265 + transform="matrix(0.423343,0,0,0.423343,137.6664,43.91853)"> 3.266 + <rect 3.267 + y="363.07654" 3.268 + x="187.5" 3.269 + height="75" 3.270 + width="213.85715" 3.271 + id="rect2950" 3.272 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.273 + <text 3.274 + id="text2958" 3.275 + y="400.86459" 3.276 + x="196.02321" 3.277 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.278 + xml:space="preserve"><tspan 3.279 + style="fill:black;fill-opacity:1;font-family:Courier" 3.280 + y="400.86459" 3.281 + x="196.02321" 3.282 + id="tspan2960" 3.283 + sodipodi:role="line">...</tspan></text> 3.284 + <text 3.285 + id="text2954" 3.286 + y="380.17593" 3.287 + x="196.71785" 3.288 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.289 + xml:space="preserve"><tspan 3.290 + y="380.17593" 3.291 + x="196.71785" 3.292 + sodipodi:role="line" 3.293 + id="tspan2956" 3.294 + style="fill:black;fill-opacity:1">Revision data (delta or snapshot)</tspan></text> 3.295 + </g> 3.296 + <g 3.297 + id="g5529" 3.298 + transform="translate(-6.710312,-8.165836e-6)"> 3.299 + <rect 3.300 + style="fill:url(#linearGradient5584);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.301 + id="rect3509" 3.302 + width="101.60232" 3.303 + height="89.506805" 3.304 + x="218.29547" 3.305 + y="497.4801" /> 3.306 + <g 3.307 + transform="matrix(0.423343,0,0,0.423343,143.908,371.2915)" 3.308 + id="g3513"> 3.309 + <g 3.310 + id="g3515"> 3.311 + <rect 3.312 + y="447.72418" 3.313 + x="188.6071" 3.314 + height="48.571426" 3.315 + width="103.14286" 3.316 + id="rect3517" 3.317 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.318 + <text 3.319 + id="text3519" 3.320 + y="464.82358" 3.321 + x="197.82495" 3.322 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.323 + xml:space="preserve"><tspan 3.324 + y="464.82358" 3.325 + x="197.82495" 3.326 + sodipodi:role="line" 3.327 + id="tspan3521">First parent</tspan></text> 3.328 + <text 3.329 + id="text3523" 3.330 + y="485.51224" 3.331 + x="197.13031" 3.332 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.333 + xml:space="preserve"><tspan 3.334 + style="font-family:Courier" 3.335 + y="485.51224" 3.336 + x="197.13031" 3.337 + id="tspan3525" 3.338 + sodipodi:role="line">000000000000</tspan></text> 3.339 + </g> 3.340 + <g 3.341 + id="g3527"> 3.342 + <rect 3.343 + y="447.71451" 3.344 + x="299.67859" 3.345 + height="48.571426" 3.346 + width="103.14286" 3.347 + id="rect3529" 3.348 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.349 + <text 3.350 + id="text3531" 3.351 + y="464.8139" 3.352 + x="308.89639" 3.353 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.354 + xml:space="preserve"><tspan 3.355 + y="464.8139" 3.356 + x="308.89639" 3.357 + sodipodi:role="line" 3.358 + id="tspan3533">Second parent</tspan></text> 3.359 + <text 3.360 + id="text3535" 3.361 + y="485.50256" 3.362 + x="308.20175" 3.363 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.364 + xml:space="preserve"><tspan 3.365 + style="font-family:Courier" 3.366 + y="485.50256" 3.367 + x="308.20175" 3.368 + id="tspan3537" 3.369 + sodipodi:role="line">000000000000</tspan></text> 3.370 + </g> 3.371 + </g> 3.372 + <g 3.373 + transform="matrix(0.423343,0,0,0.423343,143.908,371.2915)" 3.374 + id="g3539"> 3.375 + <rect 3.376 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.377 + id="rect3541" 3.378 + width="103.14286" 3.379 + height="48.571426" 3.380 + x="188.6071" 3.381 + y="311.28598" /> 3.382 + <text 3.383 + xml:space="preserve" 3.384 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.385 + x="197.82495" 3.386 + y="328.38538" 3.387 + id="text3543"><tspan 3.388 + id="tspan3545" 3.389 + sodipodi:role="line" 3.390 + x="197.82495" 3.391 + y="328.38538">Revision hash</tspan></text> 3.392 + <text 3.393 + xml:space="preserve" 3.394 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.395 + x="197.13031" 3.396 + y="349.07404" 3.397 + id="text3547"><tspan 3.398 + sodipodi:role="line" 3.399 + id="tspan3549" 3.400 + x="197.13031" 3.401 + y="349.07404" 3.402 + style="font-family:Courier">ff9dc8bc2a8b</tspan></text> 3.403 + </g> 3.404 + <g 3.405 + transform="matrix(0.423343,0,0,0.423343,144.3767,372.6502)" 3.406 + id="g3551"> 3.407 + <rect 3.408 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.409 + id="rect3553" 3.410 + width="213.85715" 3.411 + height="75" 3.412 + x="187.5" 3.413 + y="363.07654" /> 3.414 + <text 3.415 + xml:space="preserve" 3.416 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.417 + x="196.02321" 3.418 + y="400.86459" 3.419 + id="text3555"><tspan 3.420 + sodipodi:role="line" 3.421 + id="tspan3557" 3.422 + x="196.02321" 3.423 + y="400.86459" 3.424 + style="fill:black;fill-opacity:1;font-family:Courier">...</tspan></text> 3.425 + <text 3.426 + xml:space="preserve" 3.427 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.428 + x="196.71785" 3.429 + y="380.17593" 3.430 + id="text3559"><tspan 3.431 + style="fill:black;fill-opacity:1" 3.432 + id="tspan3561" 3.433 + sodipodi:role="line" 3.434 + x="196.71785" 3.435 + y="380.17593">Revision data (delta or snapshot)</tspan></text> 3.436 + </g> 3.437 + </g> 3.438 + <g 3.439 + id="g4868" 3.440 + transform="translate(-1.676208,-2.342463e-5)"> 3.441 + <rect 3.442 + style="fill:url(#linearGradient3708);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.443 + id="rect3567" 3.444 + width="101.60232" 3.445 + height="89.506805" 3.446 + x="213.26137" 3.447 + y="59.171272" /> 3.448 + <g 3.449 + transform="matrix(0.423343,0,0,0.423343,138.8739,-67.01734)" 3.450 + id="g3573"> 3.451 + <rect 3.452 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.453 + id="rect3575" 3.454 + width="103.14286" 3.455 + height="48.571426" 3.456 + x="188.6071" 3.457 + y="447.72418" /> 3.458 + <text 3.459 + xml:space="preserve" 3.460 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.461 + x="197.82495" 3.462 + y="464.82358" 3.463 + id="text3577"><tspan 3.464 + id="tspan3579" 3.465 + sodipodi:role="line" 3.466 + x="197.82495" 3.467 + y="464.82358">First parent</tspan></text> 3.468 + <text 3.469 + xml:space="preserve" 3.470 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.471 + x="197.13031" 3.472 + y="485.51224" 3.473 + id="text3581"><tspan 3.474 + sodipodi:role="line" 3.475 + id="tspan3583" 3.476 + x="197.13031" 3.477 + y="485.51224" 3.478 + style="font-family:Courier">34b8b7a15ea1</tspan></text> 3.479 + </g> 3.480 + <g 3.481 + transform="matrix(0.423343,0,0,0.423343,138.8739,-67.01734)" 3.482 + id="g3585"> 3.483 + <rect 3.484 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.485 + id="rect3587" 3.486 + width="103.14286" 3.487 + height="48.571426" 3.488 + x="299.67859" 3.489 + y="447.71451" /> 3.490 + <text 3.491 + xml:space="preserve" 3.492 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.493 + x="308.89639" 3.494 + y="464.8139" 3.495 + id="text3589"><tspan 3.496 + id="tspan3591" 3.497 + sodipodi:role="line" 3.498 + x="308.89639" 3.499 + y="464.8139">Second parent</tspan></text> 3.500 + <text 3.501 + xml:space="preserve" 3.502 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.503 + x="308.20175" 3.504 + y="485.50256" 3.505 + id="text3593"><tspan 3.506 + sodipodi:role="line" 3.507 + id="tspan3595" 3.508 + x="308.20175" 3.509 + y="485.50256" 3.510 + style="font-family:Courier">000000000000</tspan></text> 3.511 + </g> 3.512 + <g 3.513 + transform="matrix(0.423343,0,0,0.423343,138.8739,-67.01733)" 3.514 + id="g3597"> 3.515 + <rect 3.516 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.517 + id="rect3599" 3.518 + width="103.14286" 3.519 + height="48.571426" 3.520 + x="188.6071" 3.521 + y="311.28598" /> 3.522 + <text 3.523 + xml:space="preserve" 3.524 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.525 + x="197.82495" 3.526 + y="328.38538" 3.527 + id="text3601"><tspan 3.528 + id="tspan3603" 3.529 + sodipodi:role="line" 3.530 + x="197.82495" 3.531 + y="328.38538">Revision hash</tspan></text> 3.532 + <text 3.533 + xml:space="preserve" 3.534 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.535 + x="197.13031" 3.536 + y="349.07404" 3.537 + id="text3605"><tspan 3.538 + sodipodi:role="line" 3.539 + id="tspan3607" 3.540 + x="197.13031" 3.541 + y="349.07404" 3.542 + style="font-family:Courier">1b67dc96f27a</tspan></text> 3.543 + </g> 3.544 + <g 3.545 + transform="matrix(0.423343,0,0,0.423343,139.3426,-65.65866)" 3.546 + id="g3609"> 3.547 + <rect 3.548 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.549 + id="rect3611" 3.550 + width="213.85715" 3.551 + height="75" 3.552 + x="187.5" 3.553 + y="363.07654" /> 3.554 + <text 3.555 + xml:space="preserve" 3.556 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.557 + x="196.02321" 3.558 + y="400.86459" 3.559 + id="text3613"><tspan 3.560 + sodipodi:role="line" 3.561 + id="tspan3615" 3.562 + x="196.02321" 3.563 + y="400.86459" 3.564 + style="fill:black;fill-opacity:1;font-family:Courier">...</tspan></text> 3.565 + <text 3.566 + xml:space="preserve" 3.567 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.568 + x="196.71785" 3.569 + y="380.17593" 3.570 + id="text3617"><tspan 3.571 + style="fill:black;fill-opacity:1" 3.572 + id="tspan3619" 3.573 + sodipodi:role="line" 3.574 + x="196.71785" 3.575 + y="380.17593">Revision data (delta or snapshot)</tspan></text> 3.576 + </g> 3.577 + </g> 3.578 + <path 3.579 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)" 3.580 + d="M 240.78255,143.08593 L 241.42595,171.75349" 3.581 + id="path3801" 3.582 + inkscape:connector-type="polyline" 3.583 + inkscape:connection-start="#g3573" 3.584 + inkscape:connection-end="#g3250" /> 3.585 + <g 3.586 + id="g5677"> 3.587 + <rect 3.588 + style="fill:url(#linearGradient5784);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.589 + id="rect3393" 3.590 + width="101.60232" 3.591 + height="89.506805" 3.592 + x="150.76137" 3.593 + y="278.32565" /> 3.594 + <g 3.595 + transform="matrix(0.423343,0,0,0.423343,76.37397,152.137)" 3.596 + id="g3399"> 3.597 + <rect 3.598 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.599 + id="rect3401" 3.600 + width="103.14286" 3.601 + height="48.571426" 3.602 + x="188.6071" 3.603 + y="447.72418" /> 3.604 + <text 3.605 + xml:space="preserve" 3.606 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.607 + x="197.82495" 3.608 + y="464.82358" 3.609 + id="text3403"><tspan 3.610 + id="tspan3405" 3.611 + sodipodi:role="line" 3.612 + x="197.82495" 3.613 + y="464.82358">First parent</tspan></text> 3.614 + <text 3.615 + xml:space="preserve" 3.616 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.617 + x="197.13031" 3.618 + y="485.51224" 3.619 + id="text3407"><tspan 3.620 + sodipodi:role="line" 3.621 + id="tspan3409" 3.622 + x="197.13031" 3.623 + y="485.51224" 3.624 + style="font-family:Courier">ff9dc8bc2a8b</tspan></text> 3.625 + </g> 3.626 + <g 3.627 + transform="matrix(0.423343,0,0,0.423343,76.37397,152.137)" 3.628 + id="g3411"> 3.629 + <rect 3.630 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.631 + id="rect3413" 3.632 + width="103.14286" 3.633 + height="48.571426" 3.634 + x="299.67859" 3.635 + y="447.71451" /> 3.636 + <text 3.637 + xml:space="preserve" 3.638 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.639 + x="308.89639" 3.640 + y="464.8139" 3.641 + id="text3415"><tspan 3.642 + id="tspan3417" 3.643 + sodipodi:role="line" 3.644 + x="308.89639" 3.645 + y="464.8139">Second parent</tspan></text> 3.646 + <text 3.647 + xml:space="preserve" 3.648 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.649 + x="308.20175" 3.650 + y="485.50256" 3.651 + id="text3419"><tspan 3.652 + sodipodi:role="line" 3.653 + id="tspan3421" 3.654 + x="308.20175" 3.655 + y="485.50256" 3.656 + style="font-family:Courier">000000000000</tspan></text> 3.657 + </g> 3.658 + <g 3.659 + transform="matrix(0.423343,0,0,0.423343,76.37397,152.137)" 3.660 + id="g3423"> 3.661 + <rect 3.662 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.663 + id="rect3425" 3.664 + width="103.14286" 3.665 + height="48.571426" 3.666 + x="188.6071" 3.667 + y="311.28598" /> 3.668 + <text 3.669 + xml:space="preserve" 3.670 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.671 + x="197.82495" 3.672 + y="328.38538" 3.673 + id="text3427"><tspan 3.674 + id="tspan3429" 3.675 + sodipodi:role="line" 3.676 + x="197.82495" 3.677 + y="328.38538">Revision hash</tspan></text> 3.678 + <text 3.679 + xml:space="preserve" 3.680 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.681 + x="197.13031" 3.682 + y="349.07404" 3.683 + id="text3431"><tspan 3.684 + sodipodi:role="line" 3.685 + id="tspan3433" 3.686 + x="197.13031" 3.687 + y="349.07404" 3.688 + style="font-family:Courier">5b80c922ebdd</tspan></text> 3.689 + </g> 3.690 + <g 3.691 + transform="matrix(0.423343,0,0,0.423343,76.84265,153.4957)" 3.692 + id="g3435"> 3.693 + <rect 3.694 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.695 + id="rect3437" 3.696 + width="213.85715" 3.697 + height="75" 3.698 + x="187.5" 3.699 + y="363.07654" /> 3.700 + <text 3.701 + xml:space="preserve" 3.702 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.703 + x="196.02321" 3.704 + y="400.86459" 3.705 + id="text3439"><tspan 3.706 + sodipodi:role="line" 3.707 + id="tspan3441" 3.708 + x="196.02321" 3.709 + y="400.86459" 3.710 + style="fill:black;fill-opacity:1;font-family:Courier">...</tspan></text> 3.711 + <text 3.712 + xml:space="preserve" 3.713 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.714 + x="196.71785" 3.715 + y="380.17593" 3.716 + id="text3443"><tspan 3.717 + style="fill:black;fill-opacity:1" 3.718 + id="tspan3445" 3.719 + sodipodi:role="line" 3.720 + x="196.71785" 3.721 + y="380.17593">Revision data (delta or snapshot)</tspan></text> 3.722 + </g> 3.723 + </g> 3.724 + <g 3.725 + id="g5646" 3.726 + transform="translate(-0.227432,0)"> 3.727 + <rect 3.728 + style="fill:url(#linearGradient5786);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.729 + id="rect3451" 3.730 + width="101.60232" 3.731 + height="89.506805" 3.732 + x="272.63638" 3.733 + y="278.32565" /> 3.734 + <g 3.735 + transform="matrix(0.423343,0,0,0.423343,198.2489,152.137)" 3.736 + id="g3457"> 3.737 + <rect 3.738 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.739 + id="rect3459" 3.740 + width="103.14286" 3.741 + height="48.571426" 3.742 + x="188.6071" 3.743 + y="447.72418" /> 3.744 + <text 3.745 + xml:space="preserve" 3.746 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.747 + x="197.82495" 3.748 + y="464.82358" 3.749 + id="text3461"><tspan 3.750 + id="tspan3463" 3.751 + sodipodi:role="line" 3.752 + x="197.82495" 3.753 + y="464.82358">First parent</tspan></text> 3.754 + <text 3.755 + xml:space="preserve" 3.756 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.757 + x="197.13031" 3.758 + y="485.51224" 3.759 + id="text3465"><tspan 3.760 + sodipodi:role="line" 3.761 + id="tspan3467" 3.762 + x="197.13031" 3.763 + y="485.51224" 3.764 + style="font-family:Courier">ecacb6b4c9fd</tspan></text> 3.765 + </g> 3.766 + <g 3.767 + transform="matrix(0.423343,0,0,0.423343,198.2489,152.137)" 3.768 + id="g3469"> 3.769 + <rect 3.770 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.771 + id="rect3471" 3.772 + width="103.14286" 3.773 + height="48.571426" 3.774 + x="299.67859" 3.775 + y="447.71451" /> 3.776 + <text 3.777 + xml:space="preserve" 3.778 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.779 + x="308.89639" 3.780 + y="464.8139" 3.781 + id="text3473"><tspan 3.782 + id="tspan3475" 3.783 + sodipodi:role="line" 3.784 + x="308.89639" 3.785 + y="464.8139">Second parent</tspan></text> 3.786 + <text 3.787 + xml:space="preserve" 3.788 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.789 + x="308.20175" 3.790 + y="485.50256" 3.791 + id="text3477"><tspan 3.792 + sodipodi:role="line" 3.793 + id="tspan3479" 3.794 + x="308.20175" 3.795 + y="485.50256" 3.796 + style="font-family:Courier">000000000000</tspan></text> 3.797 + </g> 3.798 + <g 3.799 + transform="matrix(0.423343,0,0,0.423343,198.2489,152.137)" 3.800 + id="g3481"> 3.801 + <rect 3.802 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.803 + id="rect3483" 3.804 + width="103.14286" 3.805 + height="48.571426" 3.806 + x="188.6071" 3.807 + y="311.28598" /> 3.808 + <text 3.809 + xml:space="preserve" 3.810 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.811 + x="197.82495" 3.812 + y="328.38538" 3.813 + id="text3485"><tspan 3.814 + id="tspan3487" 3.815 + sodipodi:role="line" 3.816 + x="197.82495" 3.817 + y="328.38538">Revision hash</tspan></text> 3.818 + <text 3.819 + xml:space="preserve" 3.820 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.821 + x="197.13031" 3.822 + y="349.07404" 3.823 + id="text3489"><tspan 3.824 + sodipodi:role="line" 3.825 + id="tspan3491" 3.826 + x="197.13031" 3.827 + y="349.07404" 3.828 + style="font-family:Courier">32bf9a5f22c0</tspan></text> 3.829 + </g> 3.830 + <g 3.831 + transform="matrix(0.423343,0,0,0.423343,198.7176,153.4957)" 3.832 + id="g3493"> 3.833 + <rect 3.834 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.835 + id="rect3495" 3.836 + width="213.85715" 3.837 + height="75" 3.838 + x="187.5" 3.839 + y="363.07654" /> 3.840 + <text 3.841 + xml:space="preserve" 3.842 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.843 + x="196.02321" 3.844 + y="400.86459" 3.845 + id="text3497"><tspan 3.846 + sodipodi:role="line" 3.847 + id="tspan3499" 3.848 + x="196.02321" 3.849 + y="400.86459" 3.850 + style="fill:black;fill-opacity:1;font-family:Courier">...</tspan></text> 3.851 + <text 3.852 + xml:space="preserve" 3.853 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.854 + x="196.71785" 3.855 + y="380.17593" 3.856 + id="text3501"><tspan 3.857 + style="fill:black;fill-opacity:1" 3.858 + id="tspan3503" 3.859 + sodipodi:role="line" 3.860 + x="196.71785" 3.861 + y="380.17593">Revision data (delta or snapshot)</tspan></text> 3.862 + </g> 3.863 + </g> 3.864 + <rect 3.865 + y="387.90286" 3.866 + x="272.40894" 3.867 + height="89.506805" 3.868 + width="101.60232" 3.869 + id="rect5081" 3.870 + style="fill:url(#linearGradient5895);fill-opacity:1;stroke:black;stroke-width:0.48811448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.871 + <g 3.872 + id="g5087" 3.873 + transform="matrix(0.423343,0,0,0.423343,198.0214,261.7142)"> 3.874 + <rect 3.875 + y="447.72418" 3.876 + x="188.6071" 3.877 + height="48.571426" 3.878 + width="103.14286" 3.879 + id="rect5089" 3.880 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.881 + <text 3.882 + id="text5091" 3.883 + y="464.82358" 3.884 + x="197.82495" 3.885 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.886 + xml:space="preserve"><tspan 3.887 + y="464.82358" 3.888 + x="197.82495" 3.889 + sodipodi:role="line" 3.890 + id="tspan5093">First parent</tspan></text> 3.891 + <text 3.892 + id="text5095" 3.893 + y="485.51224" 3.894 + x="197.13031" 3.895 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.896 + xml:space="preserve"><tspan 3.897 + style="font-family:Courier" 3.898 + y="485.51224" 3.899 + x="197.13031" 3.900 + id="tspan5097" 3.901 + sodipodi:role="line">ff9dc8bc2a8b</tspan></text> 3.902 + </g> 3.903 + <g 3.904 + id="g5099" 3.905 + transform="matrix(0.423343,0,0,0.423343,198.0214,261.7142)"> 3.906 + <rect 3.907 + y="447.71451" 3.908 + x="299.67859" 3.909 + height="48.571426" 3.910 + width="103.14286" 3.911 + id="rect5101" 3.912 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.913 + <text 3.914 + id="text5103" 3.915 + y="464.8139" 3.916 + x="308.89639" 3.917 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.918 + xml:space="preserve"><tspan 3.919 + y="464.8139" 3.920 + x="308.89639" 3.921 + sodipodi:role="line" 3.922 + id="tspan5105">Second parent</tspan></text> 3.923 + <text 3.924 + id="text5107" 3.925 + y="485.50256" 3.926 + x="308.20175" 3.927 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.928 + xml:space="preserve"><tspan 3.929 + style="font-family:Courier" 3.930 + y="485.50256" 3.931 + x="308.20175" 3.932 + id="tspan5109" 3.933 + sodipodi:role="line">000000000000</tspan></text> 3.934 + </g> 3.935 + <g 3.936 + id="g5111" 3.937 + transform="matrix(0.423343,0,0,0.423343,198.0214,261.7142)"> 3.938 + <rect 3.939 + y="311.28598" 3.940 + x="188.6071" 3.941 + height="48.571426" 3.942 + width="103.14286" 3.943 + id="rect5113" 3.944 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.945 + <text 3.946 + id="text5115" 3.947 + y="328.38538" 3.948 + x="197.82495" 3.949 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.950 + xml:space="preserve"><tspan 3.951 + y="328.38538" 3.952 + x="197.82495" 3.953 + sodipodi:role="line" 3.954 + id="tspan5117">Revision hash</tspan></text> 3.955 + <text 3.956 + id="text5119" 3.957 + y="349.07404" 3.958 + x="197.13031" 3.959 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.960 + xml:space="preserve"><tspan 3.961 + style="font-family:Courier" 3.962 + y="349.07404" 3.963 + x="197.13031" 3.964 + id="tspan5121" 3.965 + sodipodi:role="line">ecacb6b4c9fd</tspan></text> 3.966 + </g> 3.967 + <g 3.968 + id="g5123" 3.969 + transform="matrix(0.423343,0,0,0.423343,198.4901,263.0729)"> 3.970 + <rect 3.971 + y="363.07654" 3.972 + x="187.5" 3.973 + height="75" 3.974 + width="213.85715" 3.975 + id="rect5125" 3.976 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 3.977 + <text 3.978 + id="text5127" 3.979 + y="400.86459" 3.980 + x="196.02321" 3.981 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.982 + xml:space="preserve"><tspan 3.983 + style="fill:black;fill-opacity:1;font-family:Courier" 3.984 + y="400.86459" 3.985 + x="196.02321" 3.986 + id="tspan5129" 3.987 + sodipodi:role="line">...</tspan></text> 3.988 + <text 3.989 + id="text5131" 3.990 + y="380.17593" 3.991 + x="196.71785" 3.992 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.993 + xml:space="preserve"><tspan 3.994 + y="380.17593" 3.995 + x="196.71785" 3.996 + sodipodi:role="line" 3.997 + id="tspan5133" 3.998 + style="fill:black;fill-opacity:1">Revision data (delta or snapshot)</tspan></text> 3.999 + </g> 3.1000 + <path 3.1001 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;display:inline" 3.1002 + d="M 299.69935,362.24027 L 299.69931,393.49494" 3.1003 + id="path5203" 3.1004 + inkscape:connector-type="polyline" 3.1005 + inkscape:connection-start="#g3457" 3.1006 + inkscape:connection-end="#g5111" /> 3.1007 + <path 3.1008 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1" 3.1009 + d="M 182.35357,362.22647 L 241.2842,503.07224" 3.1010 + id="path5271" 3.1011 + inkscape:connector-type="polyline" 3.1012 + inkscape:connection-start="#g3399" 3.1013 + inkscape:connection-end="#g3539" /> 3.1014 + <path 3.1015 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;display:inline" 3.1016 + d="M 287.63109,471.81747 L 250.9438,503.07223" 3.1017 + id="path5285" 3.1018 + inkscape:connector-type="polyline" 3.1019 + inkscape:connection-start="#g5087" 3.1020 + inkscape:connection-end="#g3539" /> 3.1021 + <path 3.1022 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" 3.1023 + d="M 290.80419,250.07192 L 297.80065,283.90394" 3.1024 + id="path5077" 3.1025 + inkscape:connector-type="polyline" 3.1026 + inkscape:connection-start="#g3215" 3.1027 + inkscape:connection-end="#g3481" /> 3.1028 + <path 3.1029 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" 3.1030 + d="M 229.63373,250.07601 L 190.07484,283.90394" 3.1031 + id="path5075" 3.1032 + inkscape:connector-type="polyline" 3.1033 + inkscape:connection-end="#g3423" /> 3.1034 + <text 3.1035 + xml:space="preserve" 3.1036 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1037 + x="131.5625" 3.1038 + y="100.79968" 3.1039 + id="text5897"><tspan 3.1040 + sodipodi:role="line" 3.1041 + id="tspan5899" 3.1042 + x="131.5625" 3.1043 + y="100.79968" 3.1044 + style="text-align:end;text-anchor:end">Head revision</tspan><tspan 3.1045 + sodipodi:role="line" 3.1046 + x="131.5625" 3.1047 + y="115.79968" 3.1048 + id="tspan5901" 3.1049 + style="text-align:end;text-anchor:end">(no children)</tspan></text> 3.1050 + <text 3.1051 + xml:space="preserve" 3.1052 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1053 + x="131.5625" 3.1054 + y="207.04968" 3.1055 + id="text5903"><tspan 3.1056 + sodipodi:role="line" 3.1057 + id="tspan5905" 3.1058 + x="131.5625" 3.1059 + y="207.04968" 3.1060 + style="text-align:end;text-anchor:end">Merge revision</tspan><tspan 3.1061 + sodipodi:role="line" 3.1062 + x="131.5625" 3.1063 + y="222.04968" 3.1064 + id="tspan5907" 3.1065 + style="text-align:end;text-anchor:end">(two parents)</tspan></text> 3.1066 + <text 3.1067 + xml:space="preserve" 3.1068 + style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1069 + x="131.92578" 3.1070 + y="451.58093" 3.1071 + id="text5909"><tspan 3.1072 + sodipodi:role="line" 3.1073 + id="tspan5911" 3.1074 + x="131.92578" 3.1075 + y="451.58093" 3.1076 + style="text-align:end;text-anchor:end">Branches</tspan><tspan 3.1077 + sodipodi:role="line" 3.1078 + x="131.92578" 3.1079 + y="466.58093" 3.1080 + id="tspan5913" 3.1081 + style="text-align:end;text-anchor:end">(two revisions,</tspan><tspan 3.1082 + sodipodi:role="line" 3.1083 + x="131.92578" 3.1084 + y="481.58093" 3.1085 + id="tspan5915" 3.1086 + style="text-align:end;text-anchor:end">same parent)</tspan></text> 3.1087 + <path 3.1088 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" 3.1089 + d="M 111.71875,433.61218 L 154.7268,368.52294" 3.1090 + id="path5917" 3.1091 + inkscape:connector-type="polyline" /> 3.1092 + <path 3.1093 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" 3.1094 + d="M 134.375,464.86218 L 277.86691,440.37816" 3.1095 + id="path5919" 3.1096 + inkscape:connector-type="polyline" 3.1097 + inkscape:connection-end="#g5123" /> 3.1098 + <text 3.1099 + xml:space="preserve" 3.1100 + style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1101 + x="131.5625" 3.1102 + y="536.73718" 3.1103 + id="text5927"><tspan 3.1104 + sodipodi:role="line" 3.1105 + id="tspan5929" 3.1106 + x="131.5625" 3.1107 + y="536.73718">First revision</tspan><tspan 3.1108 + sodipodi:role="line" 3.1109 + x="131.5625" 3.1110 + y="551.73718" 3.1111 + id="tspan5931">(both parents null)</tspan></text> 3.1112 + <rect 3.1113 + style="fill:#bbb4ff;fill-opacity:1;stroke:none;stroke-width:0.95291203;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 3.1114 + id="rect2830" 3.1115 + width="43.664806" 3.1116 + height="20.562374" 3.1117 + x="217.0432" 3.1118 + y="232.10075" /> 3.1119 + <text 3.1120 + xml:space="preserve" 3.1121 + style="font-size:5.0801158px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1122 + x="220.94551" 3.1123 + y="239.33966" 3.1124 + id="text2832"><tspan 3.1125 + id="tspan2836" 3.1126 + sodipodi:role="line" 3.1127 + x="220.94551" 3.1128 + y="239.33966">First parent</tspan></text> 3.1129 + <text 3.1130 + xml:space="preserve" 3.1131 + style="font-size:5.0801158px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman" 3.1132 + x="220.65144" 3.1133 + y="248.09805" 3.1134 + id="text2879"><tspan 3.1135 + sodipodi:role="line" 3.1136 + id="tspan2881" 3.1137 + x="220.65144" 3.1138 + y="248.09805" 3.1139 + style="font-family:Courier">5b80c922ebdd</tspan></text> 3.1140 + <path 3.1141 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" 3.1142 + d="M 139.84375,107.83093 L 210.15625,107.83093" 3.1143 + id="path5965" 3.1144 + inkscape:connector-type="polyline" /> 3.1145 + <path 3.1146 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" 3.1147 + d="M 137.5,213.29968 L 210.49036,214.09055" 3.1148 + id="path5967" 3.1149 + inkscape:connector-type="polyline" /> 3.1150 + <path 3.1151 + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" 3.1152 + d="M 136.34375,544.54968 L 206.65625,544.54968" 3.1153 + id="path5969" 3.1154 + inkscape:connector-type="polyline" 3.1155 + inkscape:transform-center-y="-171.09375" 3.1156 + inkscape:transform-center-x="53.90625" /> 3.1157 + </g> 3.1158 +</svg>