I’m a relatively inexperienced (recently graduated) web designer who often writes HTML and JavaScript and also works with large Photoshop files. I’ve long gotten used to keeping the files I work on in a Dropbox folder because of Dropbox’s excellent Version History feature. If I make a serious mistake, I can always revert to a previous version of any file.
The prevailing opinion on StackExchange seems to be that Dropbox is much better than nothing but is still not nearly as good as a “real” version control system such as Git. But it seems to me that for a solo web designer, Dropbox provides the best advantages of a source control system (never lose your work) without its disadvantages (learning curve, maintenance).
The ability to fork my code doesn’t seem valuable enough for me to justify
- learning a new system, and
- keeping up with “committing” a change every time I make a significant edit.
If I was collaborating with others on this stuff, that would probably change, but it’s just me in here. And working with Dropbox is effortless; keeping my work safe requires no additional effort beyond saving it.
I want to follow industry best practices, and if there’s an important feature that I’m missing out on, I’d like to know what it is. What value does a version control system provide for a solo programmer that counterbalances its increased overhead relative to Dropbox?
2
Answers
Some of advantages of working with a VCS are:
Finally learning a CVS like git is always useful from an employment perspective.
Not sure how useful a version control system is for photoshop files though, but for code it’s great if you need any of the above.
A VCS is about more than keeping files safe!
When you’re working alone, it’s easy to make changes as you go along. You’ve got a code base that’s managable, and you’re only ever interested in the very newest snapshot of your code. This is especially the case, when you’re developing web sites, where users are always presented with the newest version available.
This mentality can be unhealthy! Imagine you deliver some version (possibly a binary) of something to a customer, but keep working on it. When the customer comes back to ask for changes, how do you easily figure out what changes were made since the customers version? What if you’ve made substantial changes since then, that the customer isn’t interested in. In dropbox, you’ve just got 30 days of mess in your history. With git, things like commit logs and branches lets you easily work on, and manage, different versions of your code, without retorting to copying folders, leaving notes around and what have you.
Even more important – if you start collaborating with someone, you may come back from vacation, and loads of changes have been made to the software. You simply take a look at the commit log to see what’s been changed. With dropbox, it’s just file changes, not discrete units of explaniable updates made to the project, like it is with a VCS.
You may also want to start working on large new feature, or just try something out in your code base. With a new branch, you can hack away on that branch, while you (and others) keep working on the stable branch. You may want to include the changes made in the stable branch into your feature branch (merging), but you can sleep at night, because you know your non-complete feature branch doesn’t interfere with the work on stable branch.
The main point isn’t so much that a VCS has features that are better than Dropbox – it’s that you should adopt the mindset behind a VCS when writing code. You’re improving your application one feature at a time, and can explain and justify each one – not simply making changes as you go along, forgetting the hows and whys.
When you start using a VCS for yourself, you’ll likely find that you end up forgetting about it, and commit at the end of the day, leaving “added some files, made some changes” as your commit message. In this case, a VCS is no better than dropbox. But if you stick to good etiquette, commit often with concise commit messages, even a simple repository with one master branch and labeling of versions, will automatically prove much, much better than dropbox. As you grow with your VCS, you’ll likely start to use other features, such as branching, and you’ll wonder how you ever made do with Dropbox.
For an example of a good git etiquette, take a look at the git flow branching model. I personally find it a great, simple way to use git together with Sourcetree, but there’s more ways to use git, than there are atoms in this universe – just make sure you find one that suits you 🙂