title: Free Version Control for single user on single machine
body: <p>There are a few similar questions but some of them are 5 years old (so there may be new stuff which are better) and the others don't cover all my requirements.</p>
  
  <p>I am looking for suggestions for version control software.</p>
  
  <ul>
  <li>Has to be free for commercial use.</li>
  <li>All development will be done by one person.</li>
  <li>All development will be done on one machine - 64 bit Windows 7 machine.</li>
  <li>Lots of small projects - each project small - just a couple of weeks worth of work. So it should be very quick to start a new project.</li>
  <li>should have a command line for checkin. </li>
  <li>should have a graphical way to look at version history for a file - i.e. I type "history file.cpp" - it should give me a window with all versions for that file &amp; a easy way for me to do a visual diff(with a pluggable difftool - I like windiff) of any two versions in the history.</li>
  <li>The work will be on different programming languages - (C, C++, Java, VBScript, etc).</li>
  <li>IDE integration not required at all.</li>
  <li>Creating a tag/label should be quick and easy.</li>
  <li>Merging and branching will never be done, so any features related to these aren't relevant.</li>
  <li>Conflict resolution will never need to be done.</li>
  <li>very quick learning curve for the basic stuff.</li>
  <li>should have a single command to checkin all checked out files under a directory including sub-directories. This should happen without a UI being thrown up on running the command. i.e. comments common to all files should be accepted from the command line.</li>
  </ul>
  
  <blockquote>
    <p>i.e. checkin -r *.cpp -c "Added new stuff".</p>
  </blockquote>
  
  <ul>
  <li>I liked some features in the perforce client I used
  <ul>
  <li>Though there was a checkout command, I could also just force save a file without checkout &amp; continue working. Then afterwards running just one command searched for all files in a directory/sub-directory which have been force saved &amp; checked them out for you.</li>
  </ul></li>
  <li><p>Shouldn't require me to add new directories in the repository. Adding a file in a directory should automatically add the directory - i.e. I need to create a new file A.java inside directory new. I will do</p>
  
  <pre><code>md new
  cd new
  // edit and create the file A.java
  // create and checkin the new file A.java into the repository 
  // without complaining that the directory doesn't exist in the repository.
  </code></pre></li>
  <li><p>Should be easy to backup. i.e. Once a week I use SyncToy to backup stuff to an external harddisk. I don't mind using a different way to back the version control repositories into the external HDD, but it should be simple to backup - in case my laptop crashes, I should be able to recreate all the repositories including version history from the backup.</p></li>
  <li>I am looking for something lightweight. i.e. doesn't require me to setup a separate server etc.</li>
  </ul>
  
  <p>At different times in multi developer huge project environments, I have used perforce &amp; CVS - liked perforce very much. Never liked CVS much but using the Tortoise UI for CVS made it bearable.</p>
  
  <p>However, for these Version Control Systems, I was always a user - never an admin (i.e. the devs didn't manage the Version Control system - there were separate version control experts for that) - i.e. I have never created a new repository - so my knowledge is just client side stuff. </p>
  
  <p>I know all my requirements may not be satisfied by any one system - but something which comes as close as possible would be great.</p>