How do I manage collaborative development on a Drupal site? I work with another developer on a Drupal site. We have struggled to find a good way to work on different parts of the site at the same time without getting in each others way. We've tried working on the same development instance of the site, but we often step on each others toes, or bring down the site with some bad code making it impossible for the other to continue working until it's resolved. So we've moved to separate development instances. But now it's a big pain to merge our work into a single instance of the site. We basically end up redoing everything on a shared copy.

The biggest problem we have now is how do we merge database changes, and how do we include the database in our source control system? The files are easy, just track them all (we use git) and merge our work, resolving conflicts where needed. But this doesn't really work with the database. We can take a SQL dump and include that in our git repository, but we can't really merge the databases. The Features module helps a little, letting us export some of our database work into code which can then be versioned and merged. However, not even close to everything supports Features. So...


What steps can we take to easily merge our database changes?
How should we version the database (is putting a dump file in git a good way to do it)?
Are there any modules available that help with some of these problems?
Or, are we stuck with working on the same copy of the site? (please so no)




Edit: In the comments we discussed what things can't be exported with Features and one of them was Taxonomies. There's another question that deals with that.
It is a workflow change but you should get used to working on a fresh dump of the live DB. There are three ways to get changes into the DB.


Features. This won't work for everything but will for a lot of things you need.
update hooks. When features won't work you can hard code things into an update hook of a module you own. 
Manual changes. Use sparingly. Some things don't come naturally to features or update hooks and are just much easier to do manually. This is a last resort but sometimes is the only piratical way. 


If you can. Several times a day get a fresh dump and test your build, you should have less integration problems.