You can use Mercurial or Git without a problem. I don't know why @TomTom states otherwise in such a way without providing any hints about the reasons.
Sure you will have to manage the various binary files that comes with every game development (movies, texture, maps, etc). But both software have ways to handle them.
Mercurial
Mercurial has various extensions to deal with large files, especially binary ones.
Since version 2.0, the Large File extension is included in Mercurial and you can use it without downloading anything else. Files are not directly stored in the repository, but Mercurial tracks which version of the file is needed for each changeset, so you can download a precise version of your game with the right file when you need them.
Before 2.0, there was mainly two extension used :
- Bfiles extension, which was used as the base for the new extension in 2.0
- Bigfile extension, which is a little more complicated than the two others in my point of view
Git
I'm not really familiar with Git possibilities to handle large files, but I know various solution exists. This post should give some good pointers : Managing large binary files with git
I've hear a lot of good about git-annex.
SVN
I've used SVN with large files, and I don't have the impression that it manages them better than Mercurial (without extensions) out of the box.
If you decide to use an extension to manage large files with Mercurial / Git, Subversion is way behind in term of functionnality.
Conclusion
About your concern to keep the binary files version in sync with the source, bot Mercurial and Git extensions handle this very well.
Each version of the binary files is stored in a separate centralized directory (the largefile store
in Mercurial terms) and when a dev clone the repository or update to a particular changeset, only the needed files are download from this store.
You can even use the same store for various repository !
The process of adding a file to the store or updating it is nearly transparent to the dev, so no problem about a long learning curve for example.
To conclude, I really don't see why Git or Mercurial are not up to the task and no other answer gives any real reason.
In my opinion, big game companies sticks with older tools because change takes time and when you've paid for something, you use it ! How many companies out there are still using VSS or CVS just because the hierarchy won't hear anything about something else ? We just migrated to TFS (from VSS) last month where I'm working...