While I don't consider myself an expert in VCS technology, I hope that others will get the gist as to why they should implement VCS in not just the website building and maintenance, but also in other areas of the business.
If you're into web related development or just have to manage some regularly changing files on your computer, then please read my reply
"... this may seem a little confusing, but read it a couple of times and it will start to make sense.
There a quite a number of reasons and please don't get me wrong sftp is capable and by no means a bad tool, it just is not the best tool for managing any project. Obviously sftp is sometimes the only option available and so it has to be used, in fact all VCS's have sftp as a main component.
However with a VCS you are able to free your creative mind, not worry about the wrong files being uploaded, make changes knowing that you can easily get back to the starting point without relying on backing up a file and making multiple copies etc...
Consider this common scenario:
You have a website that is at a point where clients are experimenting with it, they decide at the last moment that they don't like the colour scheme or whatever issue they want resolving.
The change affects multiple files and images.
So you carefully back up the files, you create copies of them place them into carefully named backup directories and then make the changes the client wants.
When they look at the result, they realise that it has, in their opinion, made it look worse than it was originally. They decide to change to a 3rd option.
Again you go through the process and now you have 2 sets of zip files, named appropriately and it starts getting a little tricky to manage the files.
At about this time, on the unchanged copy sitting on the live server a bug is discovered in rendering on IE6|7|8 and it needs to be fixed straight away.
So now you are faced with a decision, make the fix directly on the live site. Or get back to the original somehow in your workspace.
Ok cool, it's a very minor fix so the decision is made to make it on the live site to save a bit of time, because your copy is, at this point, very different but it's not quite finished yet.
So you fix the bug on the live copy, and now you have to also make the change in all of the various copies you have because the client has decided that the second one was not as bad as they thought after seeing the third that that's the one they want.
But each of the files you need to change are different too, you've have had to create new sets of images, update the stylesheets, take a backup copy of the existing stuff in anticipation that you may or may not need it again and a zip file. When you've done all the work and it's time to move back, you do something similar again. find all the files that have been changed, replace them back with the originals... so on and so on.
While this has been happening you are also having to track which files have been changed and hope that you have written all the correct ones down or try and use your memory to keep track so that when it comes time to put the changes on the site you can ftp it up. You may be a little more sophisticated and use a diff tool to make it easier to find the changes but it is still prone to lots of errors.
I'm sure as you're reading this some of these scenarios are ringing true, and I'm sure you've had the experience at least once of lost files or images, or some files not getting to the server because a small change had been forgotten in the process. There are so many things that can simply go wrong.
VCS is the tool that makes this mess disappear. Yes there are some quirks but this has been in place for over 30 years of software development, of which websites are a part of.
Lets take the same scenario, I'll use bazaar as an example as it is the one I am most familiar with although git and others are very similar:
A) Client asks for changes
1: bzr branch project copy2 (makes a copy you do not need to make any backups or anything, because it is tracked by the VCS)
2: Edit files and make changes as you would normally in your IDE or dreamweaver or whatever you use.
3: bzr add (adds any new files that have been created into the branch - note these are not saved into the original)
4: bzr commit (makes those changes stick in the branch)
5: that's it done
B) Client doesn't like changes and wants to try a 3rd
Same as above
C) Bug appears in IE
1: bzr add; bzr commit (add new files you are working on and commit them into you work space)
2: bzr switch original (go back to the original point of the files)
3: fix bug
4: test fix
5: bzr commit
6: bzr upload site.server.com (uploads all of the changes, and only the changes you have made to the server. Note this step can still use sftp and often does, it just manages it better)
7: bzr switch copy3 (go back to your working copy)
8: bzr pull (gets the fix that was made in the original and applies it to the working copy)
9: carry on working as if nothing happened.
D) Client decided copy2 was the best of the three.
1: bzr commit (save the copy3 changes)
2: bzr switch copy2
3: bzr pull (to add any changes like the bugfix)
4: carry on working with copy2 (copy3 is now abandoned and you don't have to worry about it)
E) Client is happy with copy2 and commits to it going live
1: bzr add; bzr commit
(EDIT: we should do a bzr pull here to make sure that any changes in original are included, we should then test in our dev environment)
2: bzr push original
3: bzr switch original
4: test the new site works as it should now that the original and copy2 have become one.
5: bzr upload site.server.com
You can see that this is a whole lot more streamlined
Now it is more streamlined you can start to automate various parts using another tool call "continuos integration". I won't go into too much detail here but CI can take a whole heap of these simple commands and do them for you automatically, especially in the steps getting onto the live server where every minor mistake can break the application. For example steps C.5/6 and E.4/5 can be fully automated in the above scenario.