simple version control and collaboration
darcs makes version control simple. darcs hub provides easy repo hosting and collaboration for darcs users, and is 100% FOSS software and a community service you can contribute to ( issues, code, docs ). The philosophy here is Less But Better. Enjoy the simplicity of darcs hub!
2019-02-05 You may enjoy raichoo's Darcs Book! (src)
2018-11-05 Some discussion of darcs hub's future
Darcs is a version control system, broadly similar to Git, Mercurial and others, but with a simpler conceptual model that many people find less costly to learn and use. If you don't have a lot of time to spend learning your version control tool, darcs (and darcs hub) may be a good choice.
Darcs hub is the free darcs repository hosting site operated since 2012 by Simon Michael. It succeeds the older patch-tag.com and darcsden.com sites. It aims to:
provide a reliable, usable and evolving hosting and collaboration hub for darcs users
accelerate the development of darcs and its ecosystem, eg through an easier contribution process and increased visibility and dogfooding.
darcs hub runs on free software, so you can help make it better (or run your own server). That software is darcsden, an evolution of the software originally developed by Alex Suraci for darcsden.com.
Darcs hub is currently an all-volunteer effort by Simon Michael with help from the darcs team. However it's robust enough to host your project and to depend on for daily work. We currently host about 800 users and 1600 repos.
Currently, the stability is that of a usable beta; you can expect a serviceable UI, some functionality and performance limitations, decent reliability, and no data loss. Uptime and response time are checked every minute (see link in the footer).
As with all cloud-based services, it's wise to (a) keep your own backups of important data and (b) assume no guarantee of security or privacy. The site is hosted in the US. We do our best and all improvements are welcome.
The roadmap gives some more overview.
The VPS running hub.darcs.net and other sites is backed up nightly, between 0100 and 0300 GMT-8, by Linode's backup system. This keeps three backup images: the one from last night, the one from last Sunday, and the one from the previous Sunday. In other words, there is generally a backup that's one day old, and a backup that's 1-2 weeks old.
You should also keep your own backup(s) of your repositories. Basically, keep one or more copies of the repo elsewhere and up to date, using darcs get and darcs pull. (If you decide to automate this, don't forget to plan for the scenario where someone cracks your darcs hub account, logs in as you and quietly obliterates or modifies your repos.)
Use hub.darcs.net and provide bug reports and feedback
Investigate and clarify open issues
Test the setup process by setting up your own instance:
cabal build
or make
Contribute code and documentation patches. This is a fun project! It's a web app, so there's quick visual feedback. It's darcs-related, but easier to understand than darcs itself. Developers are online in #darcs, and useful changes will be quickly deployed to this site.
See also the project roadmap and planning board.
Contribute feature/reliability/performance/installability/api improvements to darcsden's dependencies, especially darcs, highlighting-kate, snap, and hsp.
Here are darcs hub blog posts, code changes and doc changes.
Also each of the repositories hosted here has its own changes page and feed. Here are a few interesting ones: darcs-reviewed, darcs-screened, darcs-wiki, darcsden, divine-mainline, dnplayer, globalscript, happstack, netwire
To fetch a copy of a repo from darcs hub, you don't need SSH; darcs can use HTTP. (See "How do I get a local copy of a repo?").
For "write" operations, like pushing patches to a repo on darcs hub, or obliterating patches from a repo, darcs requires a working SSH connection to darcs hub. The next section explains how to configure it.
(https://hub.darcs.net/#what-is-the-special-ssh-config-i-need-for-darcs-hub)
After (or while) creating an account:
Add your ssh public key in user settings -> pubkeys.
Ideally, you would now see this, indicating a successful SSH connection:
$ ssh hub.darcs.net
PTY allocation request failed on channel 0
shell request failed on channel
But more likely you will need some additional configuration of the SSH client on your local machine (cf darcs hub's ssh lib, issues, OpenSSH Legacy Options):
Add these lines to ~/.ssh/config
(or Windows equivalent):
Host hub.darcs.net
User <YOUR DARCS HUB USERNAME>
ControlMaster no
ForwardAgent no
ForwardX11 no
Ciphers +aes256-cbc
MACs +hmac-sha1
PubkeyAcceptedKeyTypes ssh-rsa
HostKeyAlgorithms ssh-rsa
Darcs hub requires RSA-based SSH public keys. If your usual key uses a newer algorithm like ED25519, generate a separate RSA-based key for connecting to darcs hub:
$ ssh-keygen -t rsa -f ~/.ssh/darcshubkey
and add this to the ssh config section above:
IdentityFile ~/.ssh/darcshubkey
This should be enough for SSH to connect. On first connection it will probably ask you to accept darcs hub's host key, eg:
The authenticity of host 'hub.darcs.net (173.255.254.113)' can't be established.
RSA key fingerprint is SHA256:3eBJH9dB8ez4tJuxmnEP7dNHRRTk2BAKPuUmcGaoAAM.
Are you sure you want to continue connecting (yes/no)?
The IP address and RSA key fingerprint should be as above. If so, you can answer yes
.
At this point SSH should be working, which again looks like this:
$ ssh hub.darcs.net
PTY allocation request failed on channel 0
shell request failed on channel 0
If not, add the -v
flag for troubleshooting:
$ ssh -v hub.darcs.net
and please report the problem / seek help in #darcs chat.
Via HTTP - works for any public repo and requires no authentication. Examples:
darcs get http://hub.darcs.net/OWNER/REPO
darcs get http://hub.darcs.net/simon/darcsden
Or via SSH - works for any public repo, and private repos that you own or are a member of. You'll need to create an account and configure SSH access. Examples:
darcs get [YOU@]hub.darcs.net:[OWNER/]REPO
darcs get hub.darcs.net:simon/darcsden
darcs get hub.darcs.net:myrepo
YOU is your darcs hub username; you can omit it if it's the same as your local username. OWNER/ can be omitted if the repo is yours.
Once you've got a local copy of a repo, you can merge any new changes from the upstream repo on darcs hub by running:
darcs pull
in your repo. It uses the original get address by default.
Pushing requires SSH access. If you got the repo via SSH, just
darcs push
If you got it via HTTP, you must configure ssh access and then push to the SSH address:
darcs push [YOU@]hub.darcs.net:[OWNER/]REPO [--set-default]
The --set-default
flag will make it remember this as the upstream address, so you can just type darcs push
in future.
You can push to someone else's repo if they've added you as a repo member in the repo settings. Otherwise, make a fork of their repo and push to that, so they can review and merge your changes themselves (on their repo branches page).
ssh [YOU@]hub.darcs.net init REPO DESCRIPTION
(or: log in -> my repos -> new repo)darcs push -a [YOU@]hub.darcs.net:REPO
In your repo's settings, you can add other darcs hub users as members. They will be able to push to your repo (but not delete changes from it, nor change its settings), and view it even if it's private.
ssh [YOU@]hub.darcs.net obliterate REPO
This runs darcs obliterate
in your repo on hub, prompting interactively for each change, most recently pushed first. You must be the repo owner, not just a member. Options like --dry-run
are not supported, so you'll sometimes have to figure out which later depending patches also need to be selected for obliteration. Another option is to obliterate locally, then delete the hub repo and re-publish it.
Obliterate rewrites your repo's history, so be mindful - if others have forked your repo and you obliterate, they'll need to do the same or the change will show up again in your branches page.
Click the file name in the page heading. Currently this forces the text/plain content type.
Add /atom
to the changes url. Eg http://hub.darcs.net/simon/darcsden/changes/atom.
After pushing some patches to your fork of someone's repo, those patches will automatically appear in the branches page of the parent repo. However, the parent repo's owner may not notice. Currently there are two ways to notify them:
track down their email or IRC name and ping them. Eg look for a nick in #darcs matching their hub username, or check the READMEs in their public repos.
if the parent repo has its darcs hub issue tracker enabled, you can open a new issue and attach your new patches as a bundle - this will send them a notification email
When a patch is pushed to an issue-tracker-enabled repo, and the patch name contains a reference to an open issue, that issue will be closed automatically, and the commit will be mentioned in an issue comment. Here is the syntax. Some valid examples:
some patch (closes #1)
resolves #52, blah blah
this fixes #100 I think
I think the following are not yet supported:
More questions ? Ask on #darcs and/or add to the FAQ.