Version Control

Matts on 2003-07-10T16:36:25

We're looking at new version control software at work. We're a bit sick of the branching/merging problems inherent in CVS development when you do a lot of work on branches. So I wondered if anyone here had opinions on the best options.

Here's the line up so far:

  • Arch - This looks really great, and possibly the best option. The C version is slightly immature, but it looks like it is tackling the problem the right way. Supports multi-way (star) merges and replays. Supports disconnected operation. Down side is no windows support (not even planned) and I'm not sure about viewcvs.cgi replacements.
  • Perforce - Well known in the perl community, and seems to be well respected. The downside is that the GUI tools are all for Windows only. But otherwise it has a fairly complete toolchain. Doesn't do disconnected operation as far as I can tell.
  • BitKeeper - Used by the Linux Kernel (so it has to be good, right?). Again it's commercial, so I'd rather know that it is good before trying it out on anything. Seems to basically be like Arch but for pay.
  • Subversion - Good because it's a CVS replacement (meant to be drop-in), but doesn't do anything to support multi-way merges as far as I can tell, and doesn't support disconnected operation. Having a full blown Apache 2.0 server seems overkill. Solves CVS's bugs, but doesn't seem to go that much further...
  • ClearCase - probably not a good idea.
Please give opinions.


Perforce Unix GUI

barries on 2003-07-10T16:46:43

Perforce was showing a multiplatform Qt UI at their users' conference a few months ago.

- Barrie

Comments

dlc on 2003-07-10T17:12:50

Having a full blown Apache 2.0 server seems overkill.

That's for the server. You only need theAPR libraries for the client.

Re:Comments

Matts on 2003-07-10T21:13:09

Right, but that probably means it won't ever do disconnected operation. At least not without Apache 2.0 on the client.

Re:Comments

rooneg on 2003-07-11T03:12:03

Actually, you don't even need Apache on the server either if you don't want to. You can run our custom tcp protocol tunneled over ssh (like many people do with cvs today), if you prefer to avoid apache.

As far as disconnected operation, that's a question for another day. People have talked about possibilities for it, but it's strictly a post 1.0 issue at this point.

I suspect it will be something along the lines of each user having a separate local repository, and supporting merging of changes between repositories. We aren't anywhere near that now, but I know people have plans for such things in the future.

Re:Comments

jmason on 2003-07-11T16:58:05

btw I think svn is pretty similar to p4 in its support for disconnected operation; it's pretty trivial to hack. Here's how I did it when I was using p4:

When you disconnect, you stop using "p4 edit" and start using a homebrew script like "o4 edit" instead, which just chmods the files +w.

When you reconnect, use a script which runs "p4 diff" to compare your entire checked-out tree with the checked-in versions of those files. (Optionally, it can compare them with the revision they were checked out from, instead of HEAD, but no biggie).

If they differ, mark them as opened for changes 'em with "p4 edit". This will *not* check the latest code from the repo; instead it just marks the *current* file contents as changed and possibly requiring checkin.

Finally, "p4 sync; p4 submit". Any changes are checked in; any marked-for-edit files that haven't really changed, will be skipped since there's no delta; any conflicts have to be dealt with using "p4 merge". Super-easy!

for deleting files, renames, etc., things get a little trickier, but those are infrequent occurences. The above served me very well for a long time using p4 on dialup, and from the opposite corner of the world.

Re:Comments

rooneg on 2003-07-11T17:19:27

actually, svn's support for disconnected operations is much cooler than the work arounds you can come up with for p4 ;-)

we keep pristine copies of all files you've checked out, so you can run add, remove, diff, status, and a number of other commands without ever having to touch the network. this also let's us send diffs to the server instead of the entire file as CVS does when you commit.

so in short, you can currently do just about anything other than finding old versions of files, reading log entries, committing changes, and a few other such things, all without a network connection.

(and yes, we know that keeping a pristine copy means we have disk space issues, and it's a post 1.0 enhancement to make that optional in some cases if you so desire.)

Re:Comments

Matts on 2003-07-12T00:09:37

Checking things in is the entire point for me.

Re:Comments

jmason on 2003-07-11T16:50:23

Actually, you don't need to run Apache at all; there's an svn-over-ssh mode too.

P4!

jmason on 2003-07-10T17:14:16

perforce rocks. It's got a great web GUI, and it can do the best automated merges of any SCM tool I've used. Most importantly, it's really well supported, great company, open mailing lists, etc.

Arch -- sounds good -- like p4 it does good automated merges. However I've heard negative things about the maintainer's attitude etc. This is a thumbs-down for me.

svn -- good in all respects except for automated merges.

Nowadays, I'd use p4 for a commercial project or svn for a free one.

Re:P4!

rafael on 2003-07-10T20:37:22

To me, the big plus of p4 compared to svn is this ability to merge with history. But for other aspects, I find svn easier to use. No need to 'p4 edit' files, supports several operations (svn diff, svn status) without a connection, customizable. Note that I don't use GUIs.

You could use p4 for free projects, for personal repositories. I think that several former pumpkings do.

May I link once again to a couple of articles about svn.

Re:P4!

Matts on 2003-07-10T21:14:38

Maintainers' attitude doesn't bother us too much - we do use qmail after all ;-)

Re:P4!

Matts on 2003-07-10T21:18:56

My question to anyone who has used Perforce is: Have you used any of the other tools with great merge capabilities, like BitKeeper or Arch?

Re:P4!

jdavidb on 2003-07-11T15:50:11

Apparently there's an Arch fork called ArX, so you can take your pick of maintainer attitudes.

I say this as a person who thinks forks are a good thing.

Re:P4!

ask on 2003-07-14T09:26:22

What Justin said.

p4's merging magic is awesome. I hope SVN will get there some day too.

Running the SVN server on Apache 2.0 gives you all the usual Apache-framework goodies (authentication modules etc) and is well worth it IMO.

  - ask

ClearCase

alin on 2003-07-10T20:15:59

We use ClearCase at work and it's definitely a bad idea.

Re:ClearCase

jmason on 2003-07-11T17:00:12

oh yeah -- BTW if Clearcase comes up, run away screaming. Here's my thoughts on that "product". Summary: right up there with most of the other Rational products in terms of usefulness, reliability and usability ;)

Aegis?

jesse on 2003-07-10T22:24:14

I've been very happy with Aegis. I'd be happy to go into more about the things I like (and hate) about it on IRC sometime.

-jesse (obra)

Re:Aegis?

Ovid on 2003-07-11T10:23:33

You know, Schwern has some good things to say about Aegis. While he certainly realizes that it's not necessarily the best solution, it's a very nice one. If Aegis was more user-friendly (i.e., idiot proof for the non-technical folks and available on NT without Cygwin), I think I would probably dig into it more.