Consider the following scenario. You have spent the past two days crafting the most perfect piece of code for your own library or framework. You ask your team member to create a practical example to test if it all works as you intended. You copy your source, and your teammate compiles it and finds a bug. Since he is a good team member, he wants to dive right into your code, fix it, and give you back the corrected code.
But after he fixes it, there are now two versions that need to be merged into one working piece of software. This can be a very error-prone and intimidating process: you have to identify what has changed and adjust it so it is correct in both versions.
Or what about this scenario? You are part of a team and need to work on the application for that Really Big Client. Since you work on location with the client and your colleague works back at your office, you can’t work at the same time on the same code; you can only take turns with it. And since there is no centralized place to put the code, you have to copy over the source from your teammate before you can work on the project. Not very efficient!
This is where source code management (SCM) comes into play. SCM, or version control, is the practice of managing the revisions of your code with comments so the code can be easily retrieved, even if it was written a long time ago.
The best way to visualize a versioning system is to think of it as a tree. As a tree grows, layers develop, known ...