Here are the Sensible Rules for Repositories™ that I use for myself:
- If a blob needs to be distributed as part of the source package in order to build it, use it, or test it from within the source tree, it should be under version control.
- If an asset can be regenerated on demand from versioned sources, do that instead. If you can (GNU) make it, (Ruby) rake it, or just plain fake it, don't commit it to your repository.
- You can split the difference with versioned symlinks, maintenance scripts, submodules, externals definitions, and so forth, but the results are generally unsatisfactory and error prone. Use them when you have to, and avoid them when you can.
This is definitely a situation where your mileage may vary, but the three Sensible Rules work well for me.