/usr/share/doc/monotone/html/Storage-and-workflow.html is in monotone-doc 1.1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
<head>
<title>monotone documentation: Storage and workflow</title>
<meta name="description" content="monotone documentation: Storage and workflow">
<meta name="keywords" content="monotone documentation: Storage and workflow">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="General-Index.html#General-Index" rel="index" title="General Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Concepts.html#Concepts" rel="up" title="Concepts">
<link href="Forks-and-merges.html#Forks-and-merges" rel="next" title="Forks and merges">
<link href="Certificates.html#Certificates" rel="prev" title="Certificates">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space: nowrap}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: serif; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="texinfo.css">
</head>
<body lang="en">
<a name="Storage-and-workflow"></a>
<div class="header">
<p>
Next: <a href="Forks-and-merges.html#Forks-and-merges" accesskey="n" rel="next">Forks and merges</a>, Previous: <a href="Certificates.html#Certificates" accesskey="p" rel="prev">Certificates</a>, Up: <a href="Concepts.html#Concepts" accesskey="u" rel="up">Concepts</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="General-Index.html#General-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Storage-and-workflow-1"></a>
<h3 class="section">1.5 Storage and workflow</h3>
<p>Monotone moves information in and out of four different types of
storage:
</p>
<ul>
<li> a <i>keystore</i> in your home directory
</li><li> a <i>workspace</i> in the local file system
</li><li> a <i>local database</i> in the local file system
</li><li> a <i>remote database</i> elsewhere on the internet
</li></ul>
<p>The <em>keystore</em> is a directory <samp>.monotone/keys</samp> in your home directory
which contains copies of all your private keys. Each key is stored in a file
whose name is the key identifier with some characters converted to underscores.
When you use a key to sign a cert, the public half of that key is copied into
your local database along with the cert.
</p>
<p>All information passes <em>through</em> your local database, en route to
some other destination. For example, when changes are made in a
workspace, you may save those changes to your database, and later
you may synchronize your database with someone else’s. Monotone will
not move information directly between a workspace and a remote
database, or between workspaces. Your local database is always
the “switching point” for communication.
</p>
<img src="figures/general-workflow.png" alt="figures/general-workflow">
<p>A <em>workspace</em> is a tree of files in your file system, arranged
according to the list of file paths and IDs in a particular
manifest. A special directory called <samp>_MTN</samp> exists in the root of
any workspace. Monotone keeps some special files in the <samp>_MTN</samp>
directory, in order to track changes you make to your workspace. If
you ever want to know if a directory is a monotone workspace, just
look for this <samp>_MTN</samp> directory.
</p>
<p>Aside from the special <samp>_MTN</samp> directory, a workspace is just a
normal tree of files. You can directly edit the files in a workspace
using a plain text editor or other program; monotone will
automatically notice when you make this kind of change, and include
them in the next commit.
</p>
<a name="g_t_005fMTN_002frevision"></a><p>If you add files, remove files, or move files
within your workspace, you must tell monotone explicitly what you are
doing, as these actions cannot be deduced. Monotone stores these
changes in <samp>_MTN/revision</samp>; they will be part of the next commit.
</p>
<p>If you do not yet have a workspace, you can <em>check out</em> a
workspace from a database, or construct one from scratch and
<em>add</em> it into a database. As you work, you will occasionally
<em>commit</em> changes you have made in a workspace to a database,
and <em>update</em> a workspace to receive changes that have arrived
in a database. Committing and updating take place purely between a
database and a workspace; the network is not involved.
</p>
<img src="figures/local-workflow.png" alt="figures/local-workflow">
<p>A <em>database</em> is a single, regular file. You can copy or back it up
using standard methods. Typically you keep a database in your home
directory. Databases are portable between different machine types. You
can have multiple databases and divide your work between them, or keep
everything in a single database if you prefer. You can dump portions of
your database out as text, and read them back into other databases, or
send them to your friends. Underneath, databases are accessed using a
standard, robust data manager, which makes using even very large
databases efficient. In dire emergencies, you can directly examine and
manipulate a database using a simple SQL interface.
</p>
<p>A database contains many files, manifests, revisions, and
certificates, some of which are not immediately of interest, some of
which may be unwanted or even false. It is a collection of information
received from network servers, workspaces, and other
databases. You can inspect and modify your databases without affecting
your workspaces, and vice-versa.
</p>
<p>Monotone knows how to exchange information in your database with other
remote databases, using an interactive protocol called <em>netsync</em>.
It supports three modes of exchange: pushing, pulling, and
synchronizing. A <em>pull</em> operation copies data from a remote
database to your local database. A <em>push</em> operation copies data
from your local database to a remote database. A <em>sync</em> operation
copies data both directions. In each case, only the data missing from
the destination is copied. The netsync protocol calculates the data to
send “on the fly” by exchanging partial hash values of each
database.
</p>
<img src="figures/network-workflow.png" alt="figures/network-workflow">
<p>In general, work flow with monotone involves 3 distinct stages:
</p>
<ul>
<li> When you <i>commit</i> changes from your workspace to your database,
your database stores the changes but does not communicate with the
network. Your commits happen immediately, without consulting any other
party, and do not require network connectivity.
</li><li> When you are ready to <i>exchange</i> work with someone else, you can
push, pull, or sync with other databases on the network. When you talk
to other servers on the network, your database may change, but your
workspace will not. In fact, you do not need a workspace at all
when exchanging work.
</li><li> When you <i>update</i> your workspace, some (but not all) of the
changes which your database received from the network are applied to
your workspace. The network is not consulted during updates.
</li></ul>
<p>The last stage of workflow is worth clarifying: monotone does
<em>not</em> blindly apply all changes it receives from a remote
database to your workspace. Doing so would be very dangerous,
because remote databases are not always trustworthy systems. Rather,
monotone evaluates the certificates it has received along with the
changes, and decides which particular changes are safe and desirable
to apply to your workspace.
</p>
<p>You can always adjust the criteria monotone uses to judge the
trustworthiness and desirability of changes in your database. But keep
in mind that it always uses <em>some</em> criteria; receiving changes
from a remote server is a <em>different</em> activity than applying
changes to a workspace. Sometimes you may receive changes which
monotone judges to be untrusted or bad; such changes may stay in your
database but will <em>not</em> be applied to your workspace.
</p>
<p>Remote databases, in other words, are just untrusted “buckets” of
data, which you can trade with promiscuously. There is no trust
implied in communication.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Forks-and-merges.html#Forks-and-merges" accesskey="n" rel="next">Forks and merges</a>, Previous: <a href="Certificates.html#Certificates" accesskey="p" rel="prev">Certificates</a>, Up: <a href="Concepts.html#Concepts" accesskey="u" rel="up">Concepts</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="General-Index.html#General-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|