Drupal doesn't have any specific requirement compared to any other general software source.
Here is Git/Mercurial vs. Subversion:
- Git (but also true for Mercurial)
- Line endings would be normalized (no matter RL+LF or LF or... it would be stored as a 'line return' and unpacked as the OS format says)
- A single file
.gitignore
allows to tell all files you'd like to ignore
- You wont have a
.svn
folder in each of your folders (which forces to use the slow export function or a custom batch to remove them)
- Extremely simple to setup locally
- Download Git and start the command line
- Go to your project folder
git add . && git commit -m "My first commit"
- Done, you now can change files and revert to your first commit already
- Good to share code in an OpenSource project via GitHub
- Has TortoiseGit on Windows if you want a simple GUI (at the cost some advanced features), but it's a bit harder to install than TortoiseSVN
- Subversion (SVN)
- Somewhat simpler to create your own private server
- Has ToirtoiseSVN on Windows if you want a simple GUI (at the cost some advanced features)
- Clear client/server: Meaning also you'll have to keep a server running (possibly on the same machine as the client) to use the client
- I cannot say much about Bazaar as I haven't used it
Clearly I'm biased toward Git and Mercurial. Both are more recent. I personally prefer Git because:
- It doesn't require Python
- There is portable version
- It allows me to rewrite history
Still you should note that Mercurial got Google's attention recently (for Google Code) and it's somewhat simpler to learn. You can learn Git from http://progit.org/book/ (the first 3 chapters should be enough).
As for the project folder structure, I suggest you look-up other answers. Keep in mind your goal (ex: testing, quick deployment on various machines...), and backup your repository. That means copying your project folder to a remote location for Git/Mercurial, and copying your Subversion server repository for Subversion. Outside of that, all have hooks allowing you to run tests before committing, and they have interfaces to bug tracking systems.
Least but not least, if you use other libraries under version control in your project, consider that! Git and Mercurial allow to track a Subversion repository (via git-svn
), not the opposite. Mercurial can also track a Git repository, not the opposite (yet). Tracking a remote repository allows your to get the latest version with a change log of remote source code you'll be using. It also allows you to modify it.