~jan0sch/darcs-book
~jan0sch/darcs-book/en/02-getting-started.md
~jan0sch/darcs-book/en/02-getting-started.md
title: Getting started prev: chapter01 next: chapter03 toclink: yes ---
I see that you are still here, cool! Before we can really get our hands dirty
let's get familiar with some of the terminology you will encounter when you are
using darcs
.
It's somewhat important to speak the same language when we are talking about a
topic like version control so we need to establish a common vocabulary first.
Don't worry, it won't be much and I'll be introducing new terms as we are going
along, but here are the basic terms you need to know. Some of these definitions
might suffer a bit from being mutually recursive so if you don't get it right
away, don't worry it'll all become a lot clearer once you start using darcs
.
Working Tree
This is the directory tree where our project files reside, all work is done here.
Repository
We already talked a bit about this but let's keep our most basic terms in one
place. A repository is a place where darcs
stores information about a
project's history. As our working tree changes through time we can record
patches that represent those changes and store them in our repository together
with additional information like, what changed, who did the changes and when.
Change
A change is a modification that we have done to our working tree. It can be
something like adding or removing a file, changing the content of a file,
moving a file from one place to another etc. To find out if something has
changed in our working tree, darcs
checks its contents against the state of
the repository.
Patch
A patch is how we represent changes. Whenever we want to remember changes we do this by recording a patch. A patch is made up out of one or more changes and takes a repository from one state to another.
Knowing this we can now formulate the statement:
The state of a repository is defined by a set of changes.
Whoa, hold on a second! That sounds pretty mathematical, and that's because it
is. But don't worry, the ideas we are dealing with here can be expressed in
simple ways. In mathematics we have the notion of a set. Something like
{1,2,3}
denotes a set containing those three numbers, 1
, 2
and 3
. When
we are talking about sets the order of their elements do not matter. So we can
think of {1,2,3}
and {3,1,2}
as being different denotations of the same set.
In darcs
the order of the changes do not matter, when you have the same set of
changes as someone else you will both arrive at the same repository state, it
doesn't matter in which order you acquired them.
darcs
stores changes as a sequence of patches. Let's look at a simple example.
Let A
be a change that adds a file foo
to our project and let B
be a
change that adds a file bar
to our project. These two changes are independent
of each other, meaning each of them can exist without the other, so we can pull
them into our repository in any order. So adding A
and then B
to our
repository gets us to the same place as adding B
and then A
. Maybe you
remember this from school where you have learn that 1 + 2
is the same thing as
2 + 1
. darcs
applies this concept to patches and it's called commutation
and it is vital to the way darcs
works. In our example we say that "A
and
B
commute" which basically means that the patch sequence AB
(first apply A
than B
) gets us to the same place as the sequence BA
.
darcs
If you are running a Unix or a Unix-like operating system. You should be able to
install darcs
via your package manager. Since darcs
is written in Haskell,
you can also install it using stack or
cabal by doing one of the
following.
$ stack install darcs
or
$ cabal install darcs
I would only recommend this when your package manager does not offer a recent
version of darcs
or if it is not available.
Please consult your operating system or package manager manual to find out how
to install either darcs
, stack
and/or cabal
.
Once you have darcs
installed you can use darcs --version
to find out what
version you are currently using.
darcs
command line interfacedarcs
is used via a command line interface, that means you are interacting
with it by issuing commands on the shell. If you already have used other version
control systems where you mostly interact with them using fancy graphical user
interfaces this might worry you a bit, but don't be afraid. darcs
has a very
friendly user interface that leaves little room for unpleasant surprises. One
major feature is that most of the commands offer an interactive mode, and most
of the time it's even the commands default to do things interactively. Let me
give you an example.
Let's say I want to rollback
(it's not important to understand what that means
exactly, we'll get to that later) a change, to do that I would simply issue the
darcs rollback
command and darcs
would present me with a prompt similar to
this:
$ darcs rollback
patch eec36aaa61a4fad924657cd86624ba162991860d
Author: raichoo@example.com
Date: Mon Jun 18 12:32:34 CEST 2018
* fish: add move color to darcs prompt
Shall I rollback this patch? (1/253) [ynW...], or ? for more options:
I can answer with y
for "yes" and n
for "no" and darcs
will proceed to the
next patch. If I want to know what options are available to me I can simply hit
?
and in the case of rollback
I will be presented with the following set of
options.
How to use rollback:
y: rollback this patch
n: don't rollback it
w: wait and decide later, defaulting to no
s: don't rollback the rest of the changes to this file
f: rollback the rest of the changes to this file
v: view this patch in full
p: view this patch in full with pager
l: list all selected patches
x: view a summary of this patch
d: rollback selected patches, skipping all the remaining patches
a: rollback all the remaining patches
q: cancel rollback
j: skip to next patch
k: back up to previous patch
g: start over from the first patch
?: show this help
<Space>: accept the current default (which is capitalized)
darcs
also comes with a built-in help system. So if you want to know what
rollback
does you can simply issue darcs help rollback
or darcs rollback
--help
and there you go, you get the manual for the rollback
command.
If you just want to have a list of all available commands with a
short description of their functionality darcs help
is your friend.
Great! Everything you need, right at your fingertips! You don't need to reach for a reference or deep dive into the documentation to get the job done.