Revision Control with Arch: Introduction to Arch

Whether you're moving up from CVS or just getting serious about a revision control system, here's a powerful tool that will keep records of changes and keep your projects under control.

Setting Up an Archive

Before you can begin working in a read-write
archive, you must identify yourself to tla:

$ tla my-id "J. Random Hacker <jrh@zork.net>"

Once you have entered your e-mail address, it is
time to create an archive for your projects. Arch
lets you make many archives, but you can keep as
many projects and branches as you like in the same
archive.

Archive names have two parts, separated by two
hyphens: the first is your e-mail address, and the
second is some identifier. Many people like to use
the four-digit year as the identifier and roll over
to a new archive each year:

The my-default-archive command makes certain
operations on the local archive easier to type.

Setting Up a Project Branch

Arch encourages developers to fork and merge
projects using branches. Branches are the primary
mechanism for moving code from one archive to
another, even over a network. You can use a branch
for a complete code fork to pursue an entirely new
line of development, or you can use a branch
to cache a copy of a project on your laptop so
that you can work for a while in an environment
that lacks network access.

Published branches are also the primary development
communications mechanism for developers who use
Arch. Instead of mailing large changeset tarballs
or patch files around, a contributor most
likely would set up a branch to make local changes and
then invite the upstream developers to merge those
changes back into the main project. This is where
the decentralized and democratic nature of Arch's
design shines. Any developer can join the
development effort without needing special privilege
in the core team's archive.

Before you can branch the lnx-bbc project, you have
to set up a space for the project in your archive.
The format for a project identifier is similar to
that of the archive name: the category (or project
name), two dashes, the branch name, two dashes and
the version number. It is most likely Tom Lord's
experience as a LISP hacker that informed his
decision to use these dashes:

$ tla archive-setup lnx-bbc--robot-branch--0.0

This creates a category called lnx-bbc, a branch
called robot-branch and a version called 0.0. You
did not need to specify jrh@zork.net--2004/ in front
of the project name because that is your default
archive.

Tagging Off the Branch

Finally, it is time to tag off the branch from the
remote archive. This means the robot-branch
begins as a tag pointing to a particular revision
of a project in the lnx-bbc-devel@zork.net--gar
archive, and all local changes start from that
point:

The tla mv command renames a file in such a way
that Arch keeps track of the change. It is
important to use this command in place of the
standard mv. The tla add command prepares a new
file to be inserted into the archive, and tla rm
schedules removal of a file.

All of these changes can be checked in to
your local branch now:

$ tla commit

Your preferred text editor (as specified in the
$EDITOR environment variable) will be started up
with a template for your check-in log. Once you have
filled out the log entry, saving and exiting
finalizes the commit.

Now running tla abrowse shows that you have
two revisions of the robot branch in the archive,
base-0 and patch-1:

I had played around with arch (and arx) a while ago and also found it fairly confusing. I was reading this hoping that things have changed for the better, but it doesn't sound like it has.

Reason being that I've got two areas I do development on that can't talk to one another via a network, yet I'd like to keep their CVS repositories sync'd up. One option would be to copy the repositories over, but I didn't start out that way. I made two separate repositories and just grab snapshots from one and integrate it to the other using CVS tags to manage revisions.

This works ok, but seems a little clunky. If I'm reading it right, arch be a natural for such an environment, once I get past the initial learning curve.

Actually, "tla" stands for "true love always", not "tom lord's arch"
although the coincidence of acronym there is part of why the
name "tla" was chosen ("tla", as acronym, provides lots of
plausible deniability --- for example, it also stands for "three letter
acronym".)