Introduction
Let us consider that we need to work on a project that has many developers. If every developer is working on different source files, one (rather horrible) way to work is to get the newly updated source file in an e-mail or an FTP client and replace it in your project. Now what if the developers, including yourself, are working on the same source file. We can still follow this horrible way and add the parts that we have worked on to the file we received via FTP, but very soon this is going to become very cumbersome and make it almost impossible to work. So we have a system of saving the files to some central repository or distributed repository, and then have the means to update and send the code so that every developer is working with the latest copy. There are various ways to perform this and it is commonly referred to as versioning the code.