Multiple repos:
pros:
- component-based approach (you identify groups of files that can evolve independently one from another)
- configuration specification: you list the references (here "revisions") you need for your system to work. If you want to modify one part without changing the other, you update that list.
- partial clones: if you don't need all components, you can only clone the ones you want (doesn't apply in your case)
cons
- configuration management: you need to track that configuration (usually through a parent repo, registering subrepos)
- in your case, data is quite dependent on certain versions of the projects (you can have new data which doesn't make sense for old versions of the project)
One repo
- pros
- system-based approach: you see your modules as one system (project and data).
- repo management: all in one
- tight link between modules (which can makes sense for data)
- cons
- data propagation (when, as you mention, several HEAD are active)
- intermediate revisions (not to reflect a new feature, but just because some data changes)
- larger clone (not relevant here, unless your data include large binaries)
For non-binary data, with infrequent changes, I would still keep them in the same repo.