Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I work for a small web development company (6 people) and we've been in the market for a new code editor/development environment for quite some time.
Currently, we're using Dreamweaver's (CS3) coding side for our site development. Each site's files is hosted on a Dreamhost ftp server. All 6 of us work on the same set of live files on the remote ftp server. Dreamweaver has a handy file locking functionality that prevents us from overwriting each others changes by keeping us out of the same files.
Now, we've found that this form of development allows for very rapid development and love how easy it is to get things done. However there are many things we don't like. One of which is Dreamweaver's code editor. We also don't like our lack of code history for each site.
Does anyone know of a good alternative to Dreamweaver that has similar file locking/ftp functionality?
If not, could you explain to me the best configuration of a source control system for our team? We're willing to look at GIT, Mercurial, and Subversion. The new system would ideally:
1). Support multiple different code editors on different operating systems. (Windows 1st choice.)
2). Be almost as easy and quick to push out code as currently.
3). Allow for working on the files outside of the office network.
4). Be inexpensive.
I'm probably just showing my ignorance of how to use a version control system, but it doesn't seem logical for each of us to have a testing server on our computers with every single site setup with our own test database... That's very time consuming
What's your solution to our problem? I think we'll either have to upgrade to the latest version of Dreamweaver and stick with it forever, or we'll have to find some sort of ftp collaborative editor, or we'll have to implement version control.
Do the benefits of version control outweigh the extra amount of time it entails to push out code?
it doesn't seem logical for each of us
to have a testing server on our
computers with every single site setup
with our own test database... That's
very time consuming
That's generally the way to do it. Most modern frameworks will let you set up your development server in minutes, if not seconds -- using an embedded http server and database, for example. If you are stuck on an ancient platform, there are solutions like wamp that are only a little more difficult. Remember, that it's time that you spend once, but it lets you be faster. If the project is going to take any longer than a few hours, it should be beneficial. You don't waste time on debugging things your fellow developer just changed, or recovering production data from that silly database manipulation mistake you just made.
(Oh, and if your websites are just HTML+JavaScript, then you don't need any server locally, obviously.)
As for version control systems, the ones you mentioned are fine, with SVN requiring a little more setup and network access to the central server for commits. Git and Mercurial let you work and commit offline, and then push your changes to the central server or even just exchange them between developers. I think Mercurial works better on Windows at the moment.
Michael I hear your pain.
I can't claim to have fully researched all avenues, but I have really begun to love Git recently.
My first hurdle was learning about how Revision Control Systems (RCS) work. Before I would pick SVN vs Git vs HG vs Bazzar vs etc I evaluated what I wanted to do. And that was to work locally then share my work, and push to a webserver.
I found this great comparison website: http://whygitisbetterthanx.com
From that I could clearly see that Git was worth the time to learn. As the backwards learner I am I dove into a project and learned how quickly things could become messy, then I began reading: http://gitready.com/ and http://book.git-scm.com/ and http://progit.org/book/
Then I realized I needed an organizational strategy. I went searching and found something I (and a lot of others) liked: http://nvie.com/posts/a-successful-git-branching-model/
This is also a great resource:
http://danielmiessler.com/study/git/
There's a bit of a primer. Let me try to answer your questions more directly.
1.) Git is a command-line tool. For windows there's cygwin.
I found the documentation at github to be the best. Even if you don't plan on using them for code hosting. Have a look at http://help.github.com/ Use the setup git link to get started.
2.) Since you ask for versioning there is a bit more work. Its a different model, a different way of thinking. Rather than not be able to edit the file which is currently what happens, your commits might collide, and in that case git provides great diff tools to help resolve the conflict.
3.) Git is whats called a DCVS or distributed version control system. Here's an example:
lets say you need to do some work over the weekend. You do a git pull from the server before you leave work. At home you can continue to work, create new branches etc. Then when you have an internet connection you can push your changes back to the server.
4.) Git is free!
As for pushing your work to the webserver you'll need to setup something like this:
http://toroid.org/ams/git-website-howto
Looks pretty easy, I'm gonna try it out next weekend.
I hope you find some of what I wrote helpful, if not maybe the links are.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
First of all, we're all beginners, so I am really sorry if this is a trivial question.
We're developing a game in Unity3D. We have two programmers, and one artist. We'd like to make our life easier by not just simply communicating via Facebook and sending our stuff back and forth. I know about GitHub, but I have a couple of problems with it.
It's not free for closed source projects - which would be ideal. Is there an alternative? Is this even the right kind of site to use?
Stupid reason, but I just can't comprehend how it works/how to use it. Is there an easy tutorial for it or something?
Is it even 'compatible' with Unity3D? Since I don't really know how
GitHub works, this might also be a really stupid question.
First of all you can use Bitbucket to host your stuff. Its like github without the open source community.I'm using it on a similar project I'm working on with some guys. It's important you understand that git is version control software developed by Linus Torvalds (creator of the Linux kernel). Git can be used to "commit" changes to a project. Then your other coder could grab those code(script in unity?) files and load them into him project. It is kind of overwhelming to learn to use at first, but it gets easy once you get it. Really learning to use git is one of the best things you can do for yourself.
As far as using git goes, I use linux so I can just 'man git' to look at commands and then use said commands in the shell. Mac uses bash so it probably is run right from the shell there too. Honestly I don't know at all for windows.
Here are a couple of resources:
https://try.github.io/levels/1/challenges/1
https://www.youtube.com/watch?v=TI3yVcSahzk
If I had more time I would look for a really good one for you, but I'm going to be late for work!
I have developed some Unity3D projects using GitHub before. So to answer question 3 and the last part of 1 first, yes Unity projects use a file-system architecture that is perfectly compatible with GitHub and once your used to it it is a great tool for team development.
Answer for question 1:
GitHub is just a name brand for a centralized version control system and there are other brands out there with similar offerings such as bit bucket. Google this term for more info. also look into distributed version control as well.
In all honesty though, if your new to developing, the product you will be making will most likely not be of much interest to other people on GitHub and your public repository will probably go unnoticed. If you believe that what you are creating is of such great value it needs to be kept secret, then investing a few dollars a month in a premium service is recommended anyway.
For other options, one would be to set up a central Git repository on a server (or one of your home computers) that you or one of you project mates is running. This might be a more complicated method but you would learn a lot of other useful things along the way.
Answer for question 2:
See -https://guides.github.com/activities/hello-world/- for github's intro tutorial. Also Youtube has some decent offering if you search for how to use Git Hub.
It can be a little daunting to work with something new and attempt to understand the documentation. If you are planning on getting serious about development though, especially in a corporate setting, you need to learn GIT and practice reading and understanding documentation.
Good Luck!
I recommend git for just about any text-based version control. If the files are binary heavy, it still works but it's not git's strength.
Until you get the central hosting worked out, you can use git bundle to share the changes offline.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
Web developing isn't what it used to be. It used to consist of hacking together a few PHP scripts (I have nothing against PHP, actually it's currently my main programming language), uploading them via FTP to some webhost and that was that. Today, things are more complicated. As I can see by looking at a number of professional and modern websites (SO being the main one, I consider SO being a great example of good practice in web developing, even if it's made with ASP.NET and hosted on Windows), developing a website is much more than that:
The website code is actually in a repository (that little svn revision in the footer makes my nerdy feelings tingle);
Static files (CSS, JavaScript, images) are stored on a separate domain;
Ok, these were my observations. Now for my questions:
What do you do with JavaScript and CSS files? Do you just not keep them under version control? That would seem stupid. Do you create a separate repository for them?
How do you set up the repository? Do you just create one in the root of the web server? Or do you create some sort of post-commit trigger that copies the latest files to their appropriate destinations?
What happens if you have multiple machines running the website and want to push some changes to all of them?
Every such project has to have configuration files. These differ from the local repository to the remote one. For example, on my development machine I have no MySQL root password, while on the production server I certainly have a password. This password would be stored in a config file, amongst other such things, which would be completely different on my machine and on the server. Maybe they are different between production machines, too (like I said earlier, maybe the website runs on multiple machines for load balancing). How do I handle that?
I'm looking to start a new web project using:
Python + SQLAlchemy + Werkzeug + Jinja2
Apache httpd + modwsgi
MySQL
Mercurial
What I'd like is some best practice advice on using the aforementioned tools and answers to my questions above.
You're right, things can get complicated when trying to deploy a scalable website. Here are what I've found to be a few good guidelines (disclaimer: I'm a rails engineer):
Most of the decisions regarding file structure for your code repository are largely based upon the convention of the language, framework and platform you choose to implement. Many of the questions you brought up (JS, CSS, assets, production vs development) is handled with Rails. However, that may differ from PHP to Python to whichever other language you want to use. I've found you should do some research about what language you're choosing to use, and try to find a way to fit the convention of that community. This will help you when you're trying to find help on an obstacle later. Your code will be organized like their code, and you'll be able to get answers more easily.
I would version control everything that isn't very substantial in size. The only problem I've found with VC is when your repo gets large. Apart from that I've never regretted keeping a version of previous code.
For deployment to multiple servers, there are many scripts that can help you accomplish what you need to do. For Ruby/Rails, the most widely used tool is Capistrano. There are comparable resources for other languages as well. Basically you just need to configure what your server setup is like, and then write or look to open source for a set of scripts that can deploy/rollback/manipulate your codebase to the servers you've outlined in your config file.
Development vs Production is an important distinction to make. While you can operate without that distinction, it becomes cumbersome quickly when you're having to patch up code all over your repository. If I were you, I'd write some code that is run at the beginning of every request that determines what environment you're running in. Then you have that knowledge available to you as you process that request. This information can be used when you specify which configuration you want to use when you connect to your db, all the way to showing debug information in the browser only on development. It comes in handy.
Being RESTful often dictates much of your design with regards to how your site's pages are discovered. Trying to keep your code within the restful framework helps you remember where your code is located, keeps your routing predictable, keeps your code from becoming too coupled, and follows a convention that is becoming more and more accepted. There are obviously other conventions that can accomplish these same goals, but I've had a great experience using REST and it's improved my code substantially.
All that being said. I've found that while you can have good intentions to make a pristine codebase that can scale infinitely and is nice and clean, it rarely turns out this way. If I were you, I'd do a small amount of research on what you feel the most comfortable with and what will help make your life easier, and go with that.
Hopefully that helps!
While I have little experience working with the tools you've mentioned, except for MySQL, I can give you a few fairly standard answers for the questions you posted.
1) Depends on the details, but most often you keep them in the same repository but in a separate folder.
2) Just because something is commited to the repository doesn't mean that it's ready to go live - it's quite often an intermediary build that could be riddled with bugs. A publish is done manually, with an export from the repository. Setting up the webserver in the same folder as a svn checkout is a huge nono as the .svn folder contains quite a bit of sensitive information, such as how to push changes to the svn server.
3) You use some sort of NAS or SAN solution, or simply a network share on one of the servers, and read all your data from there. That way, when you push information to one place, it's accessible by all servers. If your network is slow, you set up scripts that pushes the files out to all the servers automatically from a single location. If you use a multi-server environment in ASP.NET, don't forget to update the machine key in the config files or your shared encrypted caches, like the viewstate, won't work across servers. Having a session store in a database is also a good idea.
4) I've got a post build step that only triggers on publish that replaces my database connectionstrings with production ones, and also changes my Production app config value from false to true in the published web.config/app.config files. I can't see any case where you'd want different config files for different servers serving the same content.
If something is unclear, just comment and I'll try to clarify.
Good luck! // Eric Johansson
I think you are mixing 2 different aspects, source control and deployment. Just because you have all your files in a single repository doesnt mean they have to be deployed that way. Its also arguable whether you should be deploying directly using source control or instead using a build/deploy script which could handle any number of configurations.
Also hosting static files on a seperate domain only really becomes worthwhile on high traffic websites. Are you sure you aren't prematurely optimising?
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this question
Which version control system would you recommend for:
single user
looking for simple, easy to use
generally small simple projects
working on windows
usually coding python
no server
Use would be more finding old code than complicated branching situations.
From other similar posts, Bazaar and Mercurial seem the best distributed version control systems for my needs. I'm somewhat leaning towards Bazaar as it seems simpler.
The main complaint I read about Baazar was that it was slow, but speed was to be improved in version 2, to be released this summer. The new version has not yet been released, but there is a 2.0.0rc2.
I'm wondering if anything has changed recently or if anyone has any strong feelings on the subject.
EDIT: After reading the responses and browsing some alternatives, I'm going with Bazaar, at least for the moment. For my needs, the products mentioned seemed rather similar. Bazaar has documentation specifically aimed at a solo developer and seems rather easy to use. Others seem more aimed at groups or those with central servers. Other systems may be as good, but I thought starting to use something was more important than spending time trying to find the perfect program.
Thanks, everyone!
(Should I have written this as an edit, an answer or a comment?)
If you're just single developer working on small projects, any version control system should be fast enough.
I'm a Mercurial developer myself and will of course recommend that :-) I like how Mercurial has one central concept: the changeset graph. The graph resides inside a repository (a clone). You can have several lines of development in the same clone. This can be in the form of multiple heads, perhaps marked with the bookmarks extension or as named branches. You can also use several clones to keep things separated, or you can go back and forth: it is easy to separate a combined clone (use hg clone -r REV to obtain part of the revision graph). See this blog post for pretty pictures.
For Windows (and other platforms too) you have TortoiseHg, which gives you a very nice graphical interface. TortoiseHg also integrates with many excellent plugins for Mercurial, in particular the record extension, which lets you pick out individual changes from a file when you commit. Using that, you can edit several files, and then commit those changes as several independent changesets.
Finally, you should also know about Mercurial: The Definitive Guide, the free online book about Mercurial.
Bazaar is very good for your needs, and I'm doubt you found speed issues with your projects. Bazaar has very nice GUI front-end called Bazaar Explorer which I'd recommend over TortoiseBzr. (Bazaar Explorer bundled into standard 2.0 installer now.)
Of course if you choose Mercurial you don't lose much.
So you'd better test one and another and make your choice. Every zealot will recommend you his favorite.
If you're a Windows user, nothing IMO can beat TortoiseSVN in terms of usability and ease-of-use.
Definitely Subversion....
It's free, very very easy to set up and use, doesn't require a server because it can just access the local filesystem, and you can find loads and loads of documentation and help if you get stuck because I think there are far more people who use SVN than bazaar or git for example....
You can just download TortoiseSVN (http://tortoisesvn.tigris.org/) en start using it....Nothing else is required for getting started because tortoisesvn has subversion built-in I believe....
I've done some playing with all of them.
The key thing that has attracted me to Bazaar is its flexibility.
Want to operate in centralized mode (ala SVN)? You can do that. Want to operate in distributed mode (ala Mercurial or git)? You can do that.
And here's where it gets better: you can do both. Say you're working with a guy that came over from SVN and he just doesn't like the distributed concept one little bit. Fine. Let him work in centralized mode while the rest of the team works in distributed mode. If he's away from the central repository, he can even take his checkout offline and do offline commits while he's gone. Then he can commit them all when he gets back.
While some of the other systems have ways to approximate different models, none seem as committed to flexibility as bazaar.
I have used SVN, Git and Bzr quite extensively on various different projects. I am currently using Bzr on a single user project and it is very easy to set up and use. No need to set up a server and comes with TortoiseBzr which works well, it may not be as feature complete as TortoiseSVN is but for a one-man project you should have everything you need. There are a few things missing such as the ability to Tag revision in which case you need to resort to using the command line interface. I considered Mercurial about a year ago, but I haven't used it in a real-world situation yet so I wouldn't be able to compare. I decided against it because TortoiseHG didn't seem very mature at the time, I expect it will have improved since then.
I quite like darcs, it uses something called patch theory which is, as far is I know, unique in version control software.
I have been using Bazaar for a while and was pretty happy with it. With all the hype going on about git, I gave it a try. And even though it has pretty complex concepts, I can only say that it was worth the switch. I now use it for all my projects. No matter how small. And I think TortoiseGit has become good enough to be usable.
I can see the following good points about it:
It's fast
Branching and merging is so simple you could even say it's fun
It's got funky commands I haven't seen anywhere else (f.ex.: stash and rebase)
It's hyped. Consequently the community is quite active and you can find a lot of material on it
You can grab a copy of gitorious to manage your projects privately
Some things I don't like as much:
branch display in gitk "feels" strange to me
I use git and it works great for me. I use msysgit on Windows.
I will recommend Git always. It is fast, doesn't need server, branching and merging is excellent. For Windows you need to get MsysGit.
Mercurial is also very good with a bit easier interface for user.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
I am a student and I always develop projects on my own, mainly with Ruby On Rails.
I noticed that even a simple project may become complex if you can't easily rescue deleted code and pass from a version to another. Time Machine backups are not enough.
I would like to use a version control system, but they seem not to be intended for single-user projects. Am I wrong? If so, what policy and software do you use for managing your code?
There is nothing that says you can't use a standard version control system if you are a single user. Doing so would definitely keep you from experiencing some of the more painful problems such as merging files changed at the same time and other conflicts that arise from multiple developers.
Based on this, you could look into any of the version control systems (I believe Subversion is far and away the most popular right now) and pick out the one that will most closely match your needs, or has the interfaces you are most comfortable with.
Distributed version control systems are just for you: look for Bazaar, Git or Mercurial. They are lightweight, local commits are easy and you can always revert to a previous version. With a hosting provider such as GitHub, you can publish your projects, you get backup for free and you can easily share the projects with other potential contributors. Collaboration is easy because merging your changes is also a lightweight operation.
It is definitely a good idea to use version control software, and other project software on your own projects. These tools are not just for team working, although they allow team working. Beyond the obvious reasons for keeping track of your changes to the project it is a good idea to use SCM tools so you are familar with what the industry is using.
Subversion is widespread, and is quite a good bet as it's successfully replaced the earlier and older CVS tool. It relies on a central repository where the code is stored and can be backed up: where I have used SVN for personal projects and small team projects I have backed up to CD. If your project is opensource there are sites like sourceforge that support svn which you can use for hosting.
However as some of the other posters have indicated, a personal project might benefit more from a distributed system: git is increasing in popularity since git-hub has come online and porting efforts to are succeeding. http://git-scm.com/ It is likely that tools like these will grow in popularity over the coming years as they allow a greater number of people to participate on the same code. The idea of one central repository is relaxed giving each developer the ability to version track different designs and only give back to the community the versions they complete.
One of the benefits with using SCM for all projects personal or not, is that a separate server can be set up testing a version of the code. Automated testing on the latest version of the code (using a Continuous Integration Server or similar) can improve the quality of the software you are writing.
Some highly experienced software developers talk about a rhythm where they make incremental changes checking in frequently. Getting into the habit of making small changes which are complete and checking them in: is a good practice to get into for group working.
I would recommend Subversion. It's free and relatively simple, and learning a little about it may well beneficial in the future. It's cross platform and also available on a variety of hosted systems.
See also: https://stackoverflow.com/questions/250984/do-i-really-need-version-control
and: Using Version Control for Home Development?
Subversion!
You can install locally or use a hosted service. The services are nice if you want to switch between computers or use it as an offline backup. http://www.beanstalkapp.com/ has a free plan for personal use.
GitHub (git, not subversion) is also popular but I believe there is a small fee for personal projects.
Use git. It allows you to work without ever needing a server.
There are utilities for the command line and a GUI (older screenshots) too (for linux, windows and OS X).
If you later want to share or publish your project you can easily push it to a site like github.
Even for personal projects, if they become bigger than something you write a few hours, a version control system will be very beneficial.
Here are a few good points:
Many version control systems have good integration with IDEs.
Branching will allow you to experiment without the fear of having to take a long time to revert the changes. The branch can later be merged to the main trunk if needed.
Having a history of changes can be helpful, and tagging will allow setting milestones.
More efficient storage than full backups using regular copying of files.
Extra metadata (such as commit comments) can be attached.
Many version control systems are free!
I personally use a Subversion server running on my system which I access via the Subclipse plug-in in Eclipse, which I find to be very helpful in keeping track of my personal projects.
If you're interested in Subversion, Version Control with Subversion is a very helpful source in learning about the concepts, and how to set up and get started with Subversion.
Version control systems may be a little difficult at first, but it's definitely worth the effort to set up!
I'm very wary of using "always" in any answer I give on SO...
ALWAYS use version control. These days it's free AND easy to do. There's simply no reason ever not to use it. If it's an hour long project...good...it's an hour long project that's in version control now.
My solution has been slicehost(ok...not free), redmine(free RoR bug tracker)git and gitosis. Starting up a new project adds about five minutes on to the front of any coding, but its five minutes well worth it.
Use SVN or Mercurial.
Both very appropriate for "home" usage, I think Mercurial is better for you because by default you'll be creating one repository per project ( oposed to SVN's one "big" repository that stores everything ), so it will be easier to backup individual projects or exchange sources with others if needed.
Both work in command line mode or using explorer-like interfaces ( Tortoise ) or plugins available for the most usual IDE.
I use subversion to manage all my projects. xp-dev.com is a free subversion hosting solution. Also, I think, if you install tortisesvn it installs a subversion server to use locally.
A complete different version control system is dropbox (www.getdrobox.com). It's not (only) intended for source code. It available (with smart OS integration) for Mac, Win and Linux plus private Web Interface.
It may be interesting for you.
One item you will like about git such as using github hosting is that you have a history of changes that you can go to and get the actual code source and thus 'rescue' previous code changes.
You could also use the dropbox approach in just backing up raw code to a folder on the cloud..
I have used both methods for personal projects.
Hosted version control such as beanstalkapp.com is very convenient, but do consider whether you want to hand your source to a third party. You could consider a local repository, backed up online with a solution which encrypts the contents locally before uploading. I do this with subversion, Amazon S3 and JungleDisk.
Bitbucket is an absolute must consideration for personal projects based on:
Free, unlimited, private repositories
Up to 5 users on their free account
Git and Mercurial support
This allows one to quickly spin up a repository without having to pay attention to how many repos are available under a paid source code hosting account.
It also allows projects that will enter the public domain to be simply forked to GitHub, etc.
Version control is always important.
Try a free online SVN like http://beanstalkapp.com/
Do a search and you can find lots of suggestions
I would highly recommend downloading VisualSVN Server. It's a very simple setup and will do exactly what you need.
you can use any version control system that exists just for single user development. as you said, even simple project can become a nightmare if you change something you think is better and it fails. download tortoise snv - it's free and pretty simple to use - and keep your working versions in repository. commit code that works, keep possible small changes (for example refactor one class), build it, test it if it works -> commit, if it doesn't and you don't know why you can allways revert changes and try again.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I work alone on various small projects. I work in different places and on different machines (at home, at work), so I have to synchronize source code between them.
Currently I just work on different directories (for versions) and email myself zips (for syncing the work done at home with the work done in other places).
How can I improve my workflow with some version-control or sync tool?
Do you have a server you'd have access to from everywhere? If so, just put subversion on there. Or use github or something similar. Pretty much any version control system which can talk between different machines over the net should be fine, IMO.
I don't think I'd call Subversion "overkill" - it's pretty simple, easy to run, and there are good Windows clients for it.
In terms of hosting, if you're happy for it to be an open source project, then there are any number of places which you could use - Google Code, SourceForge, github, CodePlex etc.
for this purpose I like using mercurial since it requires no time consuming setups (e.g. svn requires a server somewhere).
Git is a fine solution for version control, suitable for scales of project all the way from single user to the Linux kernel (and beyond). I use Git for all my personal projects, and can easily work in multiple places and merge the repositories later.
With the use of a common web-accessible repository like Github, working in multiple places becomes even easier.
I suggest Mercurial. I used to use Subversion, but it is tedious, especially if don't have Internet access at all times.
I agree with others SVN does solve the problem of working in multiple places. However, like dfa I prefer Mercurial (hg) for this, because then I don't have to choose one master location/server (or do server setup).
I personally use Mercurial. I prefer it over subversion because:
I don't need a server per-se
I can have local commits, which is very useful when you're working on several machines
I would recommend you one of the distributed version controls out there, like mercurial, git, bazaar, monotone and so on.
working on different folders for different versions is just what their branching is ideal for - you can merge every branch with every branch if you wish to.
just throw an eye upon them.
I use a system like Assembla to keep my Subversion repositories offsite, and then use TortoiseSVN to keep projects in sync on multiple systems. I also run a full SVN server at home which I keep private paid for projects on. I tend to move between my Mac and my home PC regularly for development and find this the simplest way to keep the files in sync, and at the same time providing and external backup.
SourceGear Vault is a popular windows-based version control system. Pretty easy to set up, but you do need a windows machine acting as a server.
For single users, it's free.
I would say "TortoiseSVN" is a good choice, better than no source control software at all
I'd go for Bazaar personally, I've just started using this at home for personal projects and it's really simple to use.
I would recommend using Bazaar, and if you don't like a fancy console you can use Bazaar Olive.
I don't know how I got it installed but I also have Tortoise Bazaar, which allows me to work with lower end version control servers :)
why not use something like sourceforge.net ?