I'm new to version control (currently using SVN), but I don't understand how this helps developers. What does version control do that makes it useful in a development environment?
VisualSVN and TortoiseSVN are just UI clients for SVN server. SVN server is source / version control system. Version control system is key asset for any real development because it stores versions of you your source codes. When using version control system you keep only local copy of source codes. The main copy is stored on version control system and you commits changes to the system.
- easy sharing source codes among whole team through central repository
- backuping your source codes and other resource files related to the project
- keeping history how source codes changed
- you can revert to any version kept in the history
- you can compare changes between versions
- you can see who made changes
- you can lock the file for exclusive access so nobody else can work on the file
- you can see who is working on any source code file or who locked the file
- you can merge changes in case of parallel work on the same file
- you can see comments associated with committed changes
- with additional tools you can associate committed changes with tasks
- you can label / tag version to easy find for example production releases
- you can branch source code - create parallel versions where one branch can be considered as the main one and other can be used to test some special feature or to continue development of the new product version while fixes to the current production version are fixed in the main branch
- you can merge changes between branches
VisualSVN is extension to Visual Studio which enables you using SVN repository directly from Visual Studio UI. TortoiseSVN is extension to Windows Explorer which enables you using SVN repository directly as you browse folders and files.
Version control offers a number of things:
- Archive your software so you can see the state it was in at previous points in time. Very useful for finding where a bug was introduced.
- Allow multiple developers on the same project to share and coordinate their work while helping to guard against overwriting each others work.
- Support individual and business continuity particularly through a central server that is protected and backed-up.
Its a minimum for any software development work beyond just tinkering to see what happens.
I always warn anybody who is working with a version control system for the first time that avoiding it is only inviting trouble. They WILL run into a problem that when they look back they WILL realize it would not have happened if they used the system.
The most productive developer is alone. A solitary developer never has to worry about coordinating with anyone else. But as soon as the project goes plural, there is overhead. And for every developer added to the team, the overhead gets worse. It is the job of the VCS to help manage this overhead and minimize the effects.