First, if you want to have a team working on Mathematica code, then you really should do it properly and use [Wolfram Workbench][1]. As pointed out by [Leonid][2], notebooks are not the right tool for software development. 

This said, I have used version control ([git][3]) with a notebook and successfully merged versions[.][4] To do it, I minimized the amount of metadata in the notebook by:

 1. Turning off [Notebook History][5] (and clearing any existing history using the dialog)
 2. Turning off the Notebook Cache (in the [option inspector][6]).

You can turn off both notebook options with with the single command

 SetOptions[InputNotebook[], 
 PrivateNotebookOptions -> {"FileOutlineCache" -> False}, 
 TrackCellChangeTimes -> False]

but clearing the existing notebook history (removing all of the `CellChangeTimes` cell options) is easiest using the provided dialog.

Outputs can be long and messy and normally don't want to be tracked by your VCS. Some input/ouput combinations I did want to keep, so I set the output cell option `GeneratedCell->False` and then both cells' options to make them non-deletable and non-editable. The rest of the output cells were removed using the [Delete All Output][7] menu option.

Finally, keep your notebook(s) well organised with sections and subsections so that work and changes are clearly localised, which will make possible merges easier.


 [1]: http://www.wolfram.com/products/workbench/
 [2]: http://mathematica.stackexchange.com/a/11289/34
 [3]: http://en.wikipedia.org/wiki/Git_%28software%29
 [4]: http://forums.wolfram.com/mathgroup/archive/2010/Oct/msg00140.html
 [5]: http://reference.wolfram.com/mathematica/tutorial/NotebookHistoryDialog.html
 [6]: http://reference.wolfram.com/mathematica/tutorial/OptionInspector.html
 [7]: http://reference.wolfram.com/mathematica/ref/menuitem/DeleteAllOutput.html