There was a recent question about, effectively, replacing a local source code control system with a "keep all versions" file system or tool.
Many of the answers said in essence that source code control systems are for more than just keeping past versions, even for an individual developer - something I think is correct.
So, the question: What reasons are there for having source code control? And which of those are the most important?
I'm not so much interested in source code control features, but the reasons why those features are there.
Here's a starter for ten, but I'd like to know if I've missed some:
- Keeping all versions, especially ones that formed a shipped product
- Enabling a team to edit and preventing (or at least alerting) when two attempt clashing changes
- Making it easy to see differences between file versions (covering the top two developer excuses: "I didn't change anything" and "my change shouldn't have done that")
- Protecting against developer accidents (deleting/changing code unintentionally)
- Protecting against hardware problems (failed disks etc)
- Allowing development of several different code bases while minimising duplication of unchanged files.
- Keeping a record of who changed something, and why
- Enabling experimental changes without breaking the main code base
Why do you use source control?