hgbook
changeset 108:e0b961975c5e
First bit of concepts chapter.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Thu Nov 09 10:11:31 2006 -0800 (2006-11-09) |
parents | a0d7e11db169 |
children | 1b67dc96f27a |
files | en/00book.tex en/Makefile en/concepts.tex en/filelog.svg |
line diff
1.1 --- a/en/00book.tex Tue Oct 24 11:25:56 2006 -0700 1.2 +++ b/en/00book.tex Thu Nov 09 10:11:31 2006 -0800 1.3 @@ -37,9 +37,9 @@ 1.4 1.5 \include{preface} 1.6 \include{intro} 1.7 -%\include{concepts} 1.8 \include{tour-basic} 1.9 \include{tour-merge} 1.10 +\include{concepts} 1.11 \include{daily} 1.12 \include{hook} 1.13 \include{template}
2.1 --- a/en/Makefile Tue Oct 24 11:25:56 2006 -0700 2.2 +++ b/en/Makefile Thu Nov 09 10:11:31 2006 -0800 2.3 @@ -21,6 +21,7 @@ 2.4 tour-merge.tex 2.5 2.6 image-sources := \ 2.7 + filelog.svg \ 2.8 kdiff3.png \ 2.9 mq-stack.svg \ 2.10 tour-history.svg \
3.1 --- a/en/concepts.tex Tue Oct 24 11:25:56 2006 -0700 3.2 +++ b/en/concepts.tex Thu Nov 09 10:11:31 2006 -0800 3.3 @@ -1,131 +1,38 @@ 3.4 -\chapter{Basic Concepts} 3.5 +\chapter{Behind the scenes} 3.6 \label{chap:concepts} 3.7 3.8 -This chapter introduces some of the basic concepts behind distributed 3.9 -version control systems such as Mercurial. 3.10 +Unlike many revision control systems, the concepts upon which 3.11 +Mercurial is built are simple enough that it's easy to understand how 3.12 +the software really works. Knowing this certainly isn't necessary, 3.13 +but I find it useful to have a ``mental model'' of what's going on. 3.14 3.15 -\section{Repository} 3.16 -\label{sec:concepts:repo} 3.17 -The repository is a directory where Mercurial stores the history for the 3.18 -files under revision control. 3.19 +\section{Tracking the history of a single file} 3.20 3.21 -\subsection{Where?} 3.22 -% where is this repository you speak of? 3.23 -XXX 3.24 +When Mercurial tracks modifications to a file, it stores the history 3.25 +of that file in a metadata object called a \emph{filelog}. Each entry 3.26 +in the filelog contains enough information to reconstruct one revision 3.27 +of the file that is being tracked. Filelogs are stored as files in 3.28 +the \sdirname{.hg/data} directory. A filelog contains two kinds of 3.29 +information: revision data, and an index to help Mercurial to find a 3.30 +revision efficiently. 3.31 3.32 -\subsection{How?} 3.33 -% How are the changes stored? 3.34 -XXX 3.35 - 3.36 -\subsection{Structure} 3.37 -\label{sec:concepts:structure} 3.38 -% What's the structure of the repository? 3.39 -A typical Mercurial repository is a directory which contains a checked out 3.40 -working copy (see section~\ref{sec:concepts:workingcopy}) as well as 3.41 -\sdirname{.hg} directory. Figure~\ref{ex:concepts:dirlist} shows the 3.42 -contents of a freshly created repository. This repository does not contain 3.43 -any revisions. Let's take a look at a repository that has history for 3.44 -several files. 3.45 -Figure~\ref{ex:concepts:dirlist2} shows the contents of a repository keeping 3.46 -history on two files. We see the checked out copies of the files 3.47 -\filename{foo} and \filename{bar}, as well as the files containing their 3.48 -histories \filename{foo.i} and \filename{bar.i}, respectively. Additionally, 3.49 -we see the \filename{changelog.i} and \filename{00manifest.i} files. These 3.50 -contain the repository-wide revision data, such as the commit message, and 3.51 -the list of files in the repository during the commit. 3.52 +For small files without much history, the revision data and index are 3.53 +combined in a single file (with a ``\texttt{.i}'' suffix). A file 3.54 +that is large, or has a lot of history, has its filelog stored as 3.55 +separate data (``\texttt{.d}'' suffix) and index (``\texttt{.i}'' 3.56 +suffix) files. The correspondence between a file in the working 3.57 +directory and the filelog that tracks its history in the repository is 3.58 +illustrated in figure~\ref{fig:concepts:filelog}. 3.59 3.60 \begin{figure}[ht] 3.61 - \interaction{concepts.dirlist} 3.62 - \caption{Contents of a freshly created repository} 3.63 - \label{ex:concepts:dirlist} 3.64 + \centering 3.65 + \grafix{filelog} 3.66 + \caption{Relationships between files in working directory and 3.67 + filelogs in repository} 3.68 + \label{fig:concepts:filelog} 3.69 \end{figure} 3.70 3.71 -\begin{figure}[ht] 3.72 - \interaction{concepts.dirlist2} 3.73 - \caption{Contents of a repository tracking two files} 3.74 - \label{ex:concepts:dirlist2} 3.75 -\end{figure} 3.76 - 3.77 -\subsection{hgrc} 3.78 -% .hg/hgrc 3.79 -XXX 3.80 - 3.81 -\subsection{Creating a Repository} 3.82 -% hg init 3.83 -Creating a repository is quick and painless. One uses the \hgcmd{init} 3.84 -command as figure~\ref{ex:concepts:hginit} demonstrates. The one argument 3.85 -passed to the \hgcmd{init} command is the name of the repository. The name 3.86 -can be any string usable as a directory name. 3.87 - 3.88 -\begin{caution} 3.89 -If you do not specify a name of the repository, the current working 3.90 -directory will be used instead. 3.91 -\end{caution} 3.92 - 3.93 -\begin{figure}[ht] 3.94 - \interaction{concepts.hginit} 3.95 - \caption{Creating a new repository} 3.96 - \label{ex:concepts:hginit} 3.97 -\end{figure} 3.98 - 3.99 -\subsection{Remote Repositories} 3.100 -\label{sec:concepts:remoterepo} 3.101 -In addition to repositories stored on the local file system, Mercurial 3.102 -supports so called \emph{remote repositories}. These remote repositories 3.103 -can be accessed via several different methods. See 3.104 -section~\ref{sec:XXX:remotesetup} for instructions how to set up remote 3.105 -repositories. 3.106 -% XXX: reference the proper section! 3.107 - 3.108 -\subsubsection{SSH} 3.109 -\label{sec:concepts:remoterepo:ssh} 3.110 -Mercurial can use \command{ssh} to send and receive changes. The remote 3.111 -repository is identified by an URL. The basic format for the URL is: 3.112 - 3.113 -\begin{verbatim} 3.114 -ssh://[user@]host/path 3.115 -\end{verbatim} 3.116 - 3.117 -Where \cmdargs{user} is optional, and the \cmdargs{path} is path to the 3.118 -repository --- either an absolute or relative to the user's home directory 3.119 ---- on the remote host with hostname: \cmdargs{host}. 3.120 - 3.121 -\begin{note} 3.122 -If the path for the remote repository is absolute there will be two 3.123 -consecutive slashes. E.g., if the remote path is \dirname{/repos/hgbook}, 3.124 -the URL would look something like the following: 3.125 - 3.126 -\begin{verbatim} 3.127 -ssh://someuser@remotebox//repos/hgbook 3.128 -\end{verbatim} 3.129 - 3.130 -Relative paths have only one slash and are relative to the user's home 3.131 -directory. 3.132 -\end{note} 3.133 - 3.134 -\subsubsection{HTTP \& HTTPS} 3.135 -\label{sec:concepts:remoterepo:http} 3.136 -The other protocol supported is HTTP as well as HTTPS. The repository URL 3.137 -is very much like that of the \command{ssh}. 3.138 - 3.139 -\begin{verbatim} 3.140 -http://[user@]remotebox/path 3.141 -\end{verbatim} 3.142 - 3.143 -Just as before, the username is optional. 3.144 -% XXX: is it optional for both push & pull or just for pull? 3.145 -This time however, the path is relative to the HTTP server root. 3.146 - 3.147 -\section{Working Copy} 3.148 -\label{sec:concepts:workingcopy} 3.149 -XXX 3.150 - 3.151 -\section{Revisions} 3.152 -\label{sec:concepts:revs} 3.153 -XXX 3.154 - 3.155 %%% Local Variables: 3.156 %%% mode: latex 3.157 %%% TeX-master: "00book" 3.158 %%% End: 3.159 -
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/en/filelog.svg Thu Nov 09 10:11:31 2006 -0800 4.3 @@ -0,0 +1,371 @@ 4.4 +<?xml version="1.0" encoding="UTF-8" standalone="no"?> 4.5 +<!-- Created with Inkscape (http://www.inkscape.org/) --> 4.6 +<svg 4.7 + xmlns:dc="http://purl.org/dc/elements/1.1/" 4.8 + xmlns:cc="http://web.resource.org/cc/" 4.9 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 4.10 + xmlns:svg="http://www.w3.org/2000/svg" 4.11 + xmlns="http://www.w3.org/2000/svg" 4.12 + xmlns:xlink="http://www.w3.org/1999/xlink" 4.13 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 4.14 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 4.15 + width="744.09448819" 4.16 + height="1052.3622047" 4.17 + id="svg2" 4.18 + sodipodi:version="0.32" 4.19 + inkscape:version="0.44.1" 4.20 + sodipodi:docname="filelog.svg"> 4.21 + <defs 4.22 + id="defs4"> 4.23 + <marker 4.24 + inkscape:stockid="Arrow1Mend" 4.25 + orient="auto" 4.26 + refY="0.0" 4.27 + refX="0.0" 4.28 + id="Arrow1Mend" 4.29 + style="overflow:visible;"> 4.30 + <path 4.31 + id="path3128" 4.32 + 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 " 4.33 + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" 4.34 + transform="scale(0.4) rotate(180) translate(10,0)" /> 4.35 + </marker> 4.36 + <linearGradient 4.37 + id="linearGradient2887"> 4.38 + <stop 4.39 + style="stop-color:#91cfcf;stop-opacity:1;" 4.40 + offset="0" 4.41 + id="stop2889" /> 4.42 + <stop 4.43 + style="stop-color:aqua;stop-opacity:0;" 4.44 + offset="1" 4.45 + id="stop2891" /> 4.46 + </linearGradient> 4.47 + <linearGradient 4.48 + id="linearGradient2795"> 4.49 + <stop 4.50 + style="stop-color:#ccc;stop-opacity:1;" 4.51 + offset="0" 4.52 + id="stop2797" /> 4.53 + <stop 4.54 + style="stop-color:#ccc;stop-opacity:0;" 4.55 + offset="1" 4.56 + id="stop2799" /> 4.57 + </linearGradient> 4.58 + <linearGradient 4.59 + inkscape:collect="always" 4.60 + xlink:href="#linearGradient2795" 4.61 + id="linearGradient3170" 4.62 + gradientUnits="userSpaceOnUse" 4.63 + gradientTransform="translate(121.2183,94.95434)" 4.64 + x1="81.322357" 4.65 + y1="404.34424" 4.66 + x2="201.52036" 4.67 + y2="373.03967" /> 4.68 + <linearGradient 4.69 + inkscape:collect="always" 4.70 + xlink:href="#linearGradient2887" 4.71 + id="linearGradient3172" 4.72 + gradientUnits="userSpaceOnUse" 4.73 + gradientTransform="translate(0,12)" 4.74 + x1="62.634491" 4.75 + y1="503.3392" 4.76 + x2="248.49242" 4.77 + y2="462.94327" /> 4.78 + <linearGradient 4.79 + inkscape:collect="always" 4.80 + xlink:href="#linearGradient2795" 4.81 + id="linearGradient3174" 4.82 + gradientUnits="userSpaceOnUse" 4.83 + gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)" 4.84 + x1="81.322357" 4.85 + y1="404.34424" 4.86 + x2="201.52036" 4.87 + y2="373.03967" /> 4.88 + <linearGradient 4.89 + inkscape:collect="always" 4.90 + xlink:href="#linearGradient2887" 4.91 + id="linearGradient3176" 4.92 + gradientUnits="userSpaceOnUse" 4.93 + gradientTransform="translate(0,12)" 4.94 + x1="62.634491" 4.95 + y1="503.3392" 4.96 + x2="248.49242" 4.97 + y2="462.94327" /> 4.98 + <linearGradient 4.99 + inkscape:collect="always" 4.100 + xlink:href="#linearGradient2795" 4.101 + id="linearGradient3208" 4.102 + gradientUnits="userSpaceOnUse" 4.103 + gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)" 4.104 + x1="81.322357" 4.105 + y1="404.34424" 4.106 + x2="201.52036" 4.107 + y2="373.03967" /> 4.108 + <linearGradient 4.109 + inkscape:collect="always" 4.110 + xlink:href="#linearGradient2887" 4.111 + id="linearGradient3210" 4.112 + gradientUnits="userSpaceOnUse" 4.113 + gradientTransform="translate(0,12)" 4.114 + x1="62.634491" 4.115 + y1="503.3392" 4.116 + x2="248.49242" 4.117 + y2="462.94327" /> 4.118 + <linearGradient 4.119 + inkscape:collect="always" 4.120 + xlink:href="#linearGradient2795" 4.121 + id="linearGradient3212" 4.122 + gradientUnits="userSpaceOnUse" 4.123 + gradientTransform="translate(121.2183,94.95434)" 4.124 + x1="81.322357" 4.125 + y1="404.34424" 4.126 + x2="201.52036" 4.127 + y2="373.03967" /> 4.128 + <linearGradient 4.129 + inkscape:collect="always" 4.130 + xlink:href="#linearGradient2887" 4.131 + id="linearGradient3214" 4.132 + gradientUnits="userSpaceOnUse" 4.133 + gradientTransform="translate(0,12)" 4.134 + x1="62.634491" 4.135 + y1="503.3392" 4.136 + x2="248.49242" 4.137 + y2="462.94327" /> 4.138 + <linearGradient 4.139 + inkscape:collect="always" 4.140 + xlink:href="#linearGradient2795" 4.141 + id="linearGradient3256" 4.142 + gradientUnits="userSpaceOnUse" 4.143 + gradientTransform="translate(121.2183,94.95434)" 4.144 + x1="81.322357" 4.145 + y1="404.34424" 4.146 + x2="201.52036" 4.147 + y2="373.03967" /> 4.148 + <linearGradient 4.149 + inkscape:collect="always" 4.150 + xlink:href="#linearGradient2887" 4.151 + id="linearGradient3258" 4.152 + gradientUnits="userSpaceOnUse" 4.153 + gradientTransform="translate(0,12)" 4.154 + x1="62.634491" 4.155 + y1="503.3392" 4.156 + x2="248.49242" 4.157 + y2="462.94327" /> 4.158 + <linearGradient 4.159 + inkscape:collect="always" 4.160 + xlink:href="#linearGradient2795" 4.161 + id="linearGradient3260" 4.162 + gradientUnits="userSpaceOnUse" 4.163 + gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)" 4.164 + x1="81.322357" 4.165 + y1="404.34424" 4.166 + x2="201.52036" 4.167 + y2="373.03967" /> 4.168 + <linearGradient 4.169 + inkscape:collect="always" 4.170 + xlink:href="#linearGradient2887" 4.171 + id="linearGradient3262" 4.172 + gradientUnits="userSpaceOnUse" 4.173 + gradientTransform="translate(0,12)" 4.174 + x1="62.634491" 4.175 + y1="503.3392" 4.176 + x2="248.49242" 4.177 + y2="462.94327" /> 4.178 + </defs> 4.179 + <sodipodi:namedview 4.180 + id="base" 4.181 + pagecolor="#ffffff" 4.182 + bordercolor="#666666" 4.183 + borderopacity="1.0" 4.184 + gridtolerance="10000" 4.185 + guidetolerance="10" 4.186 + objecttolerance="10" 4.187 + inkscape:pageopacity="0.0" 4.188 + inkscape:pageshadow="2" 4.189 + inkscape:zoom="0.98994949" 4.190 + inkscape:cx="455.8122" 4.191 + inkscape:cy="520" 4.192 + inkscape:document-units="px" 4.193 + inkscape:current-layer="layer1" 4.194 + inkscape:window-width="906" 4.195 + inkscape:window-height="620" 4.196 + inkscape:window-x="5" 4.197 + inkscape:window-y="49" /> 4.198 + <metadata 4.199 + id="metadata7"> 4.200 + <rdf:RDF> 4.201 + <cc:Work 4.202 + rdf:about=""> 4.203 + <dc:format>image/svg+xml</dc:format> 4.204 + <dc:type 4.205 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 4.206 + </cc:Work> 4.207 + </rdf:RDF> 4.208 + </metadata> 4.209 + <g 4.210 + inkscape:label="Layer 1" 4.211 + inkscape:groupmode="layer" 4.212 + id="layer1"> 4.213 + <rect 4.214 + style="opacity:1;fill:#abadf8;fill-opacity:1;stroke:#595959;stroke-width:0.86781615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 4.215 + id="rect3180" 4.216 + width="234.48758" 4.217 + height="199.13225" 4.218 + x="322.67767" 4.219 + y="351.75531" /> 4.220 + <rect 4.221 + style="opacity:1;fill:#a2f69c;fill-opacity:1;stroke:#595959;stroke-width:0.86781615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 4.222 + id="rect3178" 4.223 + width="234.48756" 4.224 + height="199.13223" 4.225 + x="72.664886" 4.226 + y="351.75531" /> 4.227 + <g 4.228 + id="g3144" 4.229 + transform="translate(34,0.71578)"> 4.230 + <g 4.231 + id="g2940"> 4.232 + <rect 4.233 + style="fill:url(#linearGradient3260);fill-opacity:1;stroke:black;stroke-width:0.80860078;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 4.234 + id="rect2914" 4.235 + width="185.04932" 4.236 + height="39.587399" 4.237 + x="311.53635" 4.238 + y="395.04291" /> 4.239 + <text 4.240 + xml:space="preserve" 4.241 + 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" 4.242 + x="323.72824" 4.243 + y="416.7626" 4.244 + id="text2918"><tspan 4.245 + sodipodi:role="line" 4.246 + id="tspan2920" 4.247 + x="323.72824" 4.248 + y="416.7626" 4.249 + style="font-family:Courier">.hg/data/README.i</tspan></text> 4.250 + </g> 4.251 + <g 4.252 + transform="translate(3.79093e-5,-80.1853)" 4.253 + id="g2945"> 4.254 + <g 4.255 + id="g2955"> 4.256 + <rect 4.257 + y="475.44327" 4.258 + x="63.134491" 4.259 + height="39.395935" 4.260 + width="184.85793" 4.261 + id="rect2947" 4.262 + style="fill:url(#linearGradient3262);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 4.263 + <text 4.264 + id="text2949" 4.265 + y="498.35123" 4.266 + x="75.230644" 4.267 + 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" 4.268 + xml:space="preserve"><tspan 4.269 + style="font-family:Courier" 4.270 + y="498.35123" 4.271 + x="75.230644" 4.272 + id="tspan2951" 4.273 + sodipodi:role="line">README</tspan></text> 4.274 + </g> 4.275 + </g> 4.276 + <path 4.277 + inkscape:connection-end="#g2940" 4.278 + inkscape:connection-start="#g2945" 4.279 + inkscape:connector-type="polyline" 4.280 + id="path2960" 4.281 + d="M 248.49245,414.91131 L 311.13205,414.88123" 4.282 + 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" /> 4.283 + </g> 4.284 + <g 4.285 + id="g3156" 4.286 + transform="translate(34,0.71578)"> 4.287 + <g 4.288 + transform="translate(116,0)" 4.289 + id="g2831"> 4.290 + <rect 4.291 + style="fill:url(#linearGradient3256);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 4.292 + id="rect1906" 4.293 + width="184.85793" 4.294 + height="60.609138" 4.295 + x="195.96959" 4.296 + y="465.46356" /> 4.297 + <g 4.298 + id="g2803" 4.299 + transform="translate(-0.893671,1.833581)"> 4.300 + <text 4.301 + id="text1884" 4.302 + y="483.92801" 4.303 + x="208.95944" 4.304 + 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" 4.305 + xml:space="preserve"><tspan 4.306 + style="font-family:Courier" 4.307 + y="483.92801" 4.308 + x="208.95944" 4.309 + id="tspan1886" 4.310 + sodipodi:role="line">.hg/data/src/hello.c.d</tspan></text> 4.311 + <text 4.312 + id="text1888" 4.313 + y="507.79309" 4.314 + x="208.95944" 4.315 + 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" 4.316 + xml:space="preserve"><tspan 4.317 + style="font-family:Courier" 4.318 + y="507.79309" 4.319 + x="208.95944" 4.320 + id="tspan1890" 4.321 + sodipodi:role="line">.hg/data/src/hello.c.i</tspan></text> 4.322 + </g> 4.323 + </g> 4.324 + <g 4.325 + id="g2907"> 4.326 + <rect 4.327 + style="fill:url(#linearGradient3258);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 4.328 + id="rect2843" 4.329 + width="184.85793" 4.330 + height="39.395935" 4.331 + x="63.134491" 4.332 + y="475.44327" /> 4.333 + <text 4.334 + xml:space="preserve" 4.335 + 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" 4.336 + x="75.230644" 4.337 + y="498.35123" 4.338 + id="text2847"><tspan 4.339 + sodipodi:role="line" 4.340 + id="tspan2849" 4.341 + x="75.230644" 4.342 + y="498.35123" 4.343 + style="font-family:Courier">src/hello.c</tspan></text> 4.344 + </g> 4.345 + <path 4.346 + inkscape:connection-end="#g2831" 4.347 + inkscape:connection-start="#g2907" 4.348 + inkscape:connector-type="polyline" 4.349 + id="path2962" 4.350 + d="M 248.49242,495.37535 L 311.46959,495.53401" 4.351 + 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" /> 4.352 + </g> 4.353 + <text 4.354 + xml:space="preserve" 4.355 + 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" 4.356 + x="96.476799" 4.357 + y="373.96353" 4.358 + id="text3216"><tspan 4.359 + sodipodi:role="line" 4.360 + id="tspan3218" 4.361 + x="96.476799" 4.362 + y="373.96353">Working directory</tspan></text> 4.363 + <text 4.364 + xml:space="preserve" 4.365 + 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" 4.366 + x="344.92493" 4.367 + y="373.96353" 4.368 + id="text3228"><tspan 4.369 + sodipodi:role="line" 4.370 + id="tspan3230" 4.371 + x="344.92493" 4.372 + y="373.96353">Repository</tspan></text> 4.373 + </g> 4.374 +</svg>