Merge branch 'darcs' into master
[git-darcs-import.git] / src / features.tex
blob6438aa7e9e602c4f34489b46daa61cf203e75d30
1 \section{Features}
3 \paragraph{Record changes locally}
4 In darcs, the equivalent of a cvs ``commit'' is called record, because it
5 doesn't put the change into any remote or centralized repository. Changes
6 are always recorded locally, meaning no net access is required in order to
7 work on your project and record changes as you make them. Moreover, this
8 means that there is no need for a separate ``disconnected operation'' mode.
10 \paragraph{Interactive records}
11 You can choose to perform an interactive record, in which case darcs will
12 prompt you for each change you have made and ask if you wish to record it.
13 Of course, you can tell darcs to record all the changes in a given file, or
14 to skip all the changes in a given file, or go back to a previous change,
15 or whatever. There is also an experimental graphical interface, which
16 allows you to view and choose changes even more easily, and in whichever
17 order you like.
19 \paragraph{Unrecord local changes}
20 As a corollary to the ``local'' nature of the record operation, if a change
21 hasn't yet been published to the world---that is, if the local repository
22 isn't accessible by others---you can safely unrecord a change (even if it
23 wasn't the most recently recorded change) and then re-record it
24 differently, for example if you forgot to add a file, introduced a bug or
25 realized that what you recorded as a single change was really two separate
26 changes.
28 \paragraph{Interactive everything else}
29 Most darcs commands support an interactive interface. The ``revert''
30 command, for example, which undoes unrecorded changes has the same
31 interface as record, so you can easily revert just a single change. Pull,
32 push, send and apply all allow you to view and interactively select which
33 changes you wish to pull, push, send or apply.
35 \paragraph{Test suites}
36 Darcs has support for integrating a test suite with a repository. If you
37 choose to use this, you can define a test command (e.g.\ ``make check'') and
38 have darcs run that command on a clean copy of the project either prior to
39 recording a change or prior to applying changes---and to reject changes
40 that cause the test to fail.
42 \paragraph{Any old server}
43 Darcs does not require a specialized server in order to make a repository
44 available for read access. You can use http, ftp, or even just a plain old
45 ssh server to access your darcs repository.
47 \paragraph{You decide write permissions}
48 Darcs doesn't try to manage write access. That's your business. Supported
49 push methods include direct ssh access (if you're willing to \emph{give}
50 direct ssh access away), using sudo to allow users who already have shell
51 access to only apply changes to the repository, or verification of
52 gpg-signed changes sent by email against a list of allowed keys. In
53 addition, there is good support for submission of patches by email that
54 are not automatically applied, but can easily be applied with a shell escape
55 from a mail reader (this is how I deal with contributions to darcs).
57 \paragraph{Symmetric repositories}
58 Every darcs repository is created equal (well, with the exception of a
59 ``partial'' repository, which doesn't contain a full history\ldots), and every
60 working directory has an associated repository. As a result, there is a
61 symmetry between ``uploading'' and ``downloading'' changes---you can use
62 the same commands (push or pull) for either purpose.
64 \paragraph{CGI script}
65 Darcs has a CGI script that allows browsing of the repositories.
67 \paragraph{Portable}
68 Darcs runs on UNIX (or UNIX-like) systems (which includes Mac~OS~X) as well
69 as on Microsoft Windows.
71 \paragraph{File and directory moves}
72 Renames or moves of files and directories, of course are handled properly,
73 so when you rename a file or move it to a different directory, its history
74 is unbroken, and merges with repositories that don't have the file renamed
75 will work as expected.
77 \paragraph{Token replace}
78 You can use the ``darcs replace'' command to modify all occurrences of a
79 particular token (defined by a configurable set of characters that are
80 allowed in ``tokens'') in a file. This has the advantage that merges with
81 changes that introduce new copies of the old token will have the effect of
82 changing it to the new token---which comes in handy when changing a
83 variable or function name that is used throughout a project.
85 \paragraph{Configurable defaults}
86 You can easily configure the default flags passed to any command on either
87 a per-repository or a per-user basis or a combination thereof.