Darcs is a cross-platform version control system. It's similarly decentralized as git, mercurial or subversion but with a very different management approach. It focuses on changes rather than trees/snapshots. Which allows it to provide a freer way of working, and a much simpler CLI and a highly interactive user interface. It can work in an offline mode, provides local preparations, easy (non-)branching and merging, email patch sending, parallel development and builtin cherry-pickying from changesets.
Homepage
Download
Recent Releases
2.18.103 Apr 2024 13:07
minor feature:
* Supports GHC 9.8 and the most recent version of other dependencies
at the time of release, with the exception of the tls 2.0 package,
which has been held back because of problems connecting to hub.darcs.net
(see https://bugs.darcs.net/issue2715).
* Substantial rewrite of the 'darcs test' command.
The most important user visible change is that a test script can now
return an exit code of 125 to reflect an untestable/skipped state
(as with with "git bisect run").
This in turn means that a group of patches can be found to be responsible
for a failure rather than just a single one. By default, Darcs will
try to minimise such a group by reordering patches to remove irrelevant
ones from the initial group found from the patch ordering in the
repository. This behaviour can be disabled with --no-shrink-failure.
* Remove support for downloading via curl
This is no longer particularly useful as we now use modern, maintained
Haskell libraries for native HTTP downloading, and substantially simplifies
this area of the code.
* Patch index: Significant performance improvement
The patch index is used in commands like annotate and log. A couple of
performance improvements were made that should speed up using the patch
index.
* Progress reporting
Progress reports are now provided during more long-running operations,
including updating the "index" (a cache that speeds up detecting
changes in the working directory), and during merge operations.
They also behave better on Windows and when outputting long lines.
* Other changes/fixes:
* Use hardlinks more often to share files between repositories/caches.
* Support --leave-test-dir for all commands that support --test
* Avoid extraneous "repo:." entries in _darcs/prefs/sources issue2672
* Add 'darcs clean' command as an alias for 'darcs revert -l'
* 'darcs rebase unsuspend': add more patch editing options
*
2.10.020 Apr 2015 21:25
minor feature:
New features:
Darcs rebase: enable deep amending of history.
Darcs pull --reorder: keep local-only patches on top of mainstream patches.
Darcs dist --zip: generate a zip archive from a repository.
Patch bundle contexts are minimized by default.
Enables bundles to be applied to more repositories.
Darcs convert export/import for conversion.
To/from VCSes supporting the fast-export protocol.
Darcs test --backoff: exponential backoff test strategy,
Faster than bisect on big repositories,
Work normally on sshfs-mounted repositories.
Automatic detection of file/directory moves, and of token replaces.
Patience diff algorithm by default.
Interactive mode for whatsnew.
"tag --ask-deps" to create tags that may not include some patches.
User Interface:
Add a last question after all patches have been selected to confirm
the whole selection.
Command names:
clone is the new name of get and put,
log is the new name of changes,
amend is the new name of amend-record,
Show output of log into a pager by default.
The output of log is more similar to git's:
show patch hash in UI,
put author and date on separate lines.
Enable to match on patch hash prefix with -h and --hash.
Darcs send no longer tries to send a mail by default.
When no patch name given, directly invoke text editor.
Use nano as default text editor instead of vi.
Keep log files for patch name and mail content in _darcs.
Optimize and convert are now supercommands.
Improve darcs help environment and darcs help markdown.
Warn about duplicate tags when creating a new one.
Allow darcs mv into known, but deleted in working, file
Improve --not-in-remote, allowing multiple repos and use default.