The purpose of versioning systems is to facilitate collaborative editing and sharing between different participants while making sure that no one accidentally overwrites someone else's work. Verioning systems also ensure that everyone has the current version of the resource, helps in avoiding duplication, and enables users to track changes. A version control system is a necessity for any software development project employing multiple programmers.
Versioning system use either the Locking (Lock-Modify-Unlock) Model or the Nonlocking (Copy-Modify-Merge) Model. The locking model allows only one user to edit a file at a time. This is accomplished by using locks. While someone is editing a file, it is locked and other users can only view it. Once a user is finished editing a file, the file is unlocked and available for editing by other users. User's are often frustrated with Locking Model's restrictiveness e.g. a user is editing a file and then runs off to a 2 hour meeting while another user can't progress because he needs to edit this file.
Nonlocking Model is used by SVN, CVS and many other versioning systems. In this model, every user works on a local copy of the repository rather than on the repository itself. Once a user is done editing a file, he commits it to the repository. All other users can update their local copy by updating their local copies. If two users are working are editing a file simultaneously, their changes are merged into a file. Merging is not possible with binary files such as images and video. In such cases, SVN allows users to use a locking model.