<p>Where should I start learning about version control systems? I've used SVN, Team Foundation, and Sourcesafe in the past but I don't really feel like I grasp it completely, and my team doesn't seem to grasp it either.</p>

<p>Which points are the most important to master? I realise this differs from VCS to VCS, but for the sake of this question we can assume that Subversion is the VCS I'm the most interested in learning about.</p>

<p>Also, if you could, please recommend any books on the subject that you find useful.</p>

[{'answer_id': 8757, 'author': 'tim', 'author_id': 1071, 'author_profile': 'https://Stackoverflow.com/users/1071', 'pm_score': 0, 'selected': False, 'text': '<p>Check out <a href="http://git.or.cz/" rel="nofollow noreferrer">GIT</a>. A talk on it <a href="http://www.youtube.com/watch?v=4XpnKHJAok8" rel="nofollow noreferrer">here</a>.</p>\n'}, {'answer_id': 8759, 'author': 'alexmcchessers', 'author_id': 998, 'author_profile': 'https://Stackoverflow.com/users/998', 'pm_score': 2, 'selected': False, 'text': '<p>There are a couple of free ebooks on the subject.  Try:</p>\n\n<p>Version Control With Subversion: <a href="http://svnbook.red-bean.com" rel="nofollow noreferrer">Version Control with\nSubversion</a></p>\n\n<p>Subversion Version Control (PDF):  <a href="http://www.informit.com/content/images/0131855182/downloads/Nagel_book.pdf" rel="nofollow noreferrer">Subversion Version Control</a></p>\n\n<p>I have read and would recommend the former.  Haven\'t read "Subversion Version Control", but it looks pretty in-depth.</p>\n'}, {'answer_id': 8766, 'author': 'BTB', 'author_id': 961, 'author_profile': 'https://Stackoverflow.com/users/961', 'pm_score': 3, 'selected': False, 'text': '<p>I found this useful <a href="http://www.ericsink.com/scm/source_control.html" rel="noreferrer">Source Control HOWTO by Eric sink</a></p>\n'}, {'answer_id': 8767, 'author': 'Philip Reynolds', 'author_id': 1087, 'author_profile': 'https://Stackoverflow.com/users/1087', 'pm_score': 4, 'selected': True, 'text': '<p>The wikipedia article on Revision Control is a great place to start </p>\n\n<p><a href="http://en.wikipedia.org/wiki/Revision_control" rel="nofollow noreferrer">Revision control</a></p>\n\n<p>When trying to teach my colleagues, I found getting him to understand the vocabulary at the end was a great way to start to introduce him to source code control techniques.</p>\n\n<p>Don\'t know what a branch is? Go find out and how they work :)</p>\n\n<p>There\'s a free online subversion book at <a href="http://svnbook.red-bean.com" rel="nofollow noreferrer">Version Control with Subversion</a> which provides an invaluable reference.</p>\n'}, {'answer_id': 8769, 'author': 'N8g', 'author_id': 1104, 'author_profile': 'https://Stackoverflow.com/users/1104', 'pm_score': 1, 'selected': False, 'text': '<p>To answer your question re: Which are the most important points to master I would suggest that after you get through the whole checking in and out process, rolling back to old versions and performing diffs you should take a look at branching. Branching can help you deal with the pain of being in the middle of a large change and suddenly needing to perform a bug fix and deploy it to production without the mixing in the half done stuff you are working on.</p>\n'}, {'answer_id': 8782, 'author': 'onnodb', 'author_id': 1037, 'author_profile': 'https://Stackoverflow.com/users/1037', 'pm_score': 1, 'selected': False, 'text': '<p>I think the Subversion documentation is a good place to start. I found that Wikipedia doesn\'t really help, since it only covers a \'fundamental\' point of view.</p>\n\n<p>In the <strong><a href="http://svnbook.red-bean.com/" rel="nofollow noreferrer">Subversion Book</a></strong> that alex mentioned, I\'d especially recommend Chapter 1, although that might be on a level that\'s too low if you already have some experience with Svn. Chapter 4 covers branching and merging in detail, but it\'s quite technical.</p>\n\n<p>What helped me a lot is the <strong>Daily Use Guide in the TortoiseSVN documentation</strong>; it covers the most important operations in a tutorial style.</p>\n\n<p>I guess the most important things you need to grasp are <strong>branching, merging and tagging</strong>. Understanding those takes time and practice, so I\'d strongly recommend a small pet project in a local repository, so you can experiment. I think it\'s important to realize is that the whole system is diff-based: a merge is nothing more than automatically applying the changes that have been made in one branch to the code in another branch, instead of correcting the code yourself. Stuff like conflicts (which took me quite a lot of time to understand) are just consequences of that.</p>\n\n<p>But of course, I\'m still learning as well :)</p>\n'}, {'answer_id': 8897, 'author': 'Jon Limjap', 'author_id': 372, 'author_profile': 'https://Stackoverflow.com/users/372', 'pm_score': 3, 'selected': False, 'text': "<p>I think the most important points one has to learn regarding source control systems are the following:</p>\n\n<ul>\n<li>the value of small, frequent check-ins/commits</li>\n<li>tagging, branching and merging</li>\n<li>rollbacks</li>\n<li>conflict resolution</li>\n<li>exclusive vs. non-exclusive checkout</li>\n<li>continuous integration </li>\n<li>Test-driven development &amp; automated unit tests vis-a-vis source control systems</li>\n<li>forking</li>\n</ul>\n\n<p>If you've got these major concepts covered, that's pretty much most of the things you'll ever need to know for source control :)</p>\n"}, {'answer_id': 9584, 'author': 'Johannes', 'author_id': 925, 'author_profile': 'https://Stackoverflow.com/users/925', 'pm_score': 2, 'selected': False, 'text': '<p>I also, like you, never really felt a 100% comfortable with SVN or SourceSafe. </p>\n\n<p>Check out <a href="http://www.selenic.com/mercurial/wiki/" rel="nofollow noreferrer">Mercurial</a>. <a href="http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart" rel="nofollow noreferrer">Quickstart</a> and <a href="http://www.ivy.fr/mercurial/ref/v1.0/" rel="nofollow noreferrer">Cheatsheets</a><br>\nalso a great <a href="http://www.cuardo.com/pics/MercurialCheatSheet.gif" rel="nofollow noreferrer">cheat sheet from DongWoo Lee</a> (his site seems down so I scanned it and uploaded onto mine)</p>\n\n<p>With Mercurial everything seemed a lot more smooth and easy not sure why because it\'s not that different in commands to others.</p>\n'}, {'answer_id': 14306, 'author': 'Anders Sandvig', 'author_id': 1709, 'author_profile': 'https://Stackoverflow.com/users/1709', 'pm_score': 1, 'selected': False, 'text': '<p>I am not sure how much experience you have with version control systems, but for someone who has no prior knowledge about the concept I recommend reading the first few chapters of the <a href="http://svnbook.red-bean.com/" rel="nofollow noreferrer">Subversion book</a>. Some of the things described there are specific to Subversion, but many of the concepts are "universal" for version control systems and how to work with them. </p>\n\n<p>I think it\'s very important that people make an effort in trying to understand the main concepts and rationales behind version control systems before starting to use them. All too often I see developers only using a small subset of their system\'s features because they don\'t understand the underlying concepts and therefore either don\'t see the point in using what they consider "advanced" or "unnecessary" features, or they are simply afraid to do so in fear of breaking something or causing problems for the project.</p>\n\n<p>Having experienced this phenomenon with many developers in the past, I recently wrote up a summary of what I consider <a href="http://blog.looplabel.net/2008/07/28/best-practices-for-version-control/" rel="nofollow noreferrer">best practices for version control</a> on my blog.</p>\n'}, {'answer_id': 115433, 'author': 'Pini Reznik', 'author_id': 1656532, 'author_profile': 'https://Stackoverflow.com/users/1656532', 'pm_score': 0, 'selected': False, 'text': '<p>IMHO, the best network resource for Configuration Management would be <a href="http://www.cmcrossroads.com/bradapp/acme/" rel="nofollow noreferrer">The ACME Project</a> by Brad Appleton</p>\n\n<p>You should read about all SCM patterns and Anti patterns.\nAll SCM technical terms are well defined on this site and there are many articles on branching techniques, agile SCM and other important stuff.</p>\n\n<p>This, probably, will give you enough theoretical background to handle any specific version tool.</p>\n\n<p>As to a Subversion book, it is probably will be the Official <a href="http://svnbook.red-bean.com/" rel="nofollow noreferrer">Subversion book</a> which was mentioned above. It is available online for free or you can purchase a hard copy.</p>\n'}, {'answer_id': 754204, 'author': 'Andriy Volkov', 'author_id': 76859, 'author_profile': 'https://Stackoverflow.com/users/76859', 'pm_score': 1, 'selected': False, 'text': '<p>Read this: <a href="http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf" rel="nofollow noreferrer">How Software Evolves</a></p>\n'}, {'answer_id': 795537, 'author': 'pablo', 'author_id': 72456, 'author_profile': 'https://Stackoverflow.com/users/72456', 'pm_score': 0, 'selected': False, 'text': '<p>IMHO, this is <a href="http://www.scmpatterns.com/book/" rel="nofollow noreferrer">THE book</a>: Berczuk\'s book on SCM patterns</p>\n'}, {'answer_id': 26603132, 'author': 'Ali', 'author_id': 813739, 'author_profile': 'https://Stackoverflow.com/users/813739', 'pm_score': -1, 'selected': False, 'text': '<p><a href="http://ericsink.com/vcbe/" rel="nofollow">Version control by example by Eric Sink</a> is good and easy to follow</p>\n'}]
['https://Stackoverflow.com/questions/8747', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/614/']