views:

339

answers:

6

I am mentoring the programming group of a high school robotics team. I would like to set up a source control repository to avoid the mess of manually copying directories for sharing/backups and merging these by hand. The build location will not usually have network access, so this has led me to distributed version control systems (DVCS), which I am not familiar with.

The largest requirements are the following:

  1. Works in Windows XP and Vista. (absolute must)
  2. Changes can be committed locally. (Seems to be the case with all DVCS's)
  3. Repositories from multiple machines can be merged without network access. (Possibly by storing the repository on a USB drive and swapping the drive to another machine, then merging from there)

It should also be easy to learn and use, preferably through a graphical UI, as I am working with high school students who have never used a version control system.

Any suggestions as to which DVCS fits this the best.

EDIT:

Thanks for the answers. Mercurial looks pretty good, but does it support merging repositories from one directory to another, or do I have to set up a local network to merge across?

+5  A: 

Git is lovely, but its Windows support is lax in the extreme (even with MSysGit). I would recommend Mercurial. I haven't actually used it myself, but I have heard that its Windows support is quite usable. Also, it has a slightly easier learning curve for people coming from traditional VCS (like SVN).

Daniel Spiewak
+4  A: 

Mercurial is pretty easy to use on both Windows and Linux. TortoiseHg is a gui front end for Windows that integrates into explorer; It works fine. Both are Open Source. It is my understanding that using Git under Windows is less simple.

Thanks for the answers. Mercurial looks pretty good, but does it support merging repositories from one directory to another, or do I have to set up a local network to merge across?

Mercurial/TortoiseHg will do this (and more), as will all of the other distributed version control tools (as far as I know). I believe it will solve your problem. It is a DVCS and, with TortoiseHg, it is easy to use on Windows. Other distributed version control tools probably will work too (bzr for example), but I have less experience with them. Subversion (svn) is a centeralized version control tool. With some work-arounds you could get it to function in your environment, but it really does not address the issues you want solved. I have no idea why other responders are suggesting it.

ejgottl
A: 

I found SVN to be amazingly simple to set up and use, especially for a single user!

One thing that I found really interesting--the ssh+svn protocol used SSH's ability to run a command line on the remote system to actually start SVN, so there was actually NO setup at all on the server outside creating a directory for your repository.

SVN has a lot of shells if you don't like CLI (TortiseSVN on windows)--so it's as easy to use as anything else.

Bill K
+2  A: 

I guess Mercurial would well fit your needs.

  • It's written in Python, so you won't have any problems running it under Windows.
  • Changes can be easily applied locally using patches or bundles
  • There are a couple of GUI tools available (look for TurtoiseHG)

Mercurial is the VCS I'm personally using. Really easy to learn. You definitely want to try it over Git since it's support for Windows is way better.

skinp
+2  A: 

I love bazaar: http://bazaar-vcs.org/

It has all what you ask for and it is very easy to use.

Davide
+2  A: 

Thanks for the answers. Mercurial looks pretty good, but does it support merging repositories from one directory to another, or do I have to set up a local network to merge across?

Yes it does. All the DVCSes support this. The only difference between this and merging from a server is typically that you pass the appropriate command a local file path instead of a URL.

In Mercurial it looks like this:

Assume you have two repositories, one on your hard disk (C:\Project) and one on your flash drive (F:\Project):

cd C:\Project

hg pull F:\Project

Similarly if you have two repositories on the same system:

cd C:\Project

hg pull C:\Project1

If there's a need for a merge, it will create two "heads" and ask you to merge them with hg merge.

added 1 changesets with 1 changes to 1 files (+1 heads)

(run 'hg heads' to see heads, 'hg merge' to merge)

Notice that that's the same as if you pulled and merged from a server.

quark